我正在尝试制作一个四位数长的列表,没有重复的数字。但是,我正在运行的代码仅生成一个数字,然后关闭。 有人可以看到原因吗?
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)
谢谢!
答案 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)
您的代码存在一些问题:
for-loop
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))