Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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 如何更改处于2的倍数位置的所有字母?_Python_String - Fatal编程技术网

Python 如何更改处于2的倍数位置的所有字母?

Python 如何更改处于2的倍数位置的所有字母?,python,string,Python,String,我试图用字符*更改2的倍数的字符/字母的位置。但是,当我尝试运行它时,会收到一条错误消息 “str”对象不支持项分配 def猜测(x): i=0 而i

我试图用字符
*
更改2的倍数的字符/字母的位置。但是,当我尝试运行它时,会收到一条错误消息

“str”对象不支持项分配

def猜测(x):
i=0
而i

如何正确执行此操作?

如错误消息中所述,字符串对象不支持列表和字典等项分配。我建议对代码使用
replace()
函数,或者将
x
更改为列表,然后再更改为字符串。

如错误消息中所述,字符串对象不支持列表和字典之类的项分配。我建议对代码使用
replace()
函数,或者将
x
更改为一个列表,然后再更改为一个字符串。

字符串是不可变的,因此您需要构建一个新字符串来返回。我会使用
枚举
加入

>>> def guess(x):
...     return ''.join(c if i % 2 else '*' for i, c in enumerate(x))
...
>>> guess("today is a beautiful day")
'*o*a* *s*a*b*a*t*f*l*d*y'

字符串是不可变的,因此您需要构建一个新字符串来返回。我会使用
枚举
加入

>>> def guess(x):
...     return ''.join(c if i % 2 else '*' for i, c in enumerate(x))
...
>>> guess("today is a beautiful day")
'*o*a* *s*a*b*a*t*f*l*d*y'

这回答了你的问题吗?除了下面Samwise的答案之外,还值得强调他们的方法与您自己的方法之间的差异。使用
enumerate(x)
构造for循环是遍历字符串、返回索引和字符值的好方法,而不是设置笨拙的while循环并必须创建一个计数器来遍历它。这是否回答了您的问题?除了下面Samwise的答案之外,还值得强调他们的方法与您自己的方法之间的差异。使用
enumerate(x)
构造for循环是一种遍历字符串、返回索引和字符值的好方法,而不是设置一个笨拙的while循环并创建一个计数器来遍历它。
replace
按值替换字符,而不是按位置。是的,我知道你想做什么了。Samwise的代码可以正常工作。正如我所说,您还可以将
x
更改为列表,因为列表支持项目分配。然后使用
return''返回x。加入(x)
。我也不知道为什么要使用while循环,因为for循环更容易。
replace
按值而不是按位置替换字符。是的,我知道你想做什么。Samwise的代码可以正常工作。正如我所说,您还可以将
x
更改为列表,因为列表支持项目分配。然后使用
return''返回x。加入(x)
。我也不知道为什么要使用while循环,因为for循环更容易。