[英]Why doesn`t my if statement work correctly?
嘿伙計們,我正在使用python中的if語句遇到一些問題。 我簡化了這個問題的代碼,因為問題的核心保持不變,這使得它更容易理解:所以我想創建兩個類,一個用於Apples,一個用於Bananas。 它們的屬性基本相同(名稱,顏色和價格)。
class Apple:
def __init__(self, name, color, price):
self.name = name
self.color = color
self.price = price
A1=Apple("Apple1", "red", 5)
A2=Apple("Apple2", "yellow", 3)
Apple_List=[A1, A2]
class Banana:
def __init__(self, name, color, price):
self.name = name
self.color = color
self.price= price
B1=Banana("Banana1","yellow", 5)
B2=Banana("Banana2", "brown", 1)
Banana_List=[B1,B2]
到現在為止還挺好。 我想為香蕉類定義一個方法,該方法應首先檢查香蕉的價格是否與其中一個蘋果對象相同。 如果是這樣的話,香蕉應該接管蘋果的名字(再次,它在這段代碼中沒有任何意義,但它與我正在研究的實際項目有關)。 第二,該方法應該檢查香蕉是否具有與蘋果對象之一相同的顏色,然后接管那個蘋果名稱(我使用了一個elif語句)。 這是方法的樣子:
def evaluate(self):
for a in Apple_List:
if self.price==a.price:
self.name=a.name
elif self.color==a.color:
self.name=a.name
else:
pass
print(self.name)
現在,每當我嘗試用Banana1運行該代碼時,我得到“Apple2”,即使Banana1的價格與Apple1相同,因此應命名為“Apple1”。 看起來elif語句在if語句之前執行,因為Banana1與Apple2具有相同的顏色並接管其名稱。 但是if語句不應該優先於elif語句嗎? 對不起,如果這個問題有一個明顯的解決方案,我對python編程很新。 在此先感謝您的幫助! 下面是完整的代碼:
class Apple:
def __init__(self, name, color, price):
self.name = name
self.color = color
self.price = price
A1=Apple("Apple1", "red", 5)
A2=Apple("Apple2", "yellow", 3)
Apple_List=[A1, A2]
class Banana:
def __init__(self, name, color, price):
self.name = name
self.color = color
self.price= price
def evaluate(self):
for a in Apple_List:
if self.price==a.price:
self.name=a.name
elif self.color==a.color:
self.name=a.name
else:
pass
print(self.name)
B1=Banana("Banana1","yellow", 5)
B2=Banana("Banana2", "brown", 1)
Banana_List=[B1,B2]
B1.evaluate()
B1
匹配兩個蘋果。 首先它匹配A1
,並將其名稱更改為'Apple1'
。 然后它匹配A2
並將其名稱更改為'Apple2'
。 如果要顯式查看此行為,請嘗試:
def evaluate(self):
for a in Apple_List:
if self.price==a.price:
self.name=a.name
elif self.color==a.color:
self.name=a.name
print(self.name)
如果您只想更改第一個匹配的名稱,則需要在需要循環結束時break
或return
:
def evaluate(self):
for a in Apple_List:
if self.price==a.price or self.color==a.color:
self.name=a.name
break
print(self.name)
“關於計算機的好消息是,他們按照你告訴他們要做的去做。壞消息是,他們做了你告訴他們做的事情。” - 泰德尼爾森
if語句不應優先於elif語句嗎?
是! 它確實! 您的意外行為的原因不是if
/ elif
條件的順序,而是您循環Apple_List
。
以下是evaluate
方法的流程:
self.name
更改為“ self.name
”。 self.name
為“Apple2”。 如您所見, if
語句確實具有優先級,但分配self.name
不會導致循環結束。 它將轉移到Apple2,其中self.name
在匹配顏色后重新分配。
如果要在匹配價格或顏色后停止循環,請使用Python的break
語句 。
編輯:
PS你可以刪除else: pass
條件的一部分。 此行為與省略else
子句相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.