python,如图选项replace的使用为啥是错的?谢谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python,如图选项replace的使用为啥是错的?谢谢相关的知识,希望对你有一定的参考价值。
python,如图选项replace的使用为什么是错的?谢谢
这个输出结果是对的。只不过只是在输出时修改内容,不会改变变量值。
参考技术A def test1():test_str="028-123456"
print test_str.replace(old="-",new="")
def test2():
test_str="028-123456"
print test_str.replace("-","")
test2()
结果
Connected to pydev debugger (build 141.1245)
028123456
Process finished with exit code 0
指出参数名进行调用时出错
Traceback (most recent call last):
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py", line 2357, in <module>
globals = debugger.run(setup['file'], None, None, is_module)
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevd.py", line 1777, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "/Users/function_test/test_builtin_str.py", line 8, in <module>
test1()
File "/Users/function_test/function_test/test_builtin_str.py", line 4, in test1
print test_str.replace(old="-",new="")
TypeError: replace() takes no keyword arguments
没有恶意,但我真的怀疑楼上两位并不太了解Python。
你这么调用在Python中是没问题的,但出现这个问题的真正原因是字符串的
replace
方法不是用Python实现的,而是用C语言实现的,所以它不支持Python里面的
keyword
参数特性。
你可以试一下用
Python版本的replace
:
from string import replace
s = '012-3456'
print replace(s, new='', old='-') # 即使将old和new调换位置一样可以正确替换,输出0123456
这个
replace
方法在
string
模块中(Lib/string.py文件),是对C语言版本的
relace
方法的封装,有兴趣的话你可以去看看它的源码
replace函数在python2.7的文档中描述如下:
str.replace(old, new[, count])
Return a copy of the string with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced.
在python中的函数参数分为四种:必选参数、默认参数、可变参数、关键字参数
replace函数中old和new输入必选参数,count属于默认参数
你在test1中使用的调用方式必须在函数定义时声明为关键字参数
关键字参数举例:
def test(**kw):
for key in kw:
print "[%s, %s]" % (key, kw[key])
test(x=9)
以上代码输出为[x, 9]
为啥我无法在 python 中正确使用 str.replace() 方法 [关闭]
【中文标题】为啥我无法在 python 中正确使用 str.replace() 方法 [关闭]【英文标题】:Why am I not able to properly use str.replace() method in python [closed]为什么我无法在 python 中正确使用 str.replace() 方法 [关闭] 【发布时间】:2015-05-12 14:23:49 【问题描述】:这是我第一次在这里发帖,如果我发错了请告诉我。我在这里阅读了很多主题以及其他网站上的信息。他们都说字符串是不可变的,我理解这一点,但我试图在我的自动填充功能中使用str.replace()
方法,但我似乎无法正确地把它放下。根本不可能吗?这是我的代码:
def main():
fileName = input("Please enter a filename: ")
file = open(fileName, 'r') # opens the file
content = file.readlines() # reads in the contents as a list
x=0 # x is a random variable used for while loop
while x < (len(content)-1): # while loop is used to remove the "\n" at the end
content[x] = content[x].strip() #strip method is used to remove \n
x=x+1 # adds 1 to x to help stop the loop
printBoard(content)
move = selection()
while move != "q" :
row = (int(move[0]))-1
column = (int(move[3])) -1
content = autoFill(content, row, column)
printBoard(content)
move = selection()
def autoFill(board, rows, columns):
if (board[rows][columns]) == 'X' :
return (board)
board[rows][columns] = ((board[rows][columns]).replace('O', 'X'))
print(board)
return (board)
这里是应该发生的事情的示例:
Please enter a filename: input.txt
OOOOOOXOOOO
OOOOOXOOOOO
OOOOXOOOOOO
XXOOXOOOOOO
XXXXOOOOOOO
OOOOOOOOOOO
Please enter a square to fill, or q to exit: 1, 1
XXXXXXXOOOO
XXXXXXOOOOO
XXXXXOOOOOO
XXXXXOOOOOO
XXXXOOOOOOO
OOOOOOOOOOO
但是当我运行它时。由于我的递归函数永远持续下去(直到运行时崩溃)
【问题讨论】:
您希望替换做什么?反而发生了什么?您为autoFill
函数提供了哪些输入?
你将board
反弹到str.replace()
返回值;一个新的字符串对象。您是否希望该函数返回整个棋盘?
所以这是一个充满 Os 和 Xs 的板,我希望替换功能将 O 更改为 X。
抱歉,我错误地提交了我的测试代码。但我只是想从列表中替换那个 1 索引。
那么仍然不清楚发生了什么以及您期望发生什么。如果可以,请向我们展示一个示例板(让它变小)以及调用函数时它会发生什么。
【参考方案1】:
我不确定您要做什么,但是,只有几个 cmets:
要从字符串末尾删除 任何 个 \n
字符,您可以使用
string = string.rstrip('\n')
在您使用 replace 的行中,您尝试对矩阵的单个单元格 (board[rows][columns]
) 执行替换,并且您正在将该单个单元格的替换结果分配给整个矩阵。我想你的意思实际上是:
board[rows][columns] = board[rows][columns].replace('O', 'X'))
编辑:既然你的单元格总是包含'O'
或'X'
,为什么不简单地写:
board[rows][columns] = 'X'
和
board[rows][columns] = 'O'
取决于您希望它们包含的新角色?
编辑2: 顺便说一句,执行剥离部分的更 Pythonic 方式是:
content = [line.rstrip('\n') for line in content]
EDIT3:据我所知,您的问题是字符串是不可变的,我错误地认为您正在使用字符列表。要将您的板子转换为字符列表(因此是可变的),只需执行以下操作:
new_board = []
for line in board:
new_line = [c for c in line]
new_board.append(new_line)
【讨论】:
是的,我用那个更新了我的代码:),但我仍然无法替换那个特定的单元格。当我运行它时,单元格实际上并没有被替换:( 我编辑了我的答案,我不确定你为什么要replace()
而不是仅仅覆盖新字符。
我试过你说的,它给了我错误:'str'对象不支持项目分配。这就是我尝试替换的原因,因为 python 有一个内置的 str.replace() 方法
再次编辑,这应该可以解决它。此时replace
不应该工作,因为它是一种字符串方法,而您正在使用字符列表,但您应该能够按照board[i][j] = 'X'
的方式做一些事情。
我试图变得懒惰,只是在不创建列表的情况下工作。但我会尝试的。我认为这将使使用代码变得更加容易。以上是关于python,如图选项replace的使用为啥是错的?谢谢的主要内容,如果未能解决你的问题,请参考以下文章
已经安装了python,为啥每次打开vs code,python扩展都会出现如图的提示?
为啥 python datetime replace timezone 返回不同的时区?
JS 为啥我用了location.replace,还是会生成历史记录