2017-06-15 21 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是正確的,我可能沒有說清楚。 –