嘿,伙计们,我在用python编写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]
到目前为止还不错。我想为banana类定义一个方法,首先检查banana的价格是否与apple对象的价格相同。如果是这样的话,香蕉应该取代苹果的名字(同样,在这段代码中它没有任何意义,但是它与我正在工作的实际项目相关)。第二,该方法应该检查香蕉是否与一个苹果对象具有相同的颜色,然后接管该苹果名称(我对该名称使用了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()
“关于计算机的好消息是,它们按照你告诉它们的去做。坏消息是他们按照你的吩咐去做。” -泰德·纳尔逊
是的!是的!你意外行为的原因不是
if
/elif
条件的顺序,而是你在Apple_List
上循环的事实。你知道吗以下是
evaluate
方法的流程:self.name
更改为“Apple1”。你知道吗self.name
更改为“Apple2”。你知道吗如您所见,
if
语句确实具有优先级,但是分配self.name
不会导致循环结束。它将转到Apple2,在那里self.name
在匹配颜色之后被重新分配。你知道吗如果要在匹配价格或颜色后停止循环,请使用Python的^{} statement 。你知道吗
编辑:
另外,你可以删除条件的
else: pass
部分。此行为与省略else
子句相同。你知道吗B1
匹配两个苹果。首先它匹配A1
,并将其名称更改为'Apple1'
。然后它匹配A2
,并将其名称更改为'Apple2'
。如果要显式查看此行为,请尝试:如果只想更改第一个匹配项的名称,则需要在循环结束时
break
或return
:相关问题 更多 >
编程相关推荐