Python 递归数字生成器不工作
我目前正在学习python,在尝试编写一个简单的乐透程序时,遇到了一个小问题 我要做的是生成两个列表,每个列表包含六个数字。第一个是通过询问用户一个数字生成的 第二个通过使用Python 递归数字生成器不工作,python,list,recursion,Python,List,Recursion,我目前正在学习python,在尝试编写一个简单的乐透程序时,遇到了一个小问题 我要做的是生成两个列表,每个列表包含六个数字。第一个是通过询问用户一个数字生成的 第二个通过使用randint 如果我这样编码: from random import randint lottoschein = [] gewinnzahlen = [] while (len(lottoschein)<6): lottoschein.append(int(input("Bitte geben sie ein
randint
如果我这样编码:
from random import randint
lottoschein = []
gewinnzahlen = []
while (len(lottoschein)<6):
lottoschein.append(int(input("Bitte geben sie eine Zahl ein: ")))# Eingabeaufforderung
print (lottoschein)
print (len(lottoschein))
while (len(gewinnzahlen)<6):
zahl = randint (1,49)
gewinnzahlen.append(zahl)
print (gewinnzahlen)
from random import randint
lottoschein = []
gewinnzahlen = []
def zahlen (schein,zahl):
if(len(schein)<6):
schein.append(zahl)
return zahlen (schein,zahl)
else:
print (schein)
return schein
lottoschein = zahlen (lottoschein, int(input("Bitte geben sie eine Zahl ein: ")))
gewinnzahlen = zahlen (gewinnzahlen, randint (1,49))
正是我让它做的。但如果我尝试用递归函数对其进行编码,如下所示:
from random import randint
lottoschein = []
gewinnzahlen = []
while (len(lottoschein)<6):
lottoschein.append(int(input("Bitte geben sie eine Zahl ein: ")))# Eingabeaufforderung
print (lottoschein)
print (len(lottoschein))
while (len(gewinnzahlen)<6):
zahl = randint (1,49)
gewinnzahlen.append(zahl)
print (gewinnzahlen)
from random import randint
lottoschein = []
gewinnzahlen = []
def zahlen (schein,zahl):
if(len(schein)<6):
schein.append(zahl)
return zahlen (schein,zahl)
else:
print (schein)
return schein
lottoschein = zahlen (lottoschein, int(input("Bitte geben sie eine Zahl ein: ")))
gewinnzahlen = zahlen (gewinnzahlen, randint (1,49))
似乎它只生成一次数字。我不明白的是为什么。有人能帮我让递归函数工作吗?一旦调用
randint()
,它就会返回一个数字。传递给函数的是那个数字,而不是函数
换句话说,您只需调用函数一次,并反复重用输出
另一方面,您的while
循环会在每次迭代时重新执行循环体,因此在这种情况下,input()
函数或randint()
函数会在while
循环的每次迭代中被调用,从而输入一个新的数字
如果希望在每次执行循环时调用函数,请传入函数和参数:
def zahlen(schein, function, *arguments):
if len(schein) < 6:
schein.append(function(*arguments))
return zahlen(schein, function, *arguments)
return schein
现在,每次在递归函数中调用lambda:int(输入('..'))
(不带参数),或者使用参数1
和49
调用randint
演示:
def zahlen(schein,函数,*参数):
... 如果len(schein)<6:
... schein.append(函数(*参数))
... 返回zahlen(schein,函数,*参数)
... 返回schein
...
>>>从随机导入randint
>>>扎伦([],兰丁,1,49)
[42, 11, 41, 28, 27, 24]
>>>zahlen([],lambda:int(输入('请输入一个数字:'))
请输入一个数字:10
请输入一个数字:20
请输入一个数字:30
请输入一个号码:42
请输入一个数字:38
请输入一个数字:2
[10, 20, 30, 42, 38, 2]
你的问题就在眼前
return zahlen (schein,zahl)
这里,您正在使用第一次调用时使用的相同整数调用zahl
。尝试将其替换为:
return zahlen(schein, int(input("Bitte geben sie eine Zahl ein: ")))
你只问了一次电话号码<代码>输入(“BITE geben Sie eine Zahl ein”)只发生一次。你可能想在你的
zahlen
函数中移动那段代码。我不能在我的zahlen函数中使用输入,因为我需要2个函数。一个用于手动输入,另一个用于自动生成。如果我这样做的话,我只会得到语法错误:只能将带星号的表达式用作赋值target@Sulumar:您是否完全按照此处所示使用了该功能?您使用的是什么版本的Python?我用Python2.7和3.3测试了这一点。现在我只需要了解一些细节,基本上gewinnzahlen必须由唯一的数字组成。因此,最好将schein
设置为set
而不是列表(并使用schein.add
而不是append
。)
return zahlen (schein,zahl)
return zahlen(schein, int(input("Bitte geben sie eine Zahl ein: ")))