【问题标题】:Function that prints without capital letters in Python在 Python 中打印不带大写字母的函数
【发布时间】:2020-09-11 11:53:34
【问题描述】:

我正在尝试编写一个简单的函数,它接受一个字符串并返回一个没有原始字符串中的大写字母的字符串。我看过很多其他的帖子,里面有类似我的问题,但他们中的大多数都是在技能水平上解决这个问题的,但由于缺乏知识,我还无法理解。

这是我想出来的。

def no_capitals(string):
    result = []
    for char in string:
        if not char.isupper(): result.append(char)
    return (result)

print(no_capitals("X007XK"))
print(no_capitals("Xmen R cute"))

为此所需的输出将是:

007
men cute

不过,这个函数毫无疑问会以列表形式返回。

['0', '0', '7'] 
['m', 'e', 'n', 'c', 'u', 't, 'e']

所以我猜我将不得不以不同的方式解决这个问题。我对 Python 的了解非常有限,所以我没有很多“工具”可以使用。谁能指出我正确的方向?

【问题讨论】:

  • return ''.join(result)
  • @balderman 这不是评论,而是答案。
  • @balderman 成功了!您的评论应该是一个答案。我用了 3 个小时在谷歌上搜索了一个你用 3 个字给我的解决方案。关闭 23 个标签。谢谢!
  • 扩展他的方法,整个功能可以在一行中完成:return ''.join(char for char in string if not char.isupper())

标签: python function capitalization


【解决方案1】:

你可以使用''.join():

def no_capitals(string):
    return ''.join(char for char in string if not char.isupper())


print(no_capitals("X007XK"))
print(no_capitals("Xmen R cute"))

输出:

007
men  cute

【讨论】:

  • 您不需要[],我认为这会更高效。
【解决方案2】:

最简单的方法是使用+= 而不是append。如果使用 append,则将 char 添加到列表中,而不是将结果与下一个 char 连接,并在结果中返回带有字符的列表。

def no_capitals(string):
    result = ""
    for char in string:
        if not char.isupper(): result += char
    return (result)

print(no_capitals("X007XK"))
print(no_capitals("Xmen R cute"))

更有效的可能性是使用 .join() 函数。所以往下看。

def no_capitals(string):
    result = []
    for char in string:
        if not char.isupper(): result.append(char)
    return "".join(result)

print(no_capitals("X007XK"))
print(no_capitals("Xmen R cute"))

【讨论】:

    【解决方案3】:

    保留您创建的结构并仅更改您可以执行此操作的最少代码量:

    def no_capitals(string):
        #result as a string
        result = ''
        for char in string:
            #if the character is not uppercase add it to the end of result
            if not char.isupper(): result += char
        return (result)
    
    print(no_capitals("X007XK"))
    print(no_capitals("Xmen R cute"))
    

    现在给出:

    007
    men  cute
    

    注意:男人和可爱之间有两个空格

    【讨论】:

      【解决方案4】:
      string = "X007XK"
      
      caps_omitted_string = filter(lambda c: not c.isupper(),string)
      

      【讨论】:

        【解决方案5】:

        使用 ''.join 并删除大写字母,它可以工作(感谢 dan1st 在下面的评论)。

        strs = "X007XK"
        results = ''.join([d for d in strs if not d.isupper()])
        output: '007'
        
        strs = "Xmen R cute"
        results = ''.join([d for d in strs if not d.isupper()])
        results
        'men  cute'
        

        【讨论】:

        • 虽然这段代码 sn-p 可以解决问题,但 including an explanation 确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性 cmets 挤满你的代码,因为这会降低代码和解释的可读性!
        猜你喜欢
        • 2020-12-24
        • 1970-01-01
        • 1970-01-01
        • 2020-08-28
        • 1970-01-01
        • 1970-01-01
        • 2014-12-21
        • 1970-01-01
        • 2017-10-18
        相关资源
        最近更新 更多