鱼C论坛

 找回密码
 立即注册
查看: 1880|回复: 4

[已解决]replace内有两个参数还是报错

[复制链接]
发表于 2023-4-20 11:40:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
user_data = input("请输入待压缩字符串:")
out_data = ""
for i in user_data:
    if out_data.count(i) == 0 and user_data.count(i) > 2:
        out_data += i+str(user_data.count(i))
    elif out_data.count(i) == 0 and user_data.count(i) <= 2:
        if user_data.count(i) == 2:
             out_data += i*2
        else:
            out_data += i
   
print("压缩后的字符串:",out_data)
print(f"压缩率为:{len(out_data)/len(user_data):.2%}")
   
   
ind = 0
for each in out_data:
    if each.isdecimal():
        ind = out_data.index(each)
        out_data = str.replace(out_data[ind],out_data[ind-1]*(ind-1))
print(out_data)
        
        
最佳答案
2023-4-20 11:50:08
在对字符串进行替换操作时,str.replace() 方法需要传入两个参数,分别是要替换的子串和替换后的内容。但是,在代码中使用了 out_data[ind-1]*(ind-1) 来构造第二个参数,这显然是无法实现字符串的替换的。

您可以考虑使用 Python 字符串拼接的方式来构造替换后的内容。例如,可以通过 'a'*3 来表示由 3 个字符 'a' 组成的字符串。因此,你可以将 out_data[ind-1] 重复 each 次,然后将结果拼接起来作为第二个参数传入 str.replace() 方法即可:

python
sub_str = out_data[ind-1] * int(each)
out_data = out_data[:ind-1] + sub_str + out_data[ind+1:]
这里,int(each) 将字符串转换为整数,表示当前字符需要被替换的次数。同时,out_data[:ind-1] 是原始字符串中从开头到第 ind-1 个位置的子串,out_data[ind+1:] 则是从第 ind+1 个位置到字符串结尾的子串,它们通过 + 运算符和 sub_str 拼接起来,实现了原始字符串的替换。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-4-20 11:41:00 | 显示全部楼层
   out_data = str.replace(out_data[ind],out_data[ind-1]*(ind-1))
这是问题代码
显示:
Traceback (most recent call last):
  File "C:\Users\75574\Desktop\isPalindrome.py", line 20, in <module>
    out_data = str.replace(out_data[ind],out_data[ind-1]*(ind-1))
TypeError: replace expected at least 2 arguments, got 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-20 11:41:57 | 显示全部楼层
replace expected at least 2 arguments, got 1
但是我已经传入两个参数了,实在不知道怎么搞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-20 11:50:08 | 显示全部楼层    本楼为最佳答案   
在对字符串进行替换操作时,str.replace() 方法需要传入两个参数,分别是要替换的子串和替换后的内容。但是,在代码中使用了 out_data[ind-1]*(ind-1) 来构造第二个参数,这显然是无法实现字符串的替换的。

您可以考虑使用 Python 字符串拼接的方式来构造替换后的内容。例如,可以通过 'a'*3 来表示由 3 个字符 'a' 组成的字符串。因此,你可以将 out_data[ind-1] 重复 each 次,然后将结果拼接起来作为第二个参数传入 str.replace() 方法即可:

python
sub_str = out_data[ind-1] * int(each)
out_data = out_data[:ind-1] + sub_str + out_data[ind+1:]
这里,int(each) 将字符串转换为整数,表示当前字符需要被替换的次数。同时,out_data[:ind-1] 是原始字符串中从开头到第 ind-1 个位置的子串,out_data[ind+1:] 则是从第 ind+1 个位置到字符串结尾的子串,它们通过 + 运算符和 sub_str 拼接起来,实现了原始字符串的替换。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-20 11:53:29 | 显示全部楼层
本帖最后由 isdkz 于 2023-4-20 11:56 编辑

你要替换哪个字符串?str.replace 至少要三个参数,因为 str 是字符串类,你要自己把 self 作为第一个参数传进去,也就是待替换的字符串

要不就用 '待替换的字符串写这'.replace
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 04:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表