【问题标题】:Is there a problem with my string replacement code?我的字符串替换代码有问题吗?
【发布时间】:2019-08-11 20:50:42
【问题描述】:
string = input()

for i in range(len(string)):
    if i % 3 == 0:
        final = string.replace(string[i], "")

print(final)

我被问到一个问题:“给定一个字符串,删除其索引可被 3 整除的所有字符。”

输入Python 的答案是yton。但是,我的代码给出了Pyton

代码对我来说很有意义,但我是初学者。有什么帮助吗?

【问题讨论】:

  • (1) 您在每个循环中使用相同的string,因此只有最后一次更改会反映在final 中,并且 (2) 您不应该使用此方法,因为如果该字符串具有重复字符(即,您将删除所有 h 字符,无论其他字符的索引是否可被 3 整除)。
  • "".join(x for i, x in enumerate("Python") if i % 3 != 0)

标签: python string loops replace


【解决方案1】:
string=input()
final=""
for i in range(len(string)):
    if i % 3 != 0:
        final+=string[i]


print(final)

在您的代码中,final = string.replace(string[i], "") 行将像这样运行。

假设输入是“hellobaby”:

i=0, final="ellobaby"

i=3, final="helobaby"

i=6, final="hellobby" 

【讨论】:

    【解决方案2】:

    问题在于,当您循环时,每次索引可被 3 整除时,您都会覆盖 final 变量。 相反,尝试在开始循环之前定义最终变量,并在循环时添加字母,并且仅当它们的索引不能被 3 整除时(因此,忽略索引可以被 3 整除的那些)。

    这样的事情应该可以工作:

    string = input()
    final = ""
    for i in range(len(string)):
        if i % 3 != 0:
            final += string[i]
    
    print(final)
    

    【讨论】:

      【解决方案3】:

      在您当前的代码中,final 用于循环的每次迭代。它通过替换一个字符继续更新。在每次迭代中,final 被替换为不同的字符串,其中删除了来自string 的一个字母。循环完成后,它实际上只替换了一个字母,在本例中为“h”。

      改用这个(感谢 Mateen Ulhaq 的想法):

      print("".join(x for i, x in enumerate(input()) if i % 3 != 0))
      

      【讨论】:

        猜你喜欢
        • 2013-05-04
        • 1970-01-01
        • 2021-07-11
        • 2010-10-04
        • 2015-10-11
        • 2011-11-24
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        相关资源
        最近更新 更多