Python收到用户输入错误

时间:2013-09-18 07:21:03

标签: python user-input

我有一个简单的程序,提示用户输入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 

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

3 个答案:

答案 0 :(得分:1)

您需要使用

return getNum(numList)

而不是

getNum(numList)
getNum函数中的

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

答案 1 :(得分: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)

答案 2 :(得分: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)