LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: KornLee

大家来做几个perl小练习

[复制链接]
 楼主| 发表于 2004-2-11 18:19:20 | 显示全部楼层
最初由 libinary 发表
我的第一题:
  1. #! /usr/bin/perl -w
  2. for($i = 1; $i <= 100; $i++){
  3.   if($i % 2){
  4.     push(@odd, $i);
  5.   }else{
  6.     push(@even, $i);
  7.   }
  8.   if($i =~ /[1,2,7]$/){
  9.     push(@end, $i);
  10.   }
  11. }
  12. print join(", ", @even), "\n\n";
  13. print join(", ", @odd), "\n\n";
  14. print join(", ", @end), "\n";
复制代码

强就一个字~
发表于 2004-2-13 09:24:43 | 显示全部楼层
把libinary的再删减一下,huh...

  1. #! /usr/bin/perl -w

  2. for($i = 1; $i <= 100; $i++){
  3.   if($i =~ /[1,2,7]$/){
  4.     push(@end, $i);
  5.   }
  6.   push(@odd, $i++);
  7.   push(@even, $i);
  8. }

  9. print join(", ", @even), "\n\n";
  10. print join(", ", @odd), "\n\n";
  11. print join(", ", @end), "\n";
复制代码
发表于 2004-2-23 03:52:24 | 显示全部楼层
好像有一点问题。 如果这样循环,以2结尾的数都被

  1. push(@odd, $i++)
复制代码

跳过去了。

最初由 x11 发表
把libinary的再删减一下,huh...

  1. #! /usr/bin/perl -w

  2. for($i = 1; $i <= 100; $i++){
  3.   if($i =~ /[1,2,7]$/){
  4.     push(@end, $i);
  5.   }
  6.   push(@odd, $i++);
  7.   push(@even, $i);
  8. }

  9. print join(", ", @even), "\n\n";
  10. print join(", ", @odd), "\n\n";
  11. print join(", ", @end), "\n";
复制代码
发表于 2009-6-5 12:38:41 | 显示全部楼层

我也来帖下我的第一题

我是新手,思路没什么新意。

  1. #!/usr/bin/perl

  2. for ($i=1; $i<=100; $i++)
  3. {
  4.    if ($i%2==0)
  5.      {
  6.         push (@even_array,$i);
  7.      }
  8.    else
  9.      {
  10.         push (@odd_array,$i);
  11.      }
  12.    $_=$i;
  13.    if (/1$|2$|7$/)
  14.      {
  15.         push (@array_127,$i)
  16.      }
  17. }
  18. print "Even Number is : @even_array\n";
  19. print "\n";
  20. print "Odd Number is : @odd_array\n";
  21. print "\n";
  22. print "Ending is 1 or 2 or 7 : @array_127\n";
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-6-5 13:22:11 | 显示全部楼层
第二题
  1. #!/usr/bin/perl
  2. @array=(1..100);
  3. for ($i=1;$i<=100;$i++)
  4. {
  5. $j=pop (@array);
  6. push (@anti_array,$j);
  7. }
  8. print "@anti_array";
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-12-15 15:43:04 | 显示全部楼层
能不能不用循环?
  1. #!/usr/bin/perl
  2. print join("\n",grep{$_ % 2 == 0} (1..100));
复制代码
  1. #!/usr/bin/perl
  2. print join("\n",grep{$_ % 2 == 1} (1..100));
复制代码
  1. #!/usr/bin/perl
  2. print join("\n",grep{$_ =~ /[127]$/} (1..100));
复制代码
  1. #!/usr/bin/perl
  2. print join("\n",reverse(1..100));
复制代码
回复 支持 反对

使用道具 举报

发表于 2010-3-1 22:36:35 | 显示全部楼层
前两题都很容易。我直接用数学方法来解第一题。
  1. #!/usr/bin/perl -w
  2. #本程序用来打印
  3. #1-100的所有偶数
  4. #1-100的所有奇数
  5. #1-100里所有以1、2、7结尾的数

  6. for(my $i=1;$i<=100;$i++){
  7.     if (!($i % 2)){
  8.         print "$i\t";
  9.     }
  10. }
  11. print "\n";

  12. for(my $i=1;$i<=100;$i++){
  13.     if ($i % 2){
  14.         print "$i\t";
  15.     }
  16. }
  17. print "\n";
  18. for(my $i=1;$i<=100;$i++){
  19.     if (($i % 10)==1){
  20.         print "$i\t";
  21.     };
  22.      if (($i % 10)==2){
  23.         print "$i\t";
  24.      };
  25.      if (($i % 10)==7){
  26.         print "$i\t";
  27.      };
  28. }
  29. print "\n";
复制代码

第二题不用说。第三题还要好好了解下命令开关(如果可以自己写循环也很容易)第四题的那个回文的条件不明白是什么意思(我学perl没多久),不知道能否请楼主再解释一下。最后一题的问题在于perl的紧凑语法。当循环内容较简单的时候,可以把它们写在一行,循环的内容在最前面,然后是循环关键词和循环条件。可以的话还可以把循环测试条件的括号省掉。(最后一题的内容在perl入门(O'Reilly)一书中有很详细的解释)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表