在Python IDLE上编写了下面的代码片段,并在下面得到了正确的答案:
>>> cars = ["audi", "bmw", "daimler", "toyota", "vw"]
>>> for car in cars:
if "a" in car:
print(car.title())
else:
print(car.upper())
结果:
Audi
BMW
Daimler
Toyota
VW
然后我更改了代码,以便我可以打印没有元音 UPPER 的汽车和其余的标题,如下所示,但我打印了所有汽车标题:
>>> cars = ["audi", "bmw", "daimler", "toyota", "vw"]
>>> for car in cars:
if "a" or "e" in car:
print(car.title())
else:
print(car.upper())
结果:
Audi
Bmw
Daimler
Toyota
Vw
有人可以帮忙说出最后一个代码块有什么问题吗,目标是打印所有没有元音完全大写的汽车,其余的作为标题。
谢谢。
if "a" or "e" in car
将始终True
,因为a
在逻辑上是True
的。 请尝试:
if "a" in car or "e" in car:
print(car.title())
else:
print(car.upper())
或者,如果您想检查更多字符并希望避免多个or
,您可以使用any
:
# any will return True if `car` contains one of the chars in the provided list.
if any(map(lambda c: c in car,["a","e"])):
print(car.title())
else:
print(car.upper())
TBH 你不是很清楚或语句没有问题,但这是传递 or in if 语句的理想方式,我已经为你制作了代码。
cars = ["audi", "bmw", "daimler", "toyota", "vw"]
for car in cars:
if "a" in car or 'e' in car or 'i' in car or 'o' in car or 'u' in car:
print(car.title())
else:
print(car.upper())
输出为:
Audi
BMW
Daimler
Toyota
VW
Process finished with exit code 0
希望对您有所帮助
你的表达:
"a" or "e" in car
相当于:
"a" or ("e" in car)
这总是"a"
,一个真实的值。这就是为什么它对所有事情都执行title()
。
相反,您应该使用:
if "a" in car or "e" in car
或者(半开玩笑(,因为每个问题都可以通过向其抛出更多正则表达式来解决:
if re.search("[ae]", car) is not None: # needs import re