Arrays 在Perl中为已知范围生成有限数量的随机数
我有一个包含两个字母的文件Arrays 在Perl中为已知范围生成有限数量的随机数,arrays,string,perl,random,range,Arrays,String,Perl,Random,Range,我有一个包含两个字母的文件letters.txt @string1 10 letters A H K Y M H O L H L @string2 9 letters H N U P W X L Y H 我正在尝试创建一个文件,其中每个字母、每个字符串的随机数为20到60 我的预期输出应该如下所示: output.txt: 我尝试了以下代码,其中$minimum为20,$maximum为60: open ($fh, '>', $fileToLocate) or die; my
letters.txt
@string1 10 letters
A H K Y M H O L H L
@string2 9 letters
H N U P W X L Y H
我正在尝试创建一个文件,其中每个字母、每个字符串的随机数为20到60
我的预期输出应该如下所示:
output.txt:
我尝试了以下代码,其中$minimum
为20,$maximum
为60:
open ($fh, '>', $fileToLocate) or die;
my $x = $minimum + int(rand($maximum - $minimum);
print $fh "$x\n";
close $fh;
它只在$fileToLocate
文件中创建一个随机数
我想提取每个字符串中的字母数-在输入文件的字母
之前写入:10表示@string1
,9表示@string2
我试图用这段代码创建30个介于20到60之间的随机数,但是没有成功
my @Chars = ( 20 .. 60);
$RandString = join("", @Chars[ map { $x } ( 1 .. 30 ) ]);
print $fh "$RandString\n";
close $fh;
你很接近
从
$min
到$max
中选择随机数的代码如下所示
my $rand = $min + int rand($max - $min + 1));
所以你的那部分是对的,但是一个接一个的错误(我之前也犯了同样的错误)。因为rand
从0开始,int rand$x
将从0变为$x-1
然后你需要生成一堆。你很接近地图,但是$x
只存储一个随机数,所以map{$x}(1..30)
只会给你一个重复30次的数字。相反,您需要在地图块内获得一个新的随机数
my @rands = map { $min + int rand($max - $min + 1)) } 1..length $string;
这将运行int($x+rand($y-$x))
的次数等于$string
中的字符数,并将它们全部放入列表@rands
。然后你可以像以前一样加入@rands
print $fh join '', @rands;
这会让你走完剩下的路。你很接近了
从
$min
到$max
中选择随机数的代码如下所示
my $rand = $min + int rand($max - $min + 1));
所以你的那部分是对的,但是一个接一个的错误(我之前也犯了同样的错误)。因为rand
从0开始,int rand$x
将从0变为$x-1
然后你需要生成一堆。你很接近地图,但是$x
只存储一个随机数,所以map{$x}(1..30)
只会给你一个重复30次的数字。相反,您需要在地图块内获得一个新的随机数
my @rands = map { $min + int rand($max - $min + 1)) } 1..length $string;
这将运行int($x+rand($y-$x))
的次数等于$string
中的字符数,并将它们全部放入列表@rands
。然后你可以像以前一样加入@rands
print $fh join '', @rands;
这应该会帮你解决剩下的问题。没有提供任何信息。你写的东西有什么问题,你期望得到什么样的输出?它没有创建一个文件,甚至连一个数字都没有。我的期望是在$RandString中有30个不同/相同的数字,范围在20到60之间,并且在$fh中有这个作为我的输出?Schwern的回答能帮你解决问题吗?看一看,没有。我仍然没有输出,但感谢您在这里分享我以后应该做的事情。很好学。什么是
$x
?“它不起作用”没有提供任何信息。你写的东西有什么问题,你期望得到什么样的输出?它没有创建一个文件,甚至连一个数字都没有。我的期望是在$RandString中有30个不同/相同的数字,范围在20到60之间,并且在$fh中有这个作为我的输出?Schwern的回答能帮你解决问题吗?看一看,没有。我仍然没有输出,但感谢您在这里分享我以后应该做的事情。很好学习。什么是$x
?“你很接近”?从$min
到$max
随机选取一个数字的代码实际上是这样的:my$pick=int rand($max-$min+1)+$min
int($min+rand($max-$min))
永远不会导致值$max
@Borodin Right,由一个错误关闭<代码>兰德从0开始。谢谢谢谢你的回答。对于代码的最后一部分,当我以print$fh join''的形式编写时,@rands
;它说我有一个语法错误。当我在print后面加括号时为:print($fh join'',@rands)代码>它将打印作为一个函数,但仍然不创建任何内容。你能告诉我打字错误在哪里吗?我还使用了push@rands,$fh代码>,但它说我仍然有语法错误。目前,我的代码在下面,并说在打印
-->打开($fh,'>,$fileToLocate)或死亡时,我看不到语法错误;my$rand=$minimum+int rand($maximum-$minimum+1);my@rands=map{$minimum+int rand($maximum-$minimum+1)}1..5#$string;1..5打印$fh join(“”,@rands);关闭$fh;}
“你很接近了”?从$min
到$max
随机选取一个数字的代码实际上是这样的:my$pick=int rand($max-$min+1)+$min
int($min+rand($max-$min))
永远不会导致值$max
@Borodin Right,由一个错误关闭<代码>兰德
从0开始。谢谢谢谢你的回答。对于代码的最后一部分,当我以print$fh join''的形式编写时,@rands
;它说我有一个语法错误。当我在print后面加括号时为:print($fh join'',@rands)代码>它将打印作为一个函数,但仍然不创建任何内容。你能告诉我打字错误在哪里吗?我还使用了push@rands,$fh代码>,但它说我仍然有语法错误。目前,我的代码在下面,并说在打印
-->打开($fh,'>,$fileToLocate)或死亡时,我看不到语法错误;my$rand=$minimum+int rand($maximum-$minimum+1);my@rands=map{$minimum+int rand($maximum-$minimum+1)}1..5#$