如何缩短此代码或如何更正此代码

时间:2017-11-12 10:18:51

标签: python python-2.7

你可以通过缩短这段代码来帮助我吗?我希望这是可能的,因为我觉得它太多余了,但我不知道如何避免重复。我尝试创建两个偶数字母和奇数字母的列表(所以基本上通过创建一个新代码),但后来我不知道如何继续。这是代码: 基本上这是一个函数,必须检查输入字符串是否有交替的元音和辅音,如单词' laser'。如果字符串是交替的元音和辅音,则必须返回true,在其他情况下为false (例如:'损失')。 我试图创建的其他代码就是这个: 第二个代码的问题在于它返回了我的“失败”的真实情况。并且'配对' (但它们应该是假的)和激光'和' p'是的(应该是) 并且'玩'假(应该是)。如何在第二个代码中更正我的错误?

1 个答案:

答案 0 :(得分:0)

在迭代每个字母时,只需检查两件事:

  1. 当前字母 IS 是元音,下一个字母不是
  2. 当前字母是元音,下一个字母
  3. 你可以这样做:

    def is_alternating(s):
        s = s.lower()
    
        vowels = 'aeiou'
    
        for index, letter in enumerate(s[1:]):
            if letter in vowels and (s[index] not in vowels) or letter not in vowels and (s[index] in vowels):
                pass
            else:
                return False
        return True
    
    print(is_alternating("Laser"))
    print(is_alternating("Loss"))
    print(is_alternating("Pair"))
    print(is_alternating("Racecar"))
    
    # Prints:
    # True
    # False
    # False
    # True
    

    这也可以通过将每个字母放在偶数和奇数索引并使用all()

    来实现
    def is_alternating(s):
        s = s.lower()
        vowels = "aeiou"
        even = [s[i] for i in range(0, len(s), 2)]
        odd = [s[i] for i in range(1, len(s), 2)]
        return (
        (all(letter in vowels for letter in even) and all(letter not in vowels for letter in odd)) or 
        (all(letter in vowels for letter in odd) and all(letter not in vowels for letter in even))
        )
    
    
    print(is_alternating("Laser"))
    print(is_alternating("Loss"))
    print(is_alternating("Pair"))
    print(is_alternating("Racecar"))
    

    第二种解决方案基本上是这样说:

      

    evens中的每个字母都带有偶数索引

         

    odds中每个字母都带有奇数索引

         

    all()语句检查以下内容:

         

    1。)每个偶数索引字母 IS 在元音中,每个奇数索引号

         

    OR

         

    2。)每个奇数索引字母 IS 在元音中,每个偶数索引字母