0

我有一个简单的程序,提示用户输入 1-9 之间的数字,如果之前输入了数字,它将要求用户输入另一个数字。用户有 10 次尝试或尝试。

这只是我想做的一部分,但我在将参数从 getNum 方法传递到调用它的方法时遇到问题。如果我输入1-9之间的数字,就没有问题。当我输入之前输入的号码并且提示要求输入另一个号码时,问题就开始了。

def getNum(numList):
    num = input("Pick your number: ")

    if num <= 0 or num >9:
        print 'Invalid number. Please try again.'
        getNum()

    if num in numList:
        print 'Number taken. Please try again.'
        getNum()

    else: 
        return num  

inputList = []
endGame = True
choice = 0  
attempts = 0 
while endGame == False or attempts < 10:

    userNum = getNum(inputList)
    print 'Number entered:', userNum
    inputList.append(userNum)
    print inputList

    attempts += 1 

谁能让我知道我在这里做错了什么?

4

3 回答 3

1

你需要使用

return getNum(numList)

代替

getNum(numList)

getNum函数中。原因是您getNum递归调用该函数,因此您必须通过您所做的所有递归返回接受的值。此外,您必须将参数传递给每个调用。

于 2013-09-18T07:26:45.270 回答
0

您在“如果条件”中调用 getNum() 的方式是错误的,它应该是:-

if num <= 0 or num >9:
    print 'Invalid number. Please try again.'
    getNum(numList)

if num in numList:
    print 'Number taken. Please try again.'
    getNum(numList)
于 2013-09-18T07:27:29.420 回答
0

input一个完整的解决方案,没有错误处理的危险,也没有递归限制的问题。

def get_num(num_list):
    while True:
        try:
            num = int(raw_input('Pick your number: '))
        except ValueError:
            print('Not a number')
        else:
            if 0 < num <= 9:
                if not num in num_list:
                    return num
                else:
                    print('Number taken.')
            else:
                print('Invalid number.')

number_list = []
for _ in range(5):
    number = get_num(number_list)
    print('Number entered: {}'.format(number))
    number_list.append(number)
于 2013-09-18T07:43:20.617 回答