2017-06-15 37 views
0

我的hang子手数学游戏有一个问题,后端问题算法说实际上是正确的答案是错误的。这似乎只在负数乘以正数时才会发生。例如。 -4 * 5 = -20。 从我开始创建程序时,我已经采取了我的基本算法,以确定它是否仍然存在。问题就在那里。 我该如何解决这个问题? 这里是我所有的GUI代码删除算法的示例代码:奇怪的问题,不允许在Python数学游戏中的否定答案

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") 

回答

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,TrueFalse相比较,但它们相对较少。

+0

我总是想念简单的解决方案哈哈。感谢您抽出宝贵时间来帮助:) –

+1

@Tweakforce_LG:清楚的是,在您的原始代码中使用'is'应该用'=='替换。 “is”有用例,尤其是与“None”,“True”和“False”等单例相比较,但它们相对较少。 –

+0

@MarkDickinson是正确的,我可能没有说清楚。 –