Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 递归数字生成器不工作_Python_List_Recursion - Fatal编程技术网

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

我目前正在学习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)
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: ")))