【问题标题】:Strange issue not allowing negative answers in python maths gamepython数学游戏中不允许否定答案的奇怪问题
【发布时间】:2017-11-17 11:33:59
【问题描述】:

我的刽子手数学游戏存在问题,后端问题算法说答案是错误的,但实际上它是正确的。这似乎只发生在负数乘以正数的情况下。例如。 -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")

【问题讨论】:

    标签: python algorithm math operators


    【解决方案1】:

    您多次使用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 在 cmets 中指出的那样:

    您在原始代码中对is 的所有使用都应替换为 ==is 有一些用例,特别是与单例比较 像NoneTrueFalse,但它们比较少见。

    【讨论】:

    • 我总是想念简单的解决方案哈哈。感谢您抽出宝贵时间提供帮助:)
    • @Tweakforce_LG:需要明确的是,所有您在原始代码中对is 的使用都应替换为==is 有一些用例,特别是与 NoneTrueFalse 等单例相比,但它们相对较少。
    • @MarkDickinson 是正确的,我可能没有说得足够清楚。
    • @MarkDickinson 你介意我将你的评论添加到我的答案中吗?
    • @ThomasKühn:一点也不!
    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2019-07-23
    • 2018-09-03
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多