一个代码下的多个if语句,具有多个条件

时间:2013-10-03 22:34:50

标签: python

法语国家的名字是女性化的,当它们以字母E结尾,否则是男性。有6个例外。(伯利兹,cambodge,mexique,莫桑比克,扎伊尔,津巴布韦)我要编写一个程序,接受输入并添加le,或取决于它是男性化还是女性化。

此外,如果国家名称以元音开头,则需要打印l'而不是le或la。

还有一个条件。如果输入是这两个复数国家之一,那就是打印前面的那些。(etats-unis,pays-bas)

这是我目前的代码

vowels=("aeiouAEIOU")
word=input("Enter a french country  :")

if word==("belize")or("cambodge")or("mexique")or("mozambique")or("zaire")or("zimbabe"):
    print("le",word)
elif word==("etats-unis")or("pays-bays"):
    print("les",word)
elif word.endswith("e"):
    print("le",word)
else:
    print("la",word)

if word.startswith(vowels):
    print("l'",word)

我遇到的问题是无论我使用什么输入它总是打印le infront。 例如:输入加拿大;输出加拿大。

为什么不测试其他条件?

3 个答案:

答案 0 :(得分:2)

这是因为:

if word == "A" or "B":

不同
if word == "A" or word == "B":

第一个评估(是单词==“A”)logical_or(“B”)

所以第一个版本总是评估为true。这是一个例子:

>>> X = "asdf"
>>> if(X):
...     print("hurray")
... 
hurray
>>> 

答案 1 :(得分:1)

试一试

exceptions = set("belize cambodge mexique mozambique zaire zimbabwe".split())
vowels = set('aeiou')
plurals = set("etats-unis pays-bas".split())

word, sentinel = "", "quit"
while word != sentinel:
  word = input("Enter the name of a country: ")
  if word == sentinel:
    continue
  male = word in exceptions or word[-1].lower() not in vowels
  plurality = word in plurals
  apo = word[0].lower() in vowels

  if apo:
    print("l'%s" %word)
  elif plurality:
    print("les", word)
  else:
    print("le" if male else "la", word)

答案 2 :(得分:0)

使用:

if word in ["belize", "cambodge", "mexique", "mozambique", "zaire", "zimbabe"]:
    print("le",word)

这里的问题是word==("belize")or("cambodge")or("mexique")没有按照你的想法行事。关于这个问题有很多解释,但为了让它发挥作用,你要么需要做我上面的事情或类似的东西:

if word=="belize" or word=="cambodge" or word=="mexique":  # etc