生成没有重复的四位数列表

时间:2018-09-03 21:14:18

标签: python

我正在尝试制作一个四位数长的列表,没有重复的数字。但是,我正在运行的代码仅生成一个数字,然后关闭。 有人可以看到原因吗?

import random

complist = [0,1,2,3,4,5,6,7,8,9]
compnum = []
userlist = []
usernum = []


def compnumber(compnum):
    for i in range(4):
        compx = random.randint(0,9)
        if compx in compnum:
            compx = 0
            return compx, compnum
        else:
            compnum.append(compx)
            compx = 0
            return compx, compnum
compnumber(compnum)
print(compnum)

谢谢!

4 个答案:

答案 0 :(得分:3)

for循环中有一个退货,因此只生成一个数字。

numbers = random.sample(range(10),4)

答案 1 :(得分:1)

connected

您可以设置一个import random complist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] compnum = [] userlist = [] usernum = [] def compnumber(compnum): for i in range(4): compx = random.randint(0, 9) while compx in compnum: compx = random.randint(0, 9) compnum.append(compx) compnumber(compnum) print(compnum) 条件,如果已将while添加到randint

,则不允许使用该条件。

输出

compnum

10次迭代的结果

在定义函数以使用其他变量名而不是要传递的实际变量时,我会考虑一下。 (xenial)vash@localhost:~/python$ python3.7 helpin.py [1, 4, 2, 3] [4, 2, 1, 8] [2, 0, 4, 1] [4, 6, 2, 3] [1, 2, 0, 9] [6, 4, 9, 3] [2, 8, 7, 0] [7, 5, 4, 0] [0, 9, 7, 3] [4, 9, 2, 1]

答案 2 :(得分:0)

您的代码存在一些问题:

  1. 您将返回for-loop
  2. 该循环仅运行4次,而与compnum的4个值无关,因此它可能返回一个compnum且其值少于4个。

您可以这样写:

import random

complist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
compnum = []
userlist = []
usernum = []


def compnumber(compnum):
    while len(compnum) != 4:
        compx = random.randint(0, 9)
        if compx not in compnum:
            compnum.append(compx)
    return compx, compnum


compnumber(compnum)
print(compnum)

输出

[9, 7, 8, 2] # as an example

但是最好的方法是使用随机模块的sample函数,如下所示:

import random

complist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
compnum = random.sample(complist, 4)

print(compnum)

答案 3 :(得分:0)

最Python化的方式是使用sample()的Daniel的答案。

使用循环(您的方法)也可以。

这是我如何循环执行的事情:

import random

compnum = []

def compnumber(ur_list):
    while len(ur_list) < 4:
        compx = random.randint(0,9)
        if compx not in ur_list:
            ur_list.append(compx)
    return ur_list

print(compnumber(compnum))