我目前正在学习python,在试图编写一个简单的乐透程序时,我遇到了一个小问题。在
我要做的是生成两个列表,每个列表包含六个数字。第一个是通过要求用户输入一个数字来生成的。在
第二个方法使用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)
它实际上可以工作并产生一个很好的输出,比如
^{pr2}$正是我让它做的。
但如果我试着用这样的递归函数来编码它:
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]
似乎它只生成一次数字。
我不明白为什么。有谁能帮我让递归函数正常工作吗?在
你的问题就在这条线上
在这里,您使用与第一次调用相同的整数
^{pr2}$zahl
调用zahlen
。尝试将其替换为:一旦调用
randint()
,它将返回一个数字。传入函数的是数字,而不是函数。在换句话说,只调用函数一次并反复重用输出。在
另一方面,}循环的每次迭代中都会被调用,从而输入一个新的数字。在
while
循环在每次迭代中都会重新执行循环体,因此在这种情况下,input()
函数或randint()
函数在{如果希望每次遍历循环时都调用一个函数,请传入函数和参数:
把这个叫做:
^{pr2}$现在,在递归函数中,要么每次调用}调用{}。在
lambda: int(input('....'))
(不带参数),要么使用参数1
和{演示:
^{3}$相关问题 更多 >
编程相关推荐