我需要从用户那里收到5或10或15或20,如果不是,我会再次询问他们,直到他们输入四个数字中的任何一个。这是代码,但没有做同样的事情。指出逻辑上的误解。
{{1}}
答案 0 :(得分:1)
首先,你不要重复任何事情。通常,将使用while()
循环。其次,您正在使用ne
来比较字符串。你需要的是==
数字输入。第三,你的if
陈述不起作用。你必须重复完整的比较:
if ($x == 5 || $x == 10 || $x == 15) {...}
以下是循环示例,并使用grep()
进行比较:
use warnings;
use strict;
while (1){
print "Enter either 5 or 10 or 15 or 20): ";
my $obfuscation_percentage = <STDIN>;
chomp $obfuscation_percentage;
my @valid = qw(5 10 15 20);
if (grep {$obfuscation_percentage == $_} @valid){
print 10 * $obfuscation_percentage ."\n";
last;
}
}
__END__
Enter either 5 or 10 or 15 or 20): 7
Enter either 5 or 10 or 15 or 20): 12
Enter either 5 or 10 or 15 or 20): 5
50
答案 1 :(得分:0)
一些问题。
首先,你不要在任何时候循环,也不要检查STDIN的第二次读取。这是你的代码美化。
print "Enter either 5 or 10 or 15 or 20): ";
my $obfuscation_percentage = <STDIN>;
chomp $obfuscation_percentage;
if ($obfuscation_percentage ne 5 or 10 or 15 or 20 ){
print "Enter valid number: ";
}
$obfuscation_percentage = <STDIN>;
chomp $obfuscation_percentage;
所以你需要某种循环来从stdin读取。
第二个问题是,来自perlop
二进制“或”返回两个周围表达式的逻辑分离。它相当于||除了非常低的优先权。这使它对控制流有用:
所以它不会像你想象的那样工作,比如列表检查。您需要检查每个号码或做其他事情。
同样ne
是一个字符串比较,但你在运算符的右侧有整数,虽然Perl可能足够聪明,可以理解。