【问题标题】:Python 3: How to get a random 4 digit long number with no repeated digits inside that number?Python 3:如何获得一个随机的 4 位长数字,该数字内没有重复数字?
【发布时间】:2017-07-14 14:42:07
【问题描述】:

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

import random

【问题讨论】:

  • 0123 不是数字......
  • @Nullman 是的,random.sample(range(10), 4) 可以解决问题

标签: python python-3.x random numbers


【解决方案1】:

您可以使用示例:

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

cmets 中的@Copperfield 变体很优雅,因为它不需要强制转换(因为您是从字符串中采样的)。

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

【讨论】:

  • 一种变体:''.join(random.sample("0123456789", 4))
【解决方案2】:
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位数字

【讨论】:

  • 另一种变体:sum( n*10**e for e,n in enumerate( random.sample(range(10),4)))
  • @Copperfield:代码已更新。 shuffle 就地工作,reduce 不是 python3。
  • @LakshayGarg:评论有点太苛刻了,抱歉。感谢更新。 PS:我没有投反对票。
【解决方案3】:

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

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

【讨论】:

  • 这是一个聪明的答案。
【解决方案4】:

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

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

【讨论】:

  • 这与 Aaron Taggart 的回答有何不同?
【解决方案5】:

你可以把数字变成字符串:

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")

【讨论】:

    猜你喜欢
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2021-03-18
    • 1970-01-01
    • 2015-12-18
    • 2019-02-04
    相关资源
    最近更新 更多