【问题标题】:Issues with a if/else loop in PythonPython 中的 if/else 循环问题
【发布时间】:2012-11-24 14:24:22
【问题描述】:

我正在尝试用 Python 制作这个 Pig Latin 翻译器,它运行良好,直到我尝试缩小它的大小。

有人可以看看这段代码并告诉我为什么,当我输入一个开头没有元音的单词时,它仍然会在这个 if 语句中打印“元音”代码吗?

代码:

pyg = 'ay'

original = raw_input('Enter a word: ')
low_original = original.lower()

if len(low_original) > 0 and low_original.isalpha():
        print low_original
        if low_original[0] == 'a' or 'e' or 'i' or 'o' or 'u':
                print "vowel"
                pyg_vowel = low_original + pyg
                print pyg_vowel
        else:
                print "consonant"
                pyg_cons = low_original[1: ] + low_original[0] + pyg
                print pyg_cons
else:
        print 'empty'

【问题讨论】:

  • 您可能想使用if low_original[0] in ['a','e','i','o','u']:。否则,即使第一个比较是 False'e' 也被评估为 True,并且因为您有 orif 子句始终是 True

标签: python if-statement


【解决方案1】:

您需要分别检查所有元音。

目前,您的 if 条件评估为:-

if (low_original[0] == 'a') or 'e' or 'i' or 'o' or 'u':

or 返回其条件中的第一个真值,此处为Truee,具体取决于您的第一个条件是否为真。现在,由于'e' 被评估为True,所以两个值都是true,因此您的条件将始终为true

你应该这样做:-

if low_original[0] in 'aeiou':

或:-

if low_original[0] in ('a', 'e', 'i', 'o', 'u'):

【讨论】:

    【解决方案2】:

    你应该替换字符串:

    if low_original[0] == 'a' or 'e' or 'i' or 'o' or 'u':
    

    与:

    if low_original[0] in ('a', 'e', 'i', 'o', 'u'):
    

    【讨论】:

      【解决方案3】:

      if 总是返回 True!

      pyg = 'ay'
      
      original = raw_input('Enter a word: ')
      low_original = original.lower()
      
      if len(low_original) > 0 and low_original.isalpha():
          print low_original
          if low_original[0] in ['a' , 'e' , 'i' , 'o' , 'u']:
                  print "vowel"
                  pyg_vowel = low_original + pyg
                  print pyg_vowel
          else:
                  print "consonant"
                  pyg_cons = low_original[1: ] + low_original[0] + pyg
                  print pyg_cons
      else:
          print 'empty'
      

      【讨论】:

        【解决方案4】:

        替换 if 语句
        if low_original[0] in ['a', 'e', 'i', 'o', 'u']
        

        【讨论】:

          【解决方案5】:

          if 中的条件将始终评估为 True

           if low_original[0] == 'a' or 'e' or 'i' or 'o' or 'u':
                      print "vowel"
                      pyg_vowel = low_original + pyg
                      print pyg_vowel
          

          if (low_original[0] == 'a') or 'e' or 'i' or 'o' or 'u'一样

          你应该使用类似if low_original[0] in 'aeiou'的东西

          【讨论】:

            【解决方案6】:

            问题在于 'if low_original[0] == 'a' or 'e' or 'i' or 'o' or 'u':' - first is not pythonic second is not give you not what you expect .

            尝试将您的代码更新为:

            pyg = 'ay'
            
            original = raw_input('Enter a word: ')
            low_original = original.lower()
            
            if len(low_original) > 0 and low_original.isalpha():
                print low_original
                if low_original[0] in ('a', 'e', 'i', 'o', 'u'):
                        print "vowel"
                        pyg_vowel = low_original + pyg
                        print pyg_vowel
                else:
                        print "consonant"
                        pyg_cons = low_original[1: ] + low_original[0] + pyg
                        print pyg_cons
            else:
                print 'empty'
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-05-16
              • 2019-03-18
              • 1970-01-01
              • 1970-01-01
              • 2015-10-28
              • 2020-03-24
              相关资源
              最近更新 更多