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