python - 如何使用 for 循环在提供的字符串中交替大小写

标签 python string python-3.x for-loop

我想创建一个 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/

相关文章:

python - PriorityQueue 按对象属性排序

python - 重新运行单元格时,Jupyter notebook 速度极慢

python - 无法为使用 PEP 517 且无法直接安装的 _ 构建轮子 - 简单的解决方案

python - Python Asyncio队列获取未收到消息

python - 如何使用 numpy.where 更改图像的所有像素?

python - 在 Python 的 __getitem__ 方法中使用关键字参数

c# - 试图创建随机值字符串

php - 从 HTML 文本中提取特定文本

javascript - 如何解析 javascript 字符串,就像作为文本输入一样

python - 自动注册新的级长流程?