仅返回带有数字 + 美元的字符串的总价值

问题描述

我只需要返回包含数字+美元的字符串的总价值,例如 ['10$','sock','12.55$','pizza11'] 中的 '12.55$'。例如,此列表应返回 22.55$(带有美元符号)。

所有其他字符串都没有值。我创建了一个函数 isnumber:

def isnumber(string):
    try:
        float(string)
    except:
        return False
    return True

还有这个,但它不起作用:

def value_liste(liste):
amount = 0

if liste == []:
    return 0.0

for string in liste:
    if isnumber(string) == True and string[-1:] == '$':
        amount += float("".join(d for d in string if d.isdigit()))
    return amount

解决方法

应该这样做:

22.55$

输出:

data-bs-toggle

循序渐进:

  • 仅从列表中提取以 '$' 结尾的元素
  • 从字符串中去除 '$' 并将其转换为浮点数
  • 将这些值相加。
  • 将结果转换为字符串。
  • 在字符串末尾添加'$'
,

首先,您应该使用字符串的 rstrip() 方法,该方法删除字符串末尾的字符,如下所示:

def is_number(string):
    try:
        float(string.rstrip('$'))
    except:
        return False
    return True

然后,如果我正确理解第二段代码(因为格式有问题),结果将如下所示:

def value_liste(liste):
    amount = 0

    if not liste:
        return 0.0

    for string in liste:
        if isnumber(string):
            amount += float(string.rstrip(('$'))
        return amount

像您那样检查列表是否为空在 Python 中不是惯用的。您也可以简化表达式,检查字符串是否为数字。如果你想要一个oneliner,你可以写:

my_list = ['10$','sock','12.55$','pizza11']
total = sum(float(el.rstrip('$')) for el in my_list if el.endswith('$'))
,

这里需要纠正的 3 件事:

  1. 正如 DeepSpace 所说,$ 使字符串无法被解释为浮点数,因此需要先将其删除。 .replace() 方法在这里很有用。

  2. 注意缩进! Python对此很挑剔。如果函数声明后没有任何缩进,Python 将抛出一个错误。另外,for 循环之后的 return 语句应该与单词 for 处于相同缩进级别;现在它只返回第一次迭代后的数量,跳过其余的列表元素。

  3. for 循环中的条件应该包含 .,以便将它们包含在要包含的浮点数中,否则您的样本列表返回 1265.0。>

总而言之,这是一个更正的版本:

def isnumber(string):
    string_no_dollar = string.replace("$","") # removes all $-signs
    try:
        float(string_no_dollar)
    except:
        return False
    return True


def value_liste(liste):
    # Code is indented after function declaration,as it must always be in Python.
    amount = 0 

    if liste == []:
        return 0.0

    for string in liste:
        if isnumber(string) == True and string[-1:] == '$':
            # Include the "." in the conditional.
            amount += float("".join(d for d in string if d.isdigit() or d == "."))
    # The "return" statement should be indented outside the "for" loop.
    return amount

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...