伙计们,我在研究if语句中的if语句时遇到了一些麻烦。我简化了该问题的代码,因为问题的核心保持不变,并且更易于理解: 所以可以说我创建了两个类,一个用于苹果,一个用于香蕉。 它们的属性基本相同(名称,颜色和价格)。
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运行该代码时,即使Banana1与Apple1的价格相同,因此也将得到“ Apple2”,因此应将其命名为“ 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()
答案 0 :(得分:0)
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)
答案 1 :(得分:0)
“关于计算机的好消息是他们按照您告诉他们的方式去做。坏消息是计算机按照您告诉他们的方式去做。” -泰德·尼尔森
if语句是否应该优先于elif语句?
是的!确实如此!发生意外行为的原因不是if
/ elif
条件的顺序,而是您在Apple_List
上循环的事实。
您的evaluate
方法的流程如下:
self.name
更改为“ Apple1”。self.name
更改为“ Apple2”。如您所见,if
语句确实具有优先级,但是分配self.name
不会导致循环结束。它将继续到Apple2,在匹配颜色后重新分配self.name
。
如果要在匹配价格或颜色后停止循环,请使用Python的break
statement。
编辑:
P.S。您可以删除条件语句的else: pass
部分。此行为与省略else
子句相同。