代码之家  ›  专栏  ›  技术社区  ›  FallenRune

在Python中获取“以10为基数的int的无效文本”

  •  -2
  • FallenRune  · 技术社区  · 8 年前
    import random
    print("Welcome to RNG Guesser!\n")
    gld = random.randrange(1,10)
    counter = 0
    ccounter = 0
    
    while True:
        print("Number of tries: {}".format(counter))
        print("Number of correct guesses: {}".format(ccounter))
    
    num = input("Enter a number: ")
    
    if num is "exit":
        print("Number of tries: {}".format(counter))
        print("Number of correct guesses: {}".format(ccounter))
        break
    else:
    
        if int(num) is gld:
            print("Congratulations, your guessed number {} was right!".format(num))
            counter += 1
            ccounter += 1
    
        elif int(num) < gld:
            print("Pick a higher number!")
            counter += 1
    
        else:
            print("Pick a lower number!")
            counter += 1
    

    当我在exit中键入时,为什么会得到“int的无效文本”?我尝试将输入变量转换为int,我尝试使用else语句,我尝试创建两个变量,一个用于字符串,一个为int,但没有一个有效。

    3 回复  |  直到 8 年前
        1
  •  0
  •   Community miroxlav    7 年前

    我认为问题的根源在于: if num is "exit"

    正在评估为 False 当Python试图转换文字字符串时 exit 对于int,它将失败。

    尝试更换 is 具有 ==

    问题是 比较两个对象以查看它们是否相同,而需要的是查看两个对象的值是否相同。检查这个 stack overflow thread 了解更多信息。

        2
  •  0
  •   Dietrich Epp    8 年前

    假设问题中的不正确缩进只是复制粘贴错误…请尝试以下操作:

    x = input('enter x > ')
    print('x == "exit": {}'.format(x == "exit"))
    print('x is "exit": {}'.format(x is "exit"))
    

    以下是发生的情况:

    enter x > exit
    x == "exit": True
    x is "exit": False
    

    或者:

    x is "exit": True
    

    这个 is 运算符比较对象 身份 但您试图比较两个字符串的内容。

        3
  •  0
  •   kagami    8 年前

    请注意,不能将包含非数字字符的字符串指定给 int() .

    现在 num 应该是一个 str ,它可以是来自用户输入的任何内容。还要注意,当您要计算两个值时,请使用 == 而不是 is . 用来判断两个物体是否是同一物体。

    如果要使用If-else,请尝试以下操作:

    if num == "exit":
        print("Number of tries: {}".format(counter))
        print("Number of correct guesses: {}".format(ccounter))
        break
    elif not num or not all(char.isdigit() for char in num):
        print("You are not giving a number.")
    else:
        if int(num) == gld:
            print("Congratulations, your guessed number {} was right!".format(num))
            counter += 1
            ccounter += 1
    
        elif int(num) < gld:
            print("Pick a higher number!")
            counter += 1
    
        else:
            print("Pick a lower number!")
            counter += 1
    

    在这里 all(char.isdigit() for char in num) 正在检查中的每个字符 号码 看看它们是否都是数字。我们应该知道,用户的输入中可能会出现任何内容。只能将数字转换为 int .

    我们有另一个更清晰、更简单的解决方案。您可能需要阅读 try...except... 在Python中。

    try:
        if int(num) ...
    except ValueError:
        # num is not able to be converted to int
        print("You are not giving a number.")