【问题标题】:Count vowels and print duplicate vowels计算元音并打印重复的元音
【发布时间】:2019-06-17 03:58:20
【问题描述】:

我有一个代码可以计算用户输入的元音数量并打印出来。此外,我还想做的是打印出重复的元音。

代码的第一部分运行良好,它确实打印出用户输入的任何元音的数量,但第二部分似乎不起作用。我附上我想出的代码。

user_name = input('Please enter your name: ')

count = 0

for vowels in user_name:

    if vowels.lower() == "a" or vowels.lower() == "e" or vowels.lower() == "i" or vowels.lower() == "o" \
            or vowels.lower() == "u":

        count = count + 1

print(f'Number of vowels are {count}')

dupes = ""

for rep_vows in user_name:

    if rep_vows not in dupes:
       # dupes.append(rep_vows)
        print(dupes)

【问题讨论】:

  • 第二部分有什么问题。请提供更多您看到的上下文/错误

标签: python python-3.x


【解决方案1】:

如果你想得到重复的,你应该检查一个新的元音是否已经添加到找到的元音列表(或字符串)中。

一个简单的修改就能得到这个

duples = ''
for rep_vows in user_name:
   if rep_vows in duples:
     print(rep_vows)
   if rep_vows.lower() in "aeiou": 
     duples += rep_vows

既然你知道如何使用in,你可以把第一部分改成:

for vowels in user_name:
    if vowels.lower() in "aeiou":
        count = count + 1

【讨论】:

    【解决方案2】:

    为了计算 Python 有 Counter dict 这里有一些例子:

    >>> from collections import Counter
    >>> import re 
    
    >>> # Count vowels
    >>> Counter(re.findall('[aieouAEIOU]', 'Daniel Hilst'))
    Counter({'i': 2, 'a': 1, 'e': 1})
    >>> # Summing up
    >>> sum(Counter(re.findall('[aieouAEIOU]', 'Daniel Hilst')).values())
    4
    
    >>> # Count words
    >>> Counter(re.findall(r'\w+', 'some text'))
    Counter({'some': 1, 'text': 1})
    >>>
    

    您可以在集合包文档中找到文档:https://docs.python.org/3.7/library/collections.html

    【讨论】:

      【解决方案3】:

      我认为你应该在这里尝试使用原生 Python 计数器。它只是一本美化的字典,但它确实减少了实现目标所需编写的代码量。

      
      from collections import Counter #import Counter from Python's collections standard library
      
      user_name = input('Please enter your name: ')
      
      vowels = ['a','e','i','o','u'] # create a list of your vowels
      
      counter = Counter() # initialize counter
      
      for letter in user_name:
          if letter in vowels:
              print(letter)
              counter[letter]+=1
      
      print(counter)
      
      

      【讨论】:

        【解决方案4】:

        你的解决方案没问题,但是 dupes 应该是一个列表(重复元音),你可以使用另一个列表来显示已经看到的元音;所以当你看到一个元音时,你会检查那个元音是否已经在“seen”中。如果元音是 in seen,则将其附加到 dupes,否则,将其附加到 seen,所以当那个元音重复时,它将被附加到 dupes。

        最后,打印受骗者列表。

        user_name = input('Please enter your name: ')
        
        count = 0
        
        for vowels in user_name:
        
            if vowels.lower() == "a" or vowels.lower() == "e" or vowels.lower() == "i" or vowels.lower() == "o" or vowels.lower() == "u":
        
                count = count + 1
        
        print(f'Number of vowels are {count}')
        
        seen = []
        dupes = []
        
        for rep_vows in user_name:
        
            if rep_vows not in seen:
                seen.append(rep_vows)
            else:
                dupes.append(rep_vows)
        
        print(dupes)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-06
          • 1970-01-01
          • 1970-01-01
          • 2021-08-07
          相关资源
          最近更新 更多