0

法国国家名称以字母 E 结尾时为阴性,否则为阳性。有 6 个例外。(伯利兹、柬埔寨、墨西哥、莫桑比克、扎伊尔、津巴布韦)我要编写一个程序,该程序接受输入并添加 le 或 la infront,具体取决于它是男性还是女性。

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

还有一个条件。如果输入是这两个复数国家之一,则打印 les infront.(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。例如:输入加拿大;输出加拿大。

为什么不测试其他条件?

4

3 回答 3

2

这是因为:

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

不一样

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

第一个评估 (is word == "A") logical_or ("B")

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

>>> X = "asdf"
>>> if(X):
...     print("hurray")
... 
hurray
>>> 
于 2013-10-03T22:37:52.250 回答
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)
于 2013-10-03T22:43:24.013 回答
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
于 2013-10-03T22:36:36.933 回答