Python 为什么即使输入是整数,我仍然会得到TypeError?
我正在为一个学校项目编写一些代码,该项目要求用户输入一个介于0-10之间的数字,我不知道为什么我会一直收到一个TypeError,即使使用列表将输入转换为整数。需要帮忙吗?我在101楼做这个Python 为什么即使输入是整数,我仍然会得到TypeError?,python,typeerror,Python,Typeerror,我正在为一个学校项目编写一些代码,该项目要求用户输入一个介于0-10之间的数字,我不知道为什么我会一直收到一个TypeError,即使使用列表将输入转换为整数。需要帮忙吗?我在101楼做这个 numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven",
numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
num = ''
while num == '':
try:
num = input("Please enter a number: ")
num = int(num)
except ValueError:
if num in numbers:
num = numbers.index(num)
num = int(num)
else:
print('Invalid input, please enter valid input')
if num == 0:
print("Thank you for using this program")
break
elif num < 0 or num > 10:
print("This is an invalid number, please enter a valid number.")
print()
continue
number=[“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”]
尽管如此:
num=“”
而num='':
尝试:
num=输入(“请输入一个数字:”)
num=int(num)
除值错误外:
如果数字为num:
num=数字。索引(num)
num=int(num)
其他:
打印('无效输入,请输入有效输入')
如果num==0:
打印(“感谢您使用此程序”)
打破
elif num<0或num>10:
打印(“这是一个无效的数字,请输入一个有效的数字。”)
打印()
持续
我认为这就是原因:
当您的输入不是有效输入时,如“asdf”
。它将跳出内部while循环。因为您的内部while循环条件是num=''
,而num
现在是“asdf”
您只需将num=”“
放在print('无效输入,请输入有效输入')
下即可,您的代码将正常工作,不再产生TypeError
完整代码如下:
numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
num = ''
while num == '':
try:
num = input("Please enter a number: ")
num = int(num)
except ValueError:
if num in numbers:
num = numbers.index(num)
num = int(num)
else:
print('Invalid input, please enter valid input')
num = ""
if num == 0:
print("Thank you for using this program")
break
elif num < 0 or num > 10:
print("This is an invalid number, please enter a valid number.")
print()
continue
number=[“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”]
尽管如此:
num=“”
而num='':
尝试:
num=输入(“请输入一个数字:”)
num=int(num)
除值错误外:
如果数字为num:
num=数字。索引(num)
num=int(num)
其他:
打印('无效输入,请输入有效输入')
num=“”
如果num==0:
打印(“感谢您使用此程序”)
打破
elif num<0或num>10:
打印(“这是一个无效的数字,请输入一个有效的数字。”)
打印()
持续
事实上,您的代码可以简化为一个循环:
numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
num = input("Please enter a number: ")
if num in numbers:
num = numbers.index(num)
else:
try:
num = int(num)
except ValueError:
print("Invalid input, please enter valid input")
continue
if num == 0:
print("Thank you for using this program")
break
elif num < 0 or num > 10:
print("This is an invalid number, please enter a valid number.")
number=[“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”]
尽管如此:
num=输入(“请输入一个数字:”)
如果数字为num:
num=数字。索引(num)
其他:
尝试:
num=int(num)
除值错误外:
打印(“无效输入,请输入有效输入”)
持续
如果num==0:
打印(“感谢您使用此程序”)
打破
elif num<0或num>10:
打印(“这是一个无效的数字,请输入一个有效的数字。”)
我认为这就是原因:
当您的输入不是有效输入时,如“asdf”
。它将跳出内部while循环。因为您的内部while循环条件是num=''
,而num
现在是“asdf”
您只需将num=”“
放在print('无效输入,请输入有效输入')
下即可,您的代码将正常工作,不再产生TypeError
完整代码如下:
numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
num = ''
while num == '':
try:
num = input("Please enter a number: ")
num = int(num)
except ValueError:
if num in numbers:
num = numbers.index(num)
num = int(num)
else:
print('Invalid input, please enter valid input')
num = ""
if num == 0:
print("Thank you for using this program")
break
elif num < 0 or num > 10:
print("This is an invalid number, please enter a valid number.")
print()
continue
number=[“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”]
尽管如此:
num=“”
而num='':
尝试:
num=输入(“请输入一个数字:”)
num=int(num)
除值错误外:
如果数字为num:
num=数字。索引(num)
num=int(num)
其他:
打印('无效输入,请输入有效输入')
num=“”
如果num==0:
打印(“感谢您使用此程序”)
打破
elif num<0或num>10:
打印(“这是一个无效的数字,请输入一个有效的数字。”)
打印()
持续
事实上,您的代码可以简化为一个循环:
numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
num = input("Please enter a number: ")
if num in numbers:
num = numbers.index(num)
else:
try:
num = int(num)
except ValueError:
print("Invalid input, please enter valid input")
continue
if num == 0:
print("Thank you for using this program")
break
elif num < 0 or num > 10:
print("This is an invalid number, please enter a valid number.")
number=[“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”]
尽管如此:
num=输入(“请输入一个数字:”)
如果数字为num:
num=数字。索引(num)
其他:
尝试:
num=int(num)
除值错误外:
打印(“无效输入,请输入有效输入”)
持续
如果num==0:
打印(“感谢您使用此程序”)
打破
elif num<0或num>10:
打印(“这是一个无效的数字,请输入一个有效的数字。”)
在动态语言中,发生在您身上的事情可能会发生很多,因为类型是在运行时解析的,而不是在设计时解析的,所以有时很难理解
首先,将user\u input
与您正在计算的数字(num
)分离为两个不同的参数(一个用于用户输入字符串,一个用于整数)-我知道这在Python上并不重要,但这是一个很好的做法
现在,您的num
值将仅在成功解析时分配。在循环结束时也不需要继续
代码片段
numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
user_input = ''
num = None # default invalid value
while num is None:
try:
user_input = input("Please enter a number: ")
num = int(user_input)
except ValueError:
if user_input in numbers:
num = numbers.index(user_input)
else:
print('Invalid input, please enter valid input')
print()
if num == 0:
print("Thank you for using this program")
break
elif num < 0 or num > 10:
print("This is an invalid number, please enter a valid number.")
print()
Please enter a number: 1
Please enter a number: one
Please enter a number: 11
This is an invalid number, please enter a valid number.
Please enter a number: -1
This is an invalid number, please enter a valid number.
Please enter a number: no numbder
Invalid input, please enter valid input
Please enter a number: 0
Thank you for using this program
Process finished with exit code 0
在动态语言中会发生很多事情,因为类型是在运行时而不是在设计时解析的,所以有时很难理解 首先,将
user\u input
与您正在计算的数字(num
)分离为两个不同的参数(一个用于用户输入字符串,一个用于整数)-我知道这在Python上并不重要,但这是一个很好的做法
现在,您的num
值将仅在成功解析时分配。在循环结束时也不需要继续
代码片段
numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]
while True:
user_input = ''
num = None # default invalid value
while num is None:
try:
user_input = input("Please enter a number: ")
num = int(user_input)
except ValueError:
if user_input in numbers:
num = numbers.index(user_input)
else:
print('Invalid input, please enter valid input')
print()
if num == 0:
print("Thank you for using this program")
break
elif num < 0 or num > 10:
print("This is an invalid number, please enter a valid number.")
print()
Please enter a number: 1
Please enter a number: one
Please enter a number: 11
This is an invalid number, please enter a valid number.
Please enter a number: -1
This is an invalid number, please enter a valid number.
Please enter a number: no numbder
Invalid input, please enter valid input
Please enter a number: 0
Thank you for using this program
Process finished with exit code 0
您只需执行
bool(TypeError)
,这是True
,而不考虑num
或您期望的任何条件。如果类型错误的目的是什么?如果要检查类型错误