Perl循环程序

问题描述 投票:0回答:3

我正在尝试编写一个程序来完成以下任务:

使用循环结构并编写生成以下输出的程序(使用一个参数让用户指定需要打印的行数):

A
AA
AAA
AAAB
AAABA
AAABAA
AAABAAA
AAABAAAB
...

无论如何,我无法使我的程序正确运行。我觉得我很接近但是当我尝试运行它时,没有任何反应......有什么建议吗?

#!/usr/local/bin/perl

$A = 3;
$B = 1;
$i = 1;
$output = "";
$j = 1;

while ($i <= $ARGV[0]) {
  while ($j <= $i) {
    if ($A == 0 && $B == 0) {
      $A = 3;
      $B = 1;
    }

    if ($A > 0) {
      $output.= "A";
      $A--;
    }
    else {
      $output.= "B";
      $B--;
    }

    &j++;
  }

  print($output  .  "/n");
  $i++;
}
perl
3个回答
2
投票

当我运行它时,我收到此错误:

无法在行修改非左值子程序调用...

你使用了错误的印记。更改:

&j++;

至:

$j++;

此外,你可能想要\n而不是/n


0
投票

这个程序就像你问的那样。它期望列表条目的数量作为参数在命令行上传递,如果指定了non,则默认为8。

use strict;
use warnings;

my $max = shift // 8;

my $string;
my @strings;
push @strings, $string .= $_ & 3 ? 'A' : 'B' for 1 .. $max;

print "@strings\n";

产量

A AA AAA AAAB AAABA AAABAA AAABAAA AAABAAAB

0
投票

如果您将&j++更改为$j++并将print($output . "/n")更改为print($output . "\n"),那么您的程序将正常工作。但是它确实需要一些整理,就像这样

$A      = 3;
$B      = 1;
$i      = 1;
$output = "";
$j      = 1;

while ($i <= $ARGV[0]) {
  while ($j <= $i) {

    if ($A == 0 && $B == 0) {
      $A = 3;
      $B = 1;
    }

    if ($A > 0) {
      $output .= "A";
      $A--;
    }
    else {
      $output .= "B";
      $B--;
    }

    $j++;
  }

  print($output . "\n");
  $i++;
}
© www.soinside.com 2019 - 2024. All rights reserved.