在python中改变字符串

2024-10-01 13:46:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我的大脑无法理解为什么这不起作用。我不是很有经验,只是在练习循环。在

我正在尝试创建一个函数,它接受一个字符串(当前为一个单词)并随机将字母大写。在这段代码中,python抛出一个TypeError:列表索引必须是整数或切片,而不是字符串

以下是我所拥有的:

import random

list = []

def hippycase(string):
    for letter in string:
        list.append(letter)

    for index in list:
        if random.randint(1,2) == 1:
            list[index] = list[index].upper()
        else:
            list[index] = list[index].lower()
    return list


print(hippycase("pineapple"))

有什么建议或建议吗?谢谢

编辑:既然有人认为这是在下面的链接上,这已经被标记为一个副本,我将尝试澄清其中的不同之处: Accessing the index in Python 'for' loops 我不是在积极地寻找索引,我只是在练习循环,它碰巧按顺序遍历iterable的索引。我也认为如果一个noob程序员在搜索,这可能会更有帮助。在


Tags: 函数字符串inforstringindex字母random
2条回答

您使用的变量“index”是字符串中的一个字母,因为您正在迭代它。要修复此错误,请使用range()函数,该函数允许您按索引访问列表中的每个元素:

list = []

def hippycase(string):
    for letter in string:
        list.append(letter)

    for index in range(len(list)): #here, we are accessing the elements by index
        if random.randint(1,2) == 1:
            list[index] = list[index].upper()
        else:
            list[index] = list[index].lower()
    return list


print(hippycase("pineapple"))     

另一种方法是简单的列表理解:

^{pr2}$

这里有一个稍微改进的代码版本

def hippycase(string):
    charlist = []
    for char in string:
        if random.randint(1,2) == 1:
            charlist.append(char.upper())
        else:
            charlist.append(char.lower())
    return charlist

注意,在这个版本中,我们只关注字符串中的字符,而不关心索引-这有助于减少混淆。在

如果我把它写进“hippycase”一个字符串,我可能会返回“.join(charlist),那么调用函数将返回一个字符串(这可能是他们所期望的)

另外,重写list保留字是不好的做法。在

相关问题 更多 >