递归数字生成器无法工作

2024-09-27 09:27:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在学习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]

似乎它只生成一次数字。
我不明白为什么。有谁能帮我让递归函数正常工作吗?在


Tags: len数字printrandintappendsiegebenbitte
2条回答

你的问题就在这条线上

   return zahlen (schein,zahl)

在这里,您使用与第一次调用相同的整数zahl调用zahlen。尝试将其替换为:

^{pr2}$

一旦调用randint(),它将返回一个数字。传入函数的是数字,而不是函数。在

换句话说,只调用函数一次并反复重用输出。在

另一方面,while循环在每次迭代中都会重新执行循环体,因此在这种情况下,input()函数或randint()函数在{}循环的每次迭代中都会被调用,从而输入一个新的数字。在

如果希望每次遍历循环时都调用一个函数,请传入函数和参数:

def zahlen(schein, function, *arguments):
    if len(schein) < 6:
        schein.append(function(*arguments))
        return zahlen(schein, function, *arguments)
    return schein

把这个叫做:

^{pr2}$

现在,在递归函数中,要么每次调用lambda: int(input('....'))(不带参数),要么使用参数1和{}调用{}。在

演示:

^{3}$

相关问题 更多 >

    热门问题