我试图创建一个简单的代码,它接受用户输入并将其添加到列表中。我希望用户输入分数,直到他们按下" Q"退出。出于某种原因,它认为我的userInput是一个字符串,当它不是。每次用户输入数字时,我希望它将该输入转换为整数。但它不会让我这样做,因为它不能有一个“上层”。我之前在另一个节目上做过这个,所以我不知道为什么它现在不让我。这是我的代码:
def main():
list1= []
userInput= input("Please enter an integer between 0 and 10: ")
amountOfscoresEntered= 0
while userInput.upper() != "Q":
userInput= int(userInput)
amountOfscoresEntered= amountOfscoresEntered + 1
if userInput < 0 or userInput > 10:
print("Invalid Input")
else:
list1.append(userInput)
totalNumofPointsearned= sum(list1)
main()
答案 0 :(得分:1)
作为while循环的最后一行,添加
userInput= input("Please enter an integer between 0 and 10: ")
这应该可以解决您的问题。
您正在使用while
循环并给出条件以在用户输入字母Q时将其中断。这意味着您希望用户继续提供多个输入。到目前为止,在您的程序中,它只需要用户输入一次。因此,在while循环的第二次迭代中,它将使用您转换为userInput.upper() != "Q"
的变量检查条件int
。这是您收到错误的地方。通过添加一行来将另一个用户输入带到循环的末尾,可以解决您的问题。
答案 1 :(得分:1)
在while循环的每次迭代中,将userInput
转换为整数。整数类型没有属性.upper()
,因此Python会相应地引发错误。
实现目标的更好方法是使用while True
循环。这样,您就可以避免在while循环中测试用户输入,并允许自己使用.upper()
:
def main():
list1 = []
amountOfscoresEntered = 0
while True: # use while true instead
# get user input repeatedly
userInput = input("Please enter an integer between 0 and 10: ")
# lets check the user input
# before we cast it to an integer.
if userInput.upper() == "Q":
break
elif 0 < int(userInput) < 10:
print("Invalid Input")
else:
# once we have verified that
# our input is what we want,
# we can cast `userInput` to
# an integer, and add it to
# `list1`.
list1.append(int(userInput))
amountOfscoresEntered += 1
totalNumofPointsearned = sum(list1)
答案 2 :(得分:0)
想一想。在
行userInput= input("Please enter an integer between 0 and 10: ") # input always gives string, even if they enter a number.
如果你的用户输入字符串'10'(因为input()方法总是给你一个字符串)那么你的while循环所做的第一件事是尝试将它设为大写
while userInput.upper() != "Q":
那么,大写'10'是什么样的?
答案 3 :(得分:0)
尝试使用变量作为循环条件,然后在
if userInput.isalpha():
if userInput.upper() == "Q":
running = False
时将循环设为false
答案 4 :(得分:0)
在提供您正在寻找的解决方案之前,我没有什么需要注意的事项。
Python版本:根据您使用的python版本,您可能会遇到或不会遇到此类错误。
input() - &gt; python2.x不能很好地解释字母。它然后转换为变量并尝试解释它们。因此,导致您的程序失败。
raw_input() - &gt;实际上接受输入并允许您做任何你想做的事情。
固定代码:
def main():
list1 = []
amountOfScoresEntered = 0
totalNumOfPointsEarned = 0
userInput= raw_input("Please enter an integer between 0 and 10: ")
while str(userInput).upper()!="Q":
amountOfScoresEntered= amountOfScoresEntered + 1
if int(userInput) < 0 and int(userInput) > 10:
print("Invalid Input")
else:
list1.append(userInput)
totalNumofPointsEarned= sum(list1)
userInput= raw_input("Please enter an integer between 0 and 10: ")
main()
答案 5 :(得分:0)
用户输入已经在while循环中,并且必须使用try块来相应地捕获异常。由于upper()不能与整数一起使用,因此分别使用'Q'和'q'进行验证。
工作代码:
def main():
list1 = []
amountOfscoresEntered = 0
totalNumofPointsearned=0
while True:
userInput = input("Please enter an integer between 0 and 10: ")
try:
if userInput == "Q" or userInput == 'q':
break
elif not userInput.isalpha() and not int(userInput) < 0 and not int(userInput) >10:
userInput = int(userInput)
amountOfscoresEntered = amountOfscoresEntered + 1
list1.append(userInput)
totalNumofPointsearned = sum(list1)
else:
print("Invalid Input")
except ValueError:
print ('Invalid Input')
return amountOfscoresEntered, totalNumofPointsearned
if __name__ == '__main__':
attempt, total_point_earned = main()
print('Number of Attempts=%s \nTotal Points Earned=%s' %(attempt,total_point_earned))