【问题标题】:Wrong output in function功能输出错误
【发布时间】:2022-11-29 02:50:50
【问题描述】:

嗨,我是编程的新手,我刚刚开始学习。

我要解决的问题是制作一个将地址标准化为输入的函数。

例子:

def standardize_address(a):

    numbers =[]
    letters = []
   
    a.replace('_', ' ')
     
    
    for word in a.split():
        if word. isdigit():
            numbers. append(int(word))
        elif word.isalpha():
            letters.append(word)
            
    s = f"{numbers} {letters}"
    
    
    return s

有人可以帮我解释我的错误并给我一个“专业”程序员解决方案和“菜鸟”(我自己)解决方案吗?

这是我应该打印的:

a = 'New_York 10001'
s = standardize_address(a)
print(s)

输出应该是:

10001 New York 

现在我的输出是:

[10001] ['New', 'York']

【问题讨论】:

  • 我得到 [10001] [] 作为输出

标签: python function loops append


【解决方案1】:

问题

  • 字符串是不可变的,因此您需要保留替换结果,所以 a = a.replace('_', ' ') 或在拆分调用之前将其链接

  • 您需要将列表连接成一个 numbers + letters 然后将元素与 " ".join() 连接起来

  • 不要将数字转换为int,那是无用的,并且会强制您将它们转换回 " ".join 中的 str

def standardize_address(a):
    numbers = []
    letters = []
    for word in a.replace('_', ' ').split():
        if word.isdigit():
            numbers.append(word)
        elif word.isalpha():
            letters.append(word)
    return ' '.join(numbers + letters)

提升

事实上,您想对有关 isdigit 条件的单词进行排序,因此您可以使用排序和适当的排序来表达它

def standardize_address(value):
    return ' '.join(sorted(value.replace('_', ' ').split(),
                           key=str.isdigit, reverse=True))

【讨论】:

  • 解释 replace 问题的更好方法是说 Python 字符串是不可变的。这解释了像这样的各种情况,而不是暗示行为在某种程度上是特定方法的函数。 - 虽然很好的答案 ;)
【解决方案2】:

numbersletters 都是字符串列表,如果你格式化它们,它们将被适当地呈现为[]s 和''s。你想要做的是替换这个:

    s = f"{numbers} {letters}"
    
    
    return s

有了这个:

return ' '.join(numbers + letters)

numbers + letters 是数字字符串和字母字符串的组合列表,' '.join() 获取该列表并通过在每个项目之间放置 ' ' 将其转换为字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    相关资源
    最近更新 更多