我在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()
它只返回相同的字符串。任何帮助表示赞赏。
答案 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
与字符串中的字符具有相同的值,但不是字符串中的字符。