【问题标题】:Find the sum and average of the numbers within a string(/sentence), ignoring all the characters查找字符串(/句子)中数字的总和和平均值,忽略所有字符
【发布时间】:2022-11-13 16:43:38
【问题描述】:

我是 Python 新手,但这是我需要帮助才能获得输出的模式

输入

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

输出

输出应包含字符串中出现的数字的总和和平均值。注:平均值保留两位小数。

解释

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

测试用例:

  1. 输入

    我今年 25 岁零 10 个月

    输出

    35 17.5

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

    1. 输入

    一个girl64 35spaces numb6rs

    输出

    05 66.66

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

    1. 输入

    1次3 %次4

    输出

    8 2.67

    这是另一种情况,其中 (1,3) 不应像测试用例 2 中那样被提取为 13。这正是我需要帮助的情况

    我编写的代码对我来说只是获取不属于单词本身的数字,这对案例 1 很有效:

    sentence=input().split()
    op=[]
    for i in sentence:
        if i.isdigit():
            op.append(int(i))
        else:
            for j in i:
                if j.isdigit():
                    op.append(int(j))
    print(sum(op))
    avg=sum(op)/len(op)
    print(round(avg,2))
    

    我在寻找线索时发现了这一点,这适用于测试用例 1 和 2,但对于第三个测试用例仍然失败,因为无论位置如何,它都将来自同一个单词的数字连接起来。

    a=input()
    a=a.split()
    t=[int(''.join([j for j in k if j.isdigit()])) for k in a if any(m.isdigit() for m in k)]
    print(t)
    if len(t)!=0:
        print(sum(t))
        print(sum(t)/len(t))
    else:
        print(sum(t))
        print(sum(t))
    

    我无法理解上面的代码,但希望有人能澄清我并建议我如何解决这个问题

【问题讨论】:

    标签: python-3.x string


    【解决方案1】:

    如果您的数字是正整数,您可以使用以下逻辑来提取它们:

    input_str = "1time3 %times4"
    
    numbers = ''.join((ch if ch in '0123456789' else ' ') for ch in input_str)
    numbers_list = [int(i) for i in numbers.split()]
    
    print(f"Extracted numbers: {numbers_list}")
    print(f"Sum: {sum(numbers_list)}, Average: {sum(numbers_list)/ len(numbers_list)}")
    

    【讨论】:

      【解决方案2】:

      在这个程序中,我使用正则表达式来查找数字。

      import re
      test_string = "I am 25 years and 10 months old"
      print(test_string)
      temp = re.findall(r'd+', test_string)
      res = list(map(int, temp))
      sum = sum(res)
      lenList = len(res)
      avg = sum//lenList
      print("Average:",avg)
      print("Sum:",sum)
      

      输出 - 35、17

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-05
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 2015-02-18
        • 1970-01-01
        相关资源
        最近更新 更多