在python数学gam中不允许否定答案的奇怪问题

2024-04-23 11:07:08 发布

您现在位置: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")

Tags: import算法inputifisrandomoperatorelse
1条回答
网友
1楼 · 发布于 2024-04-23 11:07:08

您多次使用is而不是==进行比较。尤其是那一行if IntAns is QuestInt:打断了你的脖子。用if IntAns == QuestInt:替换它,代码将按预期工作:

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

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

编辑:

正如Mark Dickinson在评论中指出的:

All your uses of is in your original code should be replaced with ==. There are use-cases for is, notably comparing with singletons like None, True and False, but they're relatively rare.

相关问题 更多 >