Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的字符串变异_Python_String_Python 3.x_Mutable - Fatal编程技术网

python中的字符串变异

python中的字符串变异,python,string,python-3.x,mutable,Python,String,Python 3.x,Mutable,我的大脑无法理解为什么这不起作用。我不是很有经验,只是试着练习循环 我正在尝试创建一个函数,它接受一个字符串(当前为一个单词)并随机大写字母。在这段代码中,python抛出了一个TypeError:列表索引必须是整数或片,而不是字符串 以下是我所拥有的: import random list = [] def hippycase(string): for letter in string: list.append(letter) for index in l

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

我正在尝试创建一个函数,它接受一个字符串(当前为一个单词)并随机大写字母。在这段代码中,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"))
有什么想法或建议吗?谢谢

编辑:由于这已被标记为重复,有人认为是在以下链接,我将尝试并澄清什么是不同的: 我并不是在积极地寻找索引,我只是在练习循环,它恰好按顺序通过了iterable的索引。我还认为,如果一个noob程序员同事正在搜索,这可能会更有帮助

您正在使用的变量“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"))     
另一种方法是简单的列表理解:

the_string = "pineapple"

print ''.join([i.upper() if random.randint(1, 2) == 1 else i for i in the_string])
您正在使用的变量“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"))     
另一种方法是简单的列表理解:

the_string = "pineapple"

print ''.join([i.upper() if random.randint(1, 2) == 1 else i for i in the_string])

下面是代码的一个稍微改进的版本

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),因此调用函数会返回一个字符串(这是他们可能期望的)


此外,覆盖
列表
保留字也是不好的做法

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

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),因此调用函数会返回一个字符串(这是他们可能期望的)


此外,覆盖
列表
保留字也是不好的做法

Python的可能副本有很多用于列表处理的工具。您可以使用
list(random.choice((str.upper,str.lower))(c)实现这一点。
Python的可能副本有很多用于列表处理的工具。您可以使用
list(random.choice((str.upper,str.lower))(c)对字符串中的c执行此操作)
向下投票,因为在您的示例中,您仍然有
hippycase
修改全局
list
变量。调用
hippycase
的第二次(第三次和…)会发生什么?在谷歌搜索范围函数后,我想我明白了发生了什么。我缺乏知识会导致动脉瘤。谢谢你的帮助!当然,“list”仍然会存储从函数附加到它的所有变量,但是在这个问题的背景下,以及OP专门调用函数一次的事实,我没有在代码中解决这个问题。我很高兴我能提供帮助!在您的示例中,您仍然有
hippycase
修改全局
列表
变量。调用
hippycase
的第二次(第三次和…)会发生什么?在谷歌搜索范围函数后,我想我明白了发生了什么。我缺乏知识会导致动脉瘤。谢谢你的帮助!当然,“list”仍然会存储从函数附加到它的所有变量,但是在这个问题的背景下,以及OP专门调用函数一次的事实,我没有在代码中解决这个问题。我很高兴我能提供帮助!包含理解列表的改进版本
[char.upper()如果为random.randint(1,2)==1 else char.lower()对于字符串中的char]
包含理解列表的改进版本
[char.upper()如果为random.randint(1,2)==1 else char.lower()对于字符串中的char]