免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷
打印 上一主题 下一主题

ChinaUnix技术实践之三——Perl编程大赛 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
91 [报告]
发表于 2011-04-01 14:44 |只看该作者
好些不會

论坛徽章:
0
92 [报告]
发表于 2011-04-03 21:33 |只看该作者
#!C:\Perl\bin\perl -w
use strict;
my $secret = int (1+rand 100);

print "Your guess: ";

while (my $guess = <>) {

    chomp $guess;

    if ($guess =~ (/[^\d+]|^\s*$|^quit$|^exit$/)) {
           print "You input error or say bye.";
           exit;
          }

    $guess > $secret ? print "Too high. You guess again: " : print "Too low.

Your guess again: ";

      exit if $guess == $secret;
}

论坛徽章:
0
93 [报告]
发表于 2011-04-20 03:50 |只看该作者
对部分标准答案持怀疑态度。

论坛徽章:
0
94 [报告]
发表于 2011-05-06 11:37 |只看该作者
mark

求职 : 网络信息安全
论坛徽章:
0
95 [报告]
发表于 2011-05-12 22:11 |只看该作者
呵呵,好久没来,错过了。

论坛徽章:
0
96 [报告]
发表于 2011-06-03 23:33 |只看该作者
sub myfunc {

    # $x = ...;
    $x ?1: ;

}

论坛徽章:
0
97 [报告]
发表于 2012-03-15 11:54 |只看该作者
本帖最后由 午夜凋零 于 2012-03-15 11:55 编辑

第1题:
  1. sub myfunc{
  2.     #my $x = shift;
  3.     return 1 if $x;
  4. }
复制代码
第2题:
  1. $x的结果是空的,相当于undef。
  2. 列表位于标量上下文中,返回列表最后一个元素。
  3. ()可以用来创建空的list。
复制代码
第3题:
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;

  4. my @a = (1, 2, 3, 5, 6, 7, 8, 10, 11);
  5. my @b = @a;
  6. my $b = shift @b;
  7. my $c = $b;
  8. my @c;
  9. foreach ( @b ) {
  10.     if ( $_ == $b + 1 ) {
  11.     }
  12.     else {
  13.         push @c, "$c-$b";
  14.         $c = $_;
  15.     }
  16.     $b = $_;
  17. }
  18. push @c, "$c-$b";
  19. print "[@c]\n";
复制代码
第4题:
  1. $x[1]是数组中的一个元素,@x[1]是一个数组,只有一个元素。
复制代码
第5题:
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;

  4. my %hash = map { -M $_, $_ } glob "*";
  5. print "@hash{sort {$a <=> $b} keys %hash}\n";
复制代码
第6题:
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;

  4. my @a = 1..10;
  5. my @b = &gt_ave(@a);
  6. print "[@b]\n";

  7. sub gt_ave {
  8.     my $sum = 0;
  9.     $sum += $_ for @_;
  10.     return grep { $_ > $sum / @_ } @_;
  11. }
复制代码
第7题:
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;

  4. my $a = int(1 + rand 4);
  5. while (<>) {
  6.     chomp $_;
  7.     last if ( /^\s*$/ or $_ eq 'exit' or $_ eq 'quit' );
  8.     do { print "Please input a number:\n" and next; } if /\D/;
  9.     do { print "Bingo!\n" and last } if $_==$a;
  10.     do { print "too low!\n" and next } if $_ < $a;
  11.     do { print "too high!\n" and next } if $_ > $a;
  12. }
复制代码
第8题:
  1. 这是网络方面的吗?一点也不会,抱歉。
复制代码

论坛徽章:
0
98 [报告]
发表于 2012-03-17 10:52 |只看该作者
我发现很多人没有经过详细测试就把代码贴出来了,大多数人可能觉得第一题很简单,其实大有文章。
先把我的答案贴出来:
  1. sub myfunc{
  2.         $x?1:undef;
  3. }
复制代码
我是主做C语言的,perl水平不高,经过详细测试后,终于理解到myfunc函数的返回值只有两个: 1和undef ,那就应该在代码里明确指出来。
没时间仔细看前面帖子,简单翻了几页,发现很多人的代码不会返回undef,最接近正确答案的是下面这个:
  1. sub myfunc{
  2.         $x?1:return;
  3. }
复制代码
我的代码只是把"return"改成 "undef" ,那个清晰度立马就提高了不知多少倍。

非常支持这种比赛,只是希望大家写代码时考虑详细点,多测试,努力提高代码质量。

论坛徽章:
0
99 [报告]
发表于 2012-03-17 10:58 |只看该作者
妈的,看错日期了,1年前的帖子!!!!
平时几乎不回帖的,难得回一个,居然是挖....

论坛徽章:
0
100 [报告]
发表于 2012-03-17 11:15 |只看该作者
我错了,
$x?1:undef;是错误的,赋值给数组时有问题,
条款10 如需空数组,请勿用undef赋值
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP