Python 3.10 - 检测变量类型的问题(初学者)
Python 3.10 - Issue with detecting variable type (begginer)
大家下午好
首先,我是编码方面的初学者,Python 本身。老实说,我什至不确定问这样 'newbie' 问题的地方是否合适。
但是切中要点。
在在线课程中,我被要求编写一个简单的程序来猜数字。
我这样做了,代码工作正常:https://pastebin.com/XwZ2qcab
尽管我想改进代码以允许用户键入非 int 变量而不会崩溃。
我在代码的升级版本中使用了'if type(userNumber) != int:':https://pastebin.com/JQarjjSw 但它不起作用。
我遇到的问题(我认为)在这里:
for i in range(1, 7):
userNumber = input('Take a guess')
if type(userNumber) != int: #This line is my main issue, if I delete it code works like a charm.
break
elif int(userNumber) > int(number):
print('No! Your number is too high. Try again')
elif int(userNumber) < int(number):
print('No! Your number is too low. Try again')
else:
break
我不知道为什么行 if type(userNumber) != int: break
没有被执行并且 pyCharm 直接转到:elif int(userNumber) > int(number):
并崩溃。
有趣的是 pythontutor.com 代码按预期工作。检查 userNumber,如果它不是 int,则中断 IF 循环。
希望这在某种程度上是清楚的。
您从 input
函数中获取 userNumber
变量。它总是 returns 一个字符串。所以你有几个选项可以用来检查用户是否给出了数字。
第一个选择是使用str.isdigit()
方法
userNumber = input('Take a guess')
if not userNunber.isdigit():
# user entered something else than digits
break
另一种选择可能是使用 try-except
方法:
userNumber = input('Take a guess')
try:
# try to convert user input to integer
userNumber = int(userNumber)
except ValueError:
# We failed so user entered invalid value
break
在这种情况下,您需要使用 try… except…
语句:
try:
int(“12ab”)
except ValueError:
print(“Not a number”)
您的完整代码为:
for i in range(1, 7):
userNumber = input('Take a guess')
try:
num = int(userNumber)
except ValueError:
print(“Not a number”)
break
if num > int(number):
print('No! Your number is too high. Try again')
elif num < int(number):
print('No! Your number is too low. Try again')
else:
break
您可以阅读更多相关信息 here。
扩展 ex4 的答案,你应该使用 .isdigit()
来检查输入是否为数字,但是如果这是一个游戏,我假设你不只是希望游戏结束使用 break
当玩家输入了错误的输入而您希望他们再次猜测时。
试试下面的片段。它接受输入,直到玩家输入一个不是数字的输入,它让玩家输入另一个输入,直到它是一个数字。
for i in range(1, 7):
userNumber = input('Take a guess')
while not userNumber.isdigit():
userNumber = input('What you have entered is not a number, please guess again')
if int(userNumber) > int(number):
print('No! Your number is too high. Try again')
elif int(userNumber) < int(number):
print('No! Your number is too low. Try again')
else:
break
大家下午好
首先,我是编码方面的初学者,Python 本身。老实说,我什至不确定问这样 'newbie' 问题的地方是否合适。
但是切中要点。
在在线课程中,我被要求编写一个简单的程序来猜数字。 我这样做了,代码工作正常:https://pastebin.com/XwZ2qcab
尽管我想改进代码以允许用户键入非 int 变量而不会崩溃。 我在代码的升级版本中使用了'if type(userNumber) != int:':https://pastebin.com/JQarjjSw 但它不起作用。
我遇到的问题(我认为)在这里:
for i in range(1, 7):
userNumber = input('Take a guess')
if type(userNumber) != int: #This line is my main issue, if I delete it code works like a charm.
break
elif int(userNumber) > int(number):
print('No! Your number is too high. Try again')
elif int(userNumber) < int(number):
print('No! Your number is too low. Try again')
else:
break
我不知道为什么行 if type(userNumber) != int: break
没有被执行并且 pyCharm 直接转到:elif int(userNumber) > int(number):
并崩溃。
有趣的是 pythontutor.com 代码按预期工作。检查 userNumber,如果它不是 int,则中断 IF 循环。
希望这在某种程度上是清楚的。
您从 input
函数中获取 userNumber
变量。它总是 returns 一个字符串。所以你有几个选项可以用来检查用户是否给出了数字。
第一个选择是使用str.isdigit()
方法
userNumber = input('Take a guess')
if not userNunber.isdigit():
# user entered something else than digits
break
另一种选择可能是使用 try-except
方法:
userNumber = input('Take a guess')
try:
# try to convert user input to integer
userNumber = int(userNumber)
except ValueError:
# We failed so user entered invalid value
break
在这种情况下,您需要使用 try… except…
语句:
try:
int(“12ab”)
except ValueError:
print(“Not a number”)
您的完整代码为:
for i in range(1, 7):
userNumber = input('Take a guess')
try:
num = int(userNumber)
except ValueError:
print(“Not a number”)
break
if num > int(number):
print('No! Your number is too high. Try again')
elif num < int(number):
print('No! Your number is too low. Try again')
else:
break
您可以阅读更多相关信息 here。
扩展 ex4 的答案,你应该使用 .isdigit()
来检查输入是否为数字,但是如果这是一个游戏,我假设你不只是希望游戏结束使用 break
当玩家输入了错误的输入而您希望他们再次猜测时。
试试下面的片段。它接受输入,直到玩家输入一个不是数字的输入,它让玩家输入另一个输入,直到它是一个数字。
for i in range(1, 7):
userNumber = input('Take a guess')
while not userNumber.isdigit():
userNumber = input('What you have entered is not a number, please guess again')
if int(userNumber) > int(number):
print('No! Your number is too high. Try again')
elif int(userNumber) < int(number):
print('No! Your number is too low. Try again')
else:
break