zoukankan      html  css  js  c++  java
  • 第15章习题(智能匹配)

    1 . 猜数字游戏,使用given结构实现。 想想看该如何处理非数字的输入? 这里不需要用智能匹配。

    use 5.016;
    
    my $Verbose =   $ENV{VERBOSE} // 1 ; #根据环境变量决定是否打印
    my $hit = int(rand(100)+1) ; #1-100 以内随机数的产生
    
    print "hit number:$hit
    " if  $Verbose ; #根绝环境变量打印答案数字
    
    while (1) {
        print "Please enter a guess from 1 to 100:";
        chomp(my $guess = <STDIN> );  #输入数字
        # given when 结构
        given($guess) {
            when( ! /Ad+/ ) {say "Not a number!"}  #A行首 行尾 非数字
            when( $_ > $hit )  {say "Too High!" }
            when( $_ < $hit )  {say "Too low!"  }
            default   {say "Just right!"; last }     #猜中跳出循环
    
        }
    }

    2. 用given-when 结构写一个程序,根据输入的数字,如果能被3整除,就打印“Fizz”,如果能被5整除,就打印“Bin”,如果能被7整除就打印“sausage”。

        比如输入数字是15,程序就该打印“Fizz”和 “Bin”,因为15可以同时被3和5整除。 思考一下,可以让程序输出”Fizz Bin Sausage”的最小数字是多少?

    use 5.016;
    
    foreach  ( 1 .. 200 ) {
        my $what= '' ;  #赋值空串
        my $count;      #记录次数
        given($_) {
            when ( not  $_ % 3 ) { $what .= ' Fizz'; $count++;continue}
            when ( not  $_ % 5 ) { $what .= ' Bin'; $count++; continue}
            when ( not  $_ % 7 ) { $what .= ' Sausage';$count++; }
        }
    
        say "$_$what";
        last if $count == 3;  # 最小的能被3,5,7整除的数字 105
    }

    3. 用for-when 写个程序,要求从命令行遍历某个目录下的文件列表,并报告每个文件的可读,可写和可执行属性状态。不需要使用智能匹配。

    use 5.016;
    
    # 遍历命令行的文件
    for (@ARGV) {
        say "Processing $_";
        when ( ! -e ) { say "	File does not exist!"}        #文件不存在直接测试下一个文件
        when ( -r _ ) { say "	Readable!" ; continue}        #虚拟句柄测试 可读
        when ( -w _ ) { say "	Writable!" ; continue}        #虚拟句柄测试 可写
        when ( -x _ ) { say "	Excutable!" }                 #虚拟句柄测试 可执行
    }

    4. 使用given和智能匹配写个程序,从命令行得到一个数字,打印出这个数字除了1和它本身以为的因数。例如输入99,你写的程序报告3,9,11和33这4个数。

    如果输入的数字就是一个质数,程序要报告说明这是质数。如果输入的不是数字,也应该报告错误,不会继续计算。

    #!/usr/bin/perl
    # 第15 章第四题
    # 智能匹配
    
    use 5.016;
    
    say "Checking the number:<$ARGV[0]>";  #命令行输入数字进行检查
    
    
    #given-when 智能匹配
    given($ARGV[0]) {
        when ( ! /Ad+/ ) {say "Not a number!" };  #非数字
        
        my @divisors = divisors($_); #调用质数函数
    
        when ( @divisors ~~ [] ) { say "Number is a prime!" };  #与匿名空数组 智能匹配
    
        default {say "$_ is divisiable by @divisors"};          # 输出非质数的因子。
    
    
    }
    
    
    
    #返回质数的函数
    sub divisors {
        my $number = shift ;
    
        my @divisors = ();  #空数组
        foreach my $divisor  ( 2 .. ($number/2)) {
            push @divisors,$divisor unless $number % $divisor ;
        }
    
        return @divisors;
    
    }

    5.修改上题程序,报告输入数字的奇偶情况,是否是质数,是否可以被某个你喜欢的数字整除,还是只能用智能匹配实现。

    #!/usr/bin/perl
    # 第15 章第五题
    # 智能匹配
    
    use 5.010;
    
    say "Checking the number:<$ARGV[0]>";  #命令行输入数字进行检查
    
    my $love_number = 5; #喜爱的数字
    
    #given-when 智能匹配
    given($ARGV[0]) {
        when ( ! /Ad+/ ) {say "Not a number!" }  #非数字
        
        my @divisors = divisors($_); #调用质数函数
    
        when ( 2 ~~ @divisors ) {say "$_ is odd!"; continue}                                     #奇数
        when ( !(2 ~~ @divisors)) {say "$_ is even!"; continue}                                  #偶数
        when ($love_number ~~ @divisors ) {say "$_ is divisalbe by love number!"; continue}                                     #被幸运数字
        when ($love_number) { say "$_ is my favoraite number! " ; continue}                        #是幸运数字
        
        when (@divisors ~~ [] ) { say "$_ is a prime!" }  #与匿名空数组 智能匹配               # 质数
    
        default {say "$_ is divisable by @divisors"}                                            #因数输出
        
    
        
    
    
    }
    
    
    
    #返回质数的函数
    sub divisors {
        my $number = shift ;
    
        my @divisors = ();  #空数组
        foreach my $divisor  ( 2 .. ($number/2)) {
            push @divisors,$divisor unless $number % $divisor ;
        }
    
        return @divisors;
    
    }
  • 相关阅读:
    mysql source命令可以导入比较大的文件
    开源 小程序
    React-Native项目在Android真机上调试
    react-native中长度单位换算
    webpack 去console
    微信H5移动端真机调试--vConsole
    记录
    盘点ES7、ES8、ES9、ES10新特性
    Mach-o可执行文件简述
    堆排序算法
  • 原文地址:https://www.cnblogs.com/tjxwg/p/3358522.html
Copyright © 2011-2022 走看看