【问题标题】:Get a wrong result when converting a string into a new string [duplicate]将字符串转换为新字符串时得到错误的结果[重复]
【发布时间】:2021-10-10 11:48:10
【问题描述】:

我正在尝试从 Codewars 做这个练习:

本练习的目标是将字符串转换为新字符串,其中如果该字符在原始字符串中仅出现一次,则新字符串中的每个字符为“(”,如果该字符多次出现,则为“)”在原始字符串中。在确定字符是否重复时忽略大小写。 这是我的代码:

def duplicate_encode(word):
    new_word = ''
    for i in word:
        if word.count(i) == 1:
            new_word += '('
        else:
            new_word += ')'
    return new_word

在转换单词Success 时,我得到的是(())()) 而不是)())())。

谁能告诉我怎么解决?

【问题讨论】:

  • 一个关于你的程序输出的问题标题与它为什么会/没有得到输出相比,它对其他人的用处要小得多,而不是一个谈论特定技术问题的标题 你需要修复以获得正确的输出
  • 请记住,Stack Overflow 问题的重点是让其他有相同问题的人可以找到并从问题的答案中学习(我们来这里是为了建立一个知识库,而不是提供一对一帮助个人)。下一个因S 与s 不同而导致问题的人可能不会知道这与(())()) 与)())()) 不同,所以这个标题并不能帮助他们找到问题(和答案)这将帮助他们解决问题。

标签: python python-3.x


【解决方案1】:

你不是“忽略大小写”:

def duplicate_encode(word):
    word = word.lower()  
    # as you were

从算法上讲,您应该使用collections.Counter 在一次迭代中收集所有计数:

from collections import Counter

def duplicate_encode(word):
    word = word.lower()  
    counts = Counter(word)
    return "".join("(" if counts[x]==1 else ")" for x in word)

【讨论】:

  • 非常感谢您的回复@schwobaseggl
【解决方案2】:

“S”与“s”不同。 "HeLlo".count("l") 例如返回 1,因为它区分大小写。你应该添加 word = word.lower() 在您的 for 循环上方,它将起作用。

def duplicate_encode(word):
    word = word.lower()
    new_word = ''
    for i in word:
        if word.count(i) == 1:
            new_word += '('
        else:
            new_word += ')'
    return new_word

print(duplicate_encode("Success"))

)())()) 中的结果。

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 2014-07-06
    • 2019-10-10
    • 2017-10-24
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多