0

我正在尝试制作一个四位数的长列表,没有重复的数字。但是,我正在运行的代码只生成一个数字,然后关闭。有人能看出为什么吗?

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

4 回答 4

3

您的 for 循环中有一个 return,因此只生成一个数字。

numbers = random.sample(range(10),4)
于 2018-09-03T21:18:51.337 回答
1
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,则不允许使用randintcompnum

输出

(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]

10 次迭代的结果

在定义您的函数以使用不同的变量名称时,我会考虑,而不是您传递的实际变量,例如。def compnumber(list_to_append)

于 2018-09-03T22:46:11.050 回答
0

您的代码存在一些问题:

  1. 你正在返回里面for-loop
  2. 循环只运行 4 次,与compnum4 个值无关,因此它可能返回compnum小于 4 个值的 a。

你可以这样写:

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

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

import random

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

print(compnum)
于 2018-09-03T21:23:06.510 回答
0

最 Pythonic 的方法是 Daniel 的回答,使用sample().

使用循环(你的方法)也很好。

这是我对如何使用循环执行此操作的看法:

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))
于 2018-09-03T21:41:15.160 回答