【问题标题】:Python getting user input errorsPython获取用户输入错误
【发布时间】:2013-09-18 07:21:02
【问题描述】:

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

谁能告诉我我在这里做错了什么?

【问题讨论】:

  • 对输入使用递归不是这样做的方法。使用input 是另一个缺陷。

标签: python user-input


【解决方案1】:

你需要使用

return getNum(numList)

而不是

getNum(numList)

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

【讨论】:

    【解决方案2】:

    您在“如果条件”中调用 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)
    

    【讨论】:

      【解决方案3】:

      一个完整的解决方案,没有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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 2020-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-31
        相关资源
        最近更新 更多