首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求和和平均使用python

求和和平均使用python
EN

Stack Overflow用户
提问于 2020-08-04 11:11:50
回答 3查看 125关注 0票数 1
  • I编写了一段代码,从文本文件中提取浮点数并生成数字列表。

  • ,我的挑战是把连续的数字相加,找出数字的平均值。--

  • 我不允许使用sum函数,我对python是新手。这是我迄今编写的代码,

我能做些什么来通过列表添加

代码语言:javascript
复制
fh = open(fname)
for line in fh:
    if line.startswith("X-DSPAM-Confidence:") : continue
#    print(line)
count = 0
for line in fh:
    if line.startswith("X-DSPAM-Confidence:"):
        count = count + 1
#       print(count)

for line in fh:
    if line.startswith("X-DSPAM-Confidence:"):
#       print(line)
        xpos = line.find(' ')
#       print(xpos)
        num = line[xpos : ]
#       print(float(num))
        fnum = float(num)       
#       print(fnum)
        
        total = 0
        for i in fnum:
            total += int(i) 
            print(total)

错误:“浮点对象不能在第24行上迭代”.第24行是循环的第4行。

EN

回答 3

Stack Overflow用户

发布于 2020-08-04 11:43:08

首先,打开的文件只能迭代一次,您的代码显示了以for line in fh:开头的4个循环。在第一个循环之后,文件指针将到达文件的末尾,下面的循环应该立即返回。因此,应该优先考虑with

接下来,在循环的某个地方,您将在fnum中得到一个浮点值。只需在启动循环之前初始化total,并在得到它时添加fnum

代码语言:javascript
复制
total = 0
with open(fname) as fh:
    for line in fh:
        if line.startswith("X-DSPAM-Confidence:"):
    #       print(line)
            xpos = line.find(' ')
    #       print(xpos)
            num = line[xpos : ]
    #       print(float(num))
            fnum = float(num)       
    #       print(fnum)
            total += fnum
    #       print(total)

with确保在循环结束时文件将被干净地关闭。

票数 2
EN

Stack Overflow用户

发布于 2020-08-04 11:41:30

fnum是一个浮子。它不是数组,因此它是不可迭代的,不能在for循环中迭代。

您可能不需要数组来确定总数和平均值:

代码语言:javascript
复制
fname = "c:\\mbox-short.txt"
fh = open(fname)

count = 0
total = 0
for line in fh:
    if line.startswith("X-DSPAM-Confidence:"):
        xpos = line.find(' ')
        num = line[xpos : ]
        fnum = float(num)       
        total += fnum
        count += 1

print("Total = " + str(total))
print("Average = " + str(total / count))
print("Number of items = " + str(count))
票数 1
EN

Stack Overflow用户

发布于 2020-08-04 12:58:25

在这种情况下,您不必使用startsWith。最好对文件的每一行使用拆分。每一行都会将所有单词分割成一个列表。然后使用您查找的索引,X-DSPAM-Confidence:.如果存在,则取相应的利息值。在这种情况下,它是索引1。下面是代码:

代码语言:javascript
复制
total = 0
number_of_items = 0

with open("dat.txt", 'r') as f:
    for line in f:
        fields = line.split()
        if fields != []:
            if fields[0] == "X-DSPAM-Confidence:":
                number_of_items += 1
                total += float(fields[1])

print(total)
print(number_of_items)      

avg = (total/number_of_items)    
print(avg)

我用文本文件名"dat.txt“保存了您的数据。

希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63245667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档