奇怪的问题不允许在python数学游戏中给出否定答案



我的刽子手数学游戏有一个问题,后端问题算法说答案是错误的,而实际上是正确的。这似乎只发生在负数乘以正数时。例如 -4*5 = -20。我从开始创建程序时就采用了我的基本算法,看看它当时是否仍然存在。问题就在那里。如何解决此问题?以下是删除了我所有 GUI 代码的算法示例代码:

from tkinter import *
from tkinter import ttk
import random
#says negatives are incorrect when multiplying a negitive by  a positive
OP = ['*', '+', '-', '/']
count = 0

range1 = input("Range 1:" )
range1int = int(range1)

range2 = input("Range 2 (must be positive):" )
range2int = int(range2)
while count is 0:
    operator = random.choice(OP)
    if operator is '/':
        num1 = random.randint(1,range2int)
        num2 = random.randint(1,range2int)
    else:
        num1 = random.randint(range1int,range2int)
        num2 = random.randint(range1int,range2int)
    is_looping = True
    if operator is '/':
        invalid = num1%num2
        while invalid == 0:
            num1 = random.randint(1,range2int)
            num2 = random.randint(1,range2int)
            invalid = num1%num2
            if invalid is 0:
                is_looping = False
                break
    if not is_looping:
        break
    else:
        invalid = 0
    if invalid is 0:

        print("What is ", num1, operator, num2)
        question = eval( str(num1) + operator + str(num2))
        QuestInt = int(question)
        AnsInput = input("Enter Answer (Press Enter When Done):")
        IntAns = int(AnsInput)


        if IntAns is QuestInt:
            print("Correct!")
        else:
            print("Incorrect")

您多次使用 is 而不是==进行比较。特别是if IntAns is QuestInt:线正在折断你的脖子。将其替换为 if IntAns == QuestInt:,您的代码将按预期工作:

What is  -3 * 10
Enter Answer (Press Enter When Done):-30
Correct!

通常,is 关键字检查两个对象是否相同,而==运算符检查它们是否相等。这是一个非常重要的区别。我注意到您的代码也会在其他地方意外停止,因为您在那里使用了is。如果出现问题,为什么你的代码以前使用正整数,看看这个答案。

编辑

正如马克·迪金森(Mark Dickinson(在评论中指出的那样:

原始代码中对is的所有使用都应替换为 == .有is的用例,特别是与单例相比 像NoneTrueFalse,但它们相对罕见。

最新更新