我正在学习python,在尝试编写一个简单的乐透程序时,我遇到了一个小问题。
我要做的是生成两个列表,每个列表包含六个数字。第一个是通过询问用户输入数字而生成的。
第二个使用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)
它实际上可以工作并生成一个很好的输出,如
Bitte geben sie eine Zahl ein: 1
[1]
1
Bitte geben sie eine Zahl ein: 5
[1, 5]
2
Bitte geben sie eine Zahl ein: 4
[1, 5, 4]
3
Bitte geben sie eine Zahl ein: 4
[1, 5, 4, 4]
4
Bitte geben sie eine Zahl ein: 5
[1, 5, 4, 4, 5]
5
Bitte geben sie eine Zahl ein: 8
[1, 5, 4, 4, 5, 8]
6
[40]
[40, 33]
[40, 33, 42]
[40, 33, 42, 20]
[40, 33, 42, 20, 35]
[40, 33, 42, 20, 35, 14]
正是我要求它做的 但是,如果我尝试在这样的递归函数中编码:
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))
它返回如下输出:
Bitte geben sie eine Zahl ein: 2
[2, 2, 2, 2, 2, 2]
[17, 17, 17, 17, 17, 17]
似乎只生成一次数字 我不明白的是为什么。有人可以帮助我让递归函数工作吗?
答案 0 :(得分:1)
致电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
并将其称为:
lottoschein = zahlen(lottoschein, lambda: int(input("Bitte geben sie eine Zahl ein: "))))
gewinnzahlen = zahlen(gewinnzahlen, randint, 1, 49)
现在,每次在递归函数中调用lambda: int(input('....'))
(不带参数),或者使用参数randint
和1
调用49
。
演示:
>>> def zahlen(schein, function, *arguments):
... if len(schein) < 6:
... schein.append(function(*arguments))
... return zahlen(schein, function, *arguments)
... return schein
...
>>> from random import randint
>>> zahlen([], randint, 1, 49)
[42, 11, 41, 28, 27, 24]
>>> zahlen([], lambda: int(input('Please enter a number: ')))
Please enter a number: 10
Please enter a number: 20
Please enter a number: 30
Please enter a number: 42
Please enter a number: 38
Please enter a number: 2
[10, 20, 30, 42, 38, 2]
答案 1 :(得分:0)
你的问题在
行 return zahlen (schein,zahl)
在这里,您使用第一次调用时使用的相同整数zahlen
调用zahl
。尝试将其替换为:
return zahlen(schein, int(input("Bitte geben sie eine Zahl ein: ")))