我想创建一个 for 循环,它将在提供的字符串(作为用户输入给出)中交替使用大小写字母。 我的一般想法是制作一个从 0 开始到字符串长度结束的 for 循环,步长为 2。 这是我目前所拥有的(x 是字符串变量)。
for a in range (0,len(x),2):
x=x[0:a] + x[a].upper + x[a+1::]
print("Alternate Lowercase Letters:", a)
当我使用它时,我收到一条错误消息说
"TypeError: must be str, not builtin_function_or_method"
有什么建议吗?
最佳答案
如前所述,该错误的原因是您使用的是 x[a].upper
而不是 x[a].upper()
。所以 Python 认为您想将该方法与 x[0:a]
和 x[a+1::]
字符串连接起来,这是没有意义的。
但是,有更好的方法来完成这项任务。您可以使用列表理解来执行大小写更改,然后使用 .join
方法将列表内容转换为字符串。这里有两个变体。
我们可以在遍历输入字符串中的字符时使用enumerate
来获取字符索引。如果索引是奇数,我们将 char 设为小写,否则将其设为大写。
def alt_case(s):
return ''.join([u.lower() if i % 2 else u.upper() for i, u in enumerate(s)])
或者,我们可以使用切片将奇数和偶数字符分开,然后在执行大小写转换后使用 zip 将它们放回一起。
def alt_case(s):
hi = s[::2].upper()
lo = s[1::2].lower()
return ''.join([u+v for u, v in zip(hi, lo)])
这是测试这些函数的代码。
s = 'This is a test'
print(alt_case(s))
输出
ThIs iS A TeSt
FWIW,这是第一个版本的神秘变体:
def alt_case(s):
return ''.join([(str.upper, str.lower)[i%2](u) for i, u in enumerate(s)])
关于python - 如何使用 for 循环在提供的字符串中交替大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48630603/