【问题标题】:count the number of upper case and lower case characters in word计算word中大写和小写字符的数量
【发布时间】:2017-03-18 21:48:53
【问题描述】:
def Charater(): 
    UpperCount = 0 
    LowerCount = 0
    word = input('Enter a word: ')
    for letter in word:
        if letter == letter.upper 
            UpperCount = UpperCount + 1
            return UpperCount
        else:
            LowerCount = LowerCount + 1
            return LowerCount

print(Charater())

如果这看起来很糟糕,请不要评判我。但是我是一个初学者,我试图让代码计算用户输入的单词中有多少个大写和小写字符。每次我这样做它都会返回 1。(它可能是我的 if 语句)。谁能指出问题并告诉我如何解决。

【问题讨论】:

  • 您在循环内returning,在循环内的两个条件分支中,因此您最多只能进行一次迭代。你可能想在你的循环之外return

标签: python string list python-3.x


【解决方案1】:

您可以将mapstr.isupperstr.islower 一起使用,分别计算大写和小写字符的数量:

>>> my_word = "HelLo WorLd"
>>> lower_count = sum(map(str.islower, my_word))
>>> lower_count
6

>>> upper_count = sum(map(str.isupper, my_word))
>>> upper_count
4

【讨论】:

  • 就个人而言,如果我只想在总和布尔条件为True 时进行计数,我更喜欢使用sum,例如sum(map(str.islower, word))。它还具有兼容 python 2-3 的优点。
  • @juanpa.arrivillaga 是有道理的。另外,当我看到 OP 正在寻找 Python3 解决方案时,更新了答案
【解决方案2】:

使用collections.Counter、生成器理解和嵌套三元数计算一行:

import collections

my_word = "HelLo WorLd"
c = collections.Counter("upper" if x.isupper() else "lower" if x.islower() else "" for x in my_word)
print(c)

结果:

Counter({'lower': 6, 'upper': 4, '': 1})

【讨论】:

    【解决方案3】:

    作为一个简短的函数

    def count_up_and_low(word):
        u = [x for x in word if x.isupper()]
        l = [x for x in word if x.islower()]
    
        return len(u), len(v)
    

    【讨论】:

    • 你应该只使用'some_string'.isupper()
    • @juanpa.arrivillaga 谢谢修复
    【解决方案4】:

    这应该可以工作

     def count_by_case(string):
         upper = sum(letter.isupper() for letter in string)
         lower = sum(letter.islower() for letter in string)
         return lower, upper
    
     string = "MyString"
     lower, upper = count_by_case(string)
     print("{!r} contains {} upper and {} lower case letters".format(string, upper, lower))
    

    【讨论】:

      【解决方案5】:
      def up_low(str):
          upper_count=0
          lower_count=0
          for x in str:
              if x.isupper():
                  upper_count+=1
              else:
                  lower_count+=1
          print(f'number of upper case letter {upper_count}')
          print(f'number of lower case letter {lower_count}')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-17
        • 1970-01-01
        • 1970-01-01
        • 2020-01-04
        • 2014-10-03
        • 1970-01-01
        • 1970-01-01
        • 2016-03-11
        相关资源
        最近更新 更多