在Python中交换字符串大小写

时间:2016-02-03 23:23:41

标签: python

我在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()

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

5 个答案:

答案 0 :(得分:3)

作为生成器表达式:

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(...)

将连接任何字符串序列,并且它们之间没有任何内容("")。

答案 1 :(得分:3)

一下子用字符串连接对单个字符进行列表理解,这样做:

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

输入&输出:

sIMple
SimPLE

答案 2 :(得分:2)

字符串是不可变的。这意味着当您使用函数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中更改这些字母。

答案 3 :(得分:0)

您正在通过lower()upper()投放每个角色,但这些功能不会更改角色。

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

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

答案 4 :(得分:0)

1)你需要将main()调用放在新行上,因为python在程序结构上大量依赖空白

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

基本上发生的事情是s与字符串中的字符具有相同的值,但不是字符串中的字符。