Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Perl中为已知范围生成有限数量的随机数_Arrays_String_Perl_Random_Range - Fatal编程技术网

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#$