爱睡懒觉 发表于 2023-4-20 11:40:27

replace内有两个参数还是报错

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,out_data*(ind-1))
print(out_data)
      
      

爱睡懒觉 发表于 2023-4-20 11:41:00

   out_data = str.replace(out_data,out_data*(ind-1))
这是问题代码
显示:
Traceback (most recent call last):
File "C:\Users\75574\Desktop\isPalindrome.py", line 20, in <module>
    out_data = str.replace(out_data,out_data*(ind-1))
TypeError: replace expected at least 2 arguments, got 1

爱睡懒觉 发表于 2023-4-20 11:41:57

replace expected at least 2 arguments, got 1
但是我已经传入两个参数了,实在不知道怎么搞

冷冻哈密瓜 发表于 2023-4-20 11:50:08

在对字符串进行替换操作时,str.replace() 方法需要传入两个参数,分别是要替换的子串和替换后的内容。但是,在代码中使用了 out_data*(ind-1) 来构造第二个参数,这显然是无法实现字符串的替换的。

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

python
sub_str = out_data * int(each)
out_data = out_data[:ind-1] + sub_str + out_data
这里,int(each) 将字符串转换为整数,表示当前字符需要被替换的次数。同时,out_data[:ind-1] 是原始字符串中从开头到第 ind-1 个位置的子串,out_data 则是从第 ind+1 个位置到字符串结尾的子串,它们通过 + 运算符和 sub_str 拼接起来,实现了原始字符串的替换。

isdkz 发表于 2023-4-20 11:53:29

本帖最后由 isdkz 于 2023-4-20 11:56 编辑

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

要不就用 '待替换的字符串写这'.replace
页: [1]
查看完整版本: replace内有两个参数还是报错