2014-01-06 211 views
-1

由於某種原因,即使條件不符合,我的程序也不會進入「其他」部分。這個if語句有什麼問題?

if score_str >= 3: 
    print("Pass") 

    self.prefect = tk.Label(self, width=80, height=4, text = "You have passed, well done! You can now become a prefect.") 
    self.prefect.pack(side="top", fill="both", expand=True) 

    self.name = tk.Label(self, width=80, height=4, text = student_name) 
    self.name.pack(side="top", fill="both", expand=True) 

    self.surname = tk.Label(self, width=80, height=4, text = student_surname) 
    self.surname.pack(side="top", fill="both", expand=True) 

    self.tutor = tk.Label(self, width=80, height=4, text = student_tutor_group) 
    self.tutor.pack(side="top", fill="both", expand=True) 
else: 
    print("Fail") 

    self.fail = tk.Label(self, width=80, height=4, text = "Unfortunately you have not scored highly enough to be considered for a prefect position.") 
    self.fail.pack(side="top", fill="both", expand=True) 
+4

你必須給我們更多的工作在這裏。爲我們演示它。並將其剝離爲最簡單的示例(儘可能多地刪除其他行)。通常這會在你需要在這裏發佈之前解決你的問題。 – Crisfole

+1

你可以通過一些基本的調試來解決這個問題。第一步:'4> = 3' - >'True'(確保你不會精神失常)。第二步:'type(score_str)'。完成:p。我只是說,不要急於求成。 – keyser

+0

@ᴋᴇʏsᴇʀ:假設您對Python類型有足夠的瞭解;在其他一些語言中,包含數字的字符串會被自動強制轉換,並且會以數字形式進行比較。 Python 2犯了一個錯誤,允許在字符串和數字之間進行比較,以便可以對包含混合類型的列表進行排序。這導致了這樣的混亂。當你犯這個錯誤時,至少Python 3現在會引發異常。 –

回答

9

從名字我推斷score_str是一個字符串;如果是這樣,那麼你的比較總是失敗,因爲在Python 2,數字總是排序之前的字符串:

>>> '1' > 1 
True 

比較時,這樣你至少做數值比較讓你的分數整數:

if int(score_str) >= 3: 

在Python 3,比較字符串和整數(或任何兩種類型的不明確定義的比較)會導致異常:

>>> '1' > 1 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unorderable types: str() > int() 

這將幫助喲你避免了這個問題。