【问题标题】:Extracting numbers from a sentence in python and performing calculation on it从python中的句子中提取数字并对其进行计算
【发布时间】:2021-07-14 06:19:11
【问题描述】:

我是 Python 新手,但问题来了

给定一个字符串,编写一个程序,返回字符串中出现的数字的总和和平均值,忽略所有其他字符。

输入

输入将是包含字符串的单行。

输出

输出应包含字符串中出现的数字的总和和平均值。 注意:将平均值四舍五入到小数点后两位。

说明

例如,如果给定的字符串是“我 25 岁零 10 个月大”,则数字为 25、10。您的代码应打印数字的总和 (35) 和数字的平均值 (17.5)在新行中。

测试用例

输入

我今年 25 岁零 10 个月大

输出

35 17.5

上面的测试用例非常简单明了,当你试图解决这样的问题时,我的问题就来了。

输入

Agirl64 35spaces numb6rs

输出

205 66.66

所以基本上我要问的是, 你如何提取字符串之间存在的数字。 使 (164) 不会变成 (1,6,4)

【问题讨论】:

  • 如果您为此工作了两天,您应该有一些代码要显示,请发布并解释它有什么问题。
  • 您需要将句子转换为字符串stackoverflow.com/questions/6181763/… 的列表,然后您需要使用isdigit( ) 检查列表中的每个元素是否为数字。然后使用 int( ) 函数将获得的数字转换为整数并求平均值和求和
  • 是的,请显示您尝试了两天的代码。
  • 你的问题写得不好,你需要阅读这个stackoverflow.com/help/how-to-ask
  • 对了,64+35+6怎么加起来就是205?

标签: python string list split


【解决方案1】:
import re
input_str = "I am 25 years and 10 months old"
num_str = re.findall('[0-9]+',input_str)
if len (num_str) > 0:
    list_str = [int(n) for n in num_str]
    print (sum(list_str),round(sum(list_str)/len(list_str),2))
else:
    print (0,0)

【讨论】:

  • 感谢cmets,代码已作相应修改。
【解决方案2】:

这是您需要执行的操作。

string = 'I am 25 years and 10 months old'
lst=list(string.split())
lst1=[]
for i in lst :
  if(i.isdigit()):
      i=int(i)
      lst1.append(i)
if(len(lst1)!=0):
  avg=sum(lst1)/len(lst1)
else:
  avg=0

print(sum(lst1))
print(avg)

【讨论】:

    【解决方案3】:

    你可以试试这个:

    a='Hello123, I am Hello World234'
    a=a.split()
    t=[int(''.join([j for j in k if j.isnumeric()])) for k in a if any(m.isnumeric() for m in k)]
    if len(t)!=0:
        print(sum(t),sum(t)/len(t))
    else:
        print(sum(t),sum(t))
    

    输出:

    357 178.5
    

    【讨论】:

    • 如果列表为空会报除零错误。
    【解决方案4】:

    使用map() 函数转换列表中的str,然后检查它是否为数字。如果是,则将其附加到堆栈中并使用堆栈计算平均值和求和。

    total=0
    avrage=0
    stack=[]
    line=list(map(str,input().split()))
        
    for i in line:
        if i.isdigit():
            i=int(i)
            stack.append(i)
        
    avrage=sum(stack) / len(stack)
    total=sum(stack)
    print(avrage)
    print(total)
    

    【讨论】:

    • 字母和数字融合就不行了
    猜你喜欢
    • 2021-03-29
    • 2020-08-14
    • 2013-08-10
    • 2019-04-20
    • 2023-03-24
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多