带有限制的字母数字生成器
Alphanumeric generator with restrictions
我想创建一个使用以下字符的生成器:B C D F H J K M p Q R T V W X Y Z 2 3 4 6 7 8 9
我希望它从列表中选择18个随机字母和从列表中选择7个随机数字并将它们洗牌在一起(总共25个)。可以有重复。Python或c++。请帮助!
python code attempt:
import string
import random
letters = [random.choice('BCDFGHJKMPQRTVWXYZ') for x in range(18)]
numbers = [random.choice('2346789') for x in range(7)]
random.shuffle(letters + numbers)
你几乎是对的:
>>> import random
>>> letters = [random.choice('BCDFGHJKMPQRTVWXYZ') for x in range(18)]
>>> numbers = [random.choice('2346789') for x in range(7)]
>>> s = letters + numbers
>>> random.shuffle(s)
>>> s
['J', 'P', 'F', 'M', '3', 'Q', 'K', 'P', '2', 'K', '7', 'J', 'B', 'P', 'X', 'G', 'M', 'B', 'K', '9', '9', 'B', '8', 'V', '8']
random.shuffle(letters+numbers)
工作,但shuffle
在原地工作并返回None
。所以你创建了一个临时列表,打乱了它,然后失去了对它的任何引用。
如果需要的话:
>>> ''.join(s)
'JPFM3QKP2K7JBPXGMBK99B8V8'
至少在c++中,将它们放入数组中,循环18次,使用data[rand()%length]
获得一个随机元素,其中length为数组的长度,检查它是否为字符,并将其再次放入目标或循环中。然后,再次循环,但这次检查它是否是一个字符,并将其放入目标。
一个例子:
#include <cstdlib>
#include <iostream>
#include <cctype>
#include <ctime>
using namespace std;
int main()
{
srand(time(0));
const int length=25;
char data[]={'B', 'C', /* ... */};
for(int i=0; i<18; ++i)
{
for(char c=data[rand()%length+1];!isalpha(c);); // loop until c is char
cout << c;
}
for(int j=0; j<7; ++j)
{
for(char c=data[rand()%length+1];!isdigit(c););
cout << c;
}
}
相关文章:
- 在程序变得低效之前,允许多少新的[]和删除[]分配是否有限制?
- 对同一文件使用 .read 的次数是否有限制?
- 有条件的打印和计数在 std::map 上有限制
- arduino count++ 是否有限制以及如何修复它?
- 创建的事件数量是否有限制?
- 在SFML中,时钟有限制吗?
- 在mbed中打开的wav文件数量是否有限制
- C++中无序集的大小是否有限制
- 是否对在另一个Linux发行版中使用G 编译的可执行文件有限制
- 这个程序有限制吗?
- std::set::迭代器的大小有限制吗
- 递归是否有限制
- 可以在 CUDA 中使用的数组大小是否有限制
- 数字有困难
- 使用 SB_SETTEXT 的状态栏中显示的字符数是否有限制
- 变得刻薄和抹去数字有很大的区别
- N个整数与K对数字有多少个不能相邻的排列?
- 在matlab上生成有限制的随机向量时出现问题
- Q设置:.ini文件的行长度有限制吗
- 在Main.cpp中包含头文件有限制吗?