【问题标题】:Swapping string case in Python [duplicate]在Python中交换字符串大小写[重复]
【发布时间】:2016-02-03 23:23:41
【问题描述】:

我在 Python 中排名新,所以问题来了,

我正在尝试解决一个简单的问题,程序接受一个简单的字符串并交换所有情况。因此,如果我们输入

SimPLE

我们应该得到

sIMple

这是我的代码

def main():
    oldStr = input()
    for s in oldStr:
        if s.islower():
            s.upper()
        elif s.isupper():
            s.lower()
    print(oldStr)
if __name__ == "__main__" : main()

它只是返回相同的字符串。任何帮助表示赞赏。

【问题讨论】:

    标签: python


    【解决方案1】:

    作为生成器表达式:

    mystr = "SimPLE"
    print("".join(c.upper() if c.islower() else c.lower() for c in mystr))
    

    上面的细分是:

    c.upper() if c.islower() else c.lower()
    

    是一个条件表达式,它将字符从大写转换为小写,反之亦然。

    那么,

    (... for c in mystr)
    

    是一个生成器表达式,有点像动态生成的列表。

    最后:

    ".join(...)
    

    将任何字符串序列连接在一起,它们之间没有任何内容(“”)。

    【讨论】:

    • 我知道 OP 使用 str 作为变量名,但您应该在答案中更改它。
    • @Brian 得到了 str 部分。你能再解释一下代码吗?
    • @Zeus 更新了解释 - 希望对您有所帮助!
    【解决方案2】:

    在单个字符的列表理解上使用字符串连接一举完成:

    outstr = ''.join([s.upper() if s.islower() else s.lower() for s in oldStr])
    print(outstr)
    

    输入和输出:

    sIMple
    SimPLE
    

    【讨论】:

    • 能否稍微解释一下代码,如前所述,我有Java背景,通常用于更冗长的代码。
    • 我知道 OP 使用 str 作为变量名,但您应该在答案中更改它。
    • @TigerhawkT3 为什么我不能使用名称 str?这是一些pythonic约定吗?
    • @Zeus - 见上面我的回答 (@Brian)。
    【解决方案3】:

    字符串是不可变的。这意味着当您使用函数s.upper() 时,它不会将str 中的那个字母设置为大写,它只是以大写返回那个字母。

    下面是一些有效的代码:

    def main():
        oldStr = input()
        newStr = ""
        for s in oldStr:
            if s.islower():
                newStr+=s.upper()
            elif s.isupper():
                newStr+=s.lower()
        print(newStr)
    

    现在请注意,我们正在创建一个新字符串,并且只是在 forloop 中的每个点添加字母,而不是在 str 中更改这些字母。

    【讨论】:

    • 我知道 OP 使用 str 作为变量名,但您应该在答案中更改它。
    【解决方案4】:

    您通过lower()upper() 运行每个字符,但这些函数不会更改字符。

    相反,他们返回角色的修改版本。原字符s 将保持原样。

    您应该根据lower()upper()返回值 构建一个新字符串,然后返回该字符串。

    【讨论】:

      【解决方案5】:

      1) 您需要将main() 调用放在新行上,因为 python 严重依赖空格来构建程序结构

      2) s 是为 for 语句创建的临时变量。它实际上并没有引用字符串中的字符

      本质上,s 与字符串中的字符具有相同的值,但它实际上不是字符串中的字符。

      【讨论】:

      • main() 调用不需要换行。
      • 不是吗?每当我不把东西放在新行上时,它所做的就是错误。还有当我不缩进时。
      • herehere
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 2010-09-08
      • 1970-01-01
      • 2020-09-16
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多