Python 3:在if语句中跳过elif语句

时间:2017-01-30 23:55:56

标签: python if-statement

我试图用elif语句写一个if语句,然后在末尾写一个else语句,除了它完全跳过我的elif语句并且无论什么(甚至是if语句)都执行else语句。

    word = input('Enter an all lowercase word to be translated: ')

    if word[:1] == ('a', 'e', 'i', 'o', 'u'):
        print(word + 'way')
    elif word[:2] ==('a', 'e', 'i', 'o', 'u') :
        print(word[1:] + word[0] + 'ay')
    elif word[:3] == ('a', 'e', 'i', 'o', 'u'):
        print(word[2:] + word[0:] + 'ay')
    else:
        print(word)

如果我删除最后一个elif和else语句并将第一个elif语句转换为else语句,它将完全按照我的要求运行,但我需要elif语句。

    if word[1] == ('a', 'e', 'i', 'o', 'u'):
        print(word + 'way')
    else:
        word[2] ==('a', 'e', 'i', 'o', 'u')
        print(word[1:] + word[0] + 'ay')

3 个答案:

答案 0 :(得分:2)

这里有几个问题。

  1. 切片字符串将返回切片索引
  2. 之前的所有字符
  3. 将你与元音元组进行比较。
  4. 我认为您只想为if语句执行数组查找,而不是==使用in (...)

    编辑:代码示例

    word = input('Enter an all lowercase word to be translated: ')
    
    vowels = ('a', 'e', 'i', 'o', 'u')
    
    if word[1] in vowels:
      print(word + 'way')
    elif word[2] in vowels:
      print(word[1:] + word[0] + 'ay')
    elif word[3] in vowels:
      print(word[2:] + word[0:2] + 'ay')
    else:
      print(word) 
    

答案 1 :(得分:0)

您要求用户输入单词,但您将切片(带有一个或多个字母的字符串)与元组进行比较。这种情况永远不会成真。如果你想测试你的元组中是否包含一个字母,你可以使用:

if word[:1] in ('a', 'e', 'i', 'o', 'u'):
    print(word + 'way')

您的进一步比较也存在问题。您可以使用单词[:2]切换多个字母(例如,单词="测试",然后单词[:2]将是" te")。即使您使用"在"中,也不会在元组中包含多个字母。要切第二个字母,你可以写单词[1:2]。

答案 2 :(得分:0)

你现在拥有它的方式,你的条件的右边是一个元组值,它永远不会等于你的左手边,这是一个字符串。

for i,t in ipairs(people) do
  print('Record',i)
  print('Name',t.name)
  print('Address',t.address)
  print('Phone',t.phone)
  print()
end

如果你试图将单词翻译成猪拉丁语,那么只有两种情况:"单词"是否以元音结尾。

您可以尝试以下表达式:

>>> vowels = ('a','e','i','o','u')
>>> type(vowels)
<class 'tuple'>
>>> vowels = 'aeiou'
>>> type(vowels)
<class 'string'>
>>> type(word[:1])
<class 'string'>