繁体   English   中英

Python 3:如何获得一个随机的4位长数字,该数字内没有重复的数字?

[英]Python 3: How to get a random 4 digit long number with no repeated digits inside that number?

好的,所以我需要我的程序能够获得一个随机数,该随机数内没有重复的数字。 因此,就像0012有两个0,因此我不需要那个,但是1234可以工作。 该数字也必须为4位数字长。

import random
from random import shuffle
l = [i for i in range(10)]
shuffle(l)
n = l[0] + 10 * (l[1] + 10 * (l[2] + 10 * l[3])) 

这是一个班轮

import random
from functools import reduce # you need this for python3
n = reduce(lambda a,b: 10*a+b, random.sample(range(10), 4))

注意 :由于前面出现0,因此上述两种方法有时可能会给出3位数字

您可以使用示例:

import random
numbers = random.sample(range(10), 4)
print(''.join(map(str, numbers)))

注释中的@Copperfield变体很优美,因为它无需强制转换(因为您是从字符串中采样的)。

import random
number = ''.join(random.sample("0123456789", 4))
print(number)

只有5040个选择。 如果您需要多次生成这些数字,则可能需要预先计算一个选择列表。

>>> import random, itertools
>>> choices = [''.join(x) for x in itertools.permutations('0123456789', 4)]
>>> random.choice(choices)
'0179'
>>> random.choice(choices)
'7094'

您可以使用random.sample来确保没有数字重复,

>>> import random
>>> l = random.sample(range(10), 4)
>>> int((''.join([str(x) for x in l])))
>>> 4265

您可以将数字转换为字符串:

list_number = list(range(1, 10))
w = random.choice(list_number)
list_number.remove(w)
list_number.append(0)
x = random.choice(list_number)
list_number.remove(x)
y = random.choice(list_number)
list_number.remove(y)
z = random.choice(list_number)
x = int(str(w)+str(x)+str(y)+str(z))
print("x")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM