我的刽子手数学游戏存在问题,后端问题算法说实际上正确答案是错误的。这似乎只发生在负数乘以正数的情况下。例如。 -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")
答案 0 :(得分:3)
您使用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在评论中指出的那样:
您原始代码中对
is
的所有使用都应替换为==
。有is
的用例,特别是与单身人士相比 例如None
,True
和False
,但它们相对较少。