在perl中生成随机二进制数
我想通过使用perl生成只包含0和1(例如111111101111000000)的非重复6位的64次迭代。 我找到了可以生成随机十六进制的代码,并尝试对其进行修改,但我认为我的代码完全错了。这是我的代码:在perl中生成随机二进制数,perl,random,Perl,Random,我想通过使用perl生成只包含0和1(例如111111101111000000)的非重复6位的64次迭代。 我找到了可以生成随机十六进制的代码,并尝试对其进行修改,但我认为我的代码完全错了。这是我的代码: use strict; use warnings; my %a; foreach (1 .. 64) { my $r; do { $r = int(rand(2)); } until (!exists($a{$r})); printf "%06d\n
use strict;
use warnings;
my %a;
foreach (1 .. 64) {
my $r;
do {
$r = int(rand(2));
}
until (!exists($a{$r}));
printf "%06d\n", $r;
$a{$r}++;
}
如果需要64 x 6位整数,可以调用
int(rand(64))代码>64次,不需要单独生成每个位
您的代码可以修改为如下工作方式:
#!/usr/bin/perl
# your code goes here
use strict;
use warnings;
my %a;
foreach (1 .. 64) {
my $r;
do
{
$r = int(rand(64));
} until (!exists($a{$r}));
printf "%06b\n", $r;
$a{$r}++;
}
结果存储在整数数组中。%06b
格式说明符字符串打印出一个6位二进制数。如果需要64 x 6位整数,可以调用int(rand(64))代码>64次,不需要单独生成每个位
您的代码可以修改为如下工作方式:
#!/usr/bin/perl
# your code goes here
use strict;
use warnings;
my %a;
foreach (1 .. 64) {
my $r;
do
{
$r = int(rand(64));
} until (!exists($a{$r}));
printf "%06b\n", $r;
$a{$r}++;
}
结果存储在整数数组中。%06b
格式说明符字符串打印出一个6位二进制数。您的意思是想要64个彼此不同的6位数字吗?如果是这样的话,那么您应该将列表洗牌(0,1,2,3,…,63)
,因为总共有64个六位数字,您只需要按随机顺序排列即可
如果要将它们打印为基二字符串,请使用%06b
格式
use List::Util;
my @list = List::Util::shuffle 0..63;
printf "%06b\n", $_ for @list;
你的意思是你想要64个六位的数字,所有的数字都是彼此不同的吗?如果是这样的话,那么您应该将列表洗牌(0,1,2,3,…,63)
,因为总共有64个六位数字,您只需要按随机顺序排列即可
如果要将它们打印为基二字符串,请使用%06b
格式
use List::Util;
my @list = List::Util::shuffle 0..63;
printf "%06b\n", $_ for @list;
从评论中:
我实际上想生成所有可能的6位二进制数。由于手工编写所有可能的组合都很麻烦,而且容易出现人为错误,因此我认为最好只使用rand()不重复地生成它并将其存储到数组中
这是一种非常低效的方法,多亏了随机数的综合
您可以通过以下方式获得相同的结果:
printf ( "%06b\n", $_ ) for 1..63;
如果你想要一个随机的订单(尽管,你似乎并不建议你这样做):
从评论中:
我实际上想生成所有可能的6位二进制数。由于手工编写所有可能的组合都很麻烦,而且容易出现人为错误,因此我认为最好只使用rand()不重复地生成它并将其存储到数组中
这是一种非常低效的方法,多亏了随机数的综合
您可以通过以下方式获得相同的结果:
printf ( "%06b\n", $_ ) for 1..63;
如果你想要一个随机的订单(尽管,你似乎并不建议你这样做):
谢谢你的代码会生成重复的随机数吗?我已经编辑了代码以避免重复,一开始我没有注意到这个要求。如果这是目标的话,我认为另一个答案实际上更好,但我将把这个答案留在这里,以展示如何更改现有代码以使其工作。非常感谢。还有一件事。你能解释一下printf“%06b\n”
吗。我不确定%b
是否用于。它用于将数字格式化为二进制。%d代表十进制,%b代表二进制谢谢!。你的代码会生成重复的随机数吗?我已经编辑了代码以避免重复,一开始我没有注意到这个要求。如果这是目标的话,我认为另一个答案实际上更好,但我将把这个答案留在这里,以展示如何更改现有代码以使其工作。非常感谢。还有一件事。你能解释一下printf“%06b\n”
吗。我不确定%b
是否用于。它用于将数字格式化为二进制。%d代表十进制,%b代表二进制,你用随机数做什么?因为您应该注意到-perl random不是“强”的,所以不适合任何与安全相关的东西。实际上,我想生成所有可能的6位二进制数。由于手工编写所有可能的组合都很麻烦,而且容易出现人为错误,因此我认为最好只使用rand()不重复地生成组合并将其存储到数组中。这是一种非常低效的方法。为什么不从0数到63,然后用二进制打印呢?我忘了我实际上可以用printf
以二进制格式打印。谢谢你用随机数做什么?因为您应该注意到-perl random不是“强”的,所以不适合任何与安全相关的东西。实际上,我想生成所有可能的6位二进制数。由于手工编写所有可能的组合都很麻烦,而且容易出现人为错误,因此我认为最好只使用rand()不重复地生成组合并将其存储到数组中。这是一种非常低效的方法。为什么不从0数到63,然后用二进制打印呢?我忘了我实际上可以用printf
以二进制格式打印。谢谢