以下是我要尝试的课程:"创建一个程序,读取存储在文件中的所有数字并计算总数(总和),然后将值显示为屏幕总点数。接下来,让程序计算平均分数,然后将该值显示为屏幕分数百分比。接下来,确保程序处理IOError和ValueError异常。我已尝试使用循环的十几种不同的方法,但无法使任何工作。我能让它发挥作用的唯一方法是这样做:
def main ():
infile = open('numdata.txt', 'r')
num1 = int(infile.readline())
num2 = int(infile.readline())
num3 = int(infile.readline())
num4 = int(infile.readline())
num5 = int(infile.readline())
num6 = int(infile.readline())
num7 = int(infile.readline())
num8 = int(infile.readline())
infile.close()
total = num1+num2+num3+num4+num5+num6+num7+num8
average = total/8
print('the total: ', total)
print('the average: ', average)
main()
这是我能想到的最好的:
def main():
total = 0
try:
NumberFile = open('numdata.txt', 'r')
for line in NumberFile:
amount = float(line)
total += amount
print(format(total, ',.2f'))
print('Total: ', format (total, ',.2f'))
except ValueError:
print('Non-numeric data found in the file.')
except IOError:
print('An error occured trying to read the file.')
except:
print('An error has occured.')
finally:
NumberFile.close()
main()
这是我得到的输出: 78.00, 171.00, 256.00, 356.00, 437.00, 513.00, 607.00, 684.00, 在文件中找到非数字数据。
如果有人想给我看一个如何使用循环来做加法的例子,我将非常感激。文件中的数字是: 78 93 85 100 81 76 94 77 但是,使用1-8就可以了。任何和所有的帮助表示赞赏。我对此非常陌生,因此我确信有一种更简单的方法可以做到这一点,而不是我一直在努力的方法。我尝试过使用我正在使用的书中的例子,即使我逐字逐句地复制它们也没有用。我也尝试了视频示例,即使我完全复制了所有内容,但仍无法使循环工作。超级沮丧。 这是我尝试使用但不起作用的一个例子:为简单起见,这些数字仅为1,2,3。它们位于名为06_tips的.txt文件中
tipfile = open('06_tipfile.txt', 'r')
strRead = tipfile.readline()
ftTotalTips = float(strRead)
while strRead != '':
strRead = tipfile.readline()
if strRead != '':
ftTotalTips = float(ftTotalTips) + float(strRead)
print('Total tips are: ', format(ftTotalTips,'.2f'))
那么应该正常工作吗?它对我来说并不适合。
我尝试了一些类似的例子,但没有工作,所以如果有人想为我提供我的问题的答案,那就太棒了,谢谢:)
答案 0 :(得分:0)
试试这个代码段:
def is_float(s):
try:
float(s)
return True
except ValueError:
return False
def get_nums(infile):
with open(infile, 'r') as f:
return [float (x) for x in f.read().splitlines() if is_float(x)]
def main():
nums = get_nums('numdata.txt')
if nums:
total = sum(nums)
avg = total / len(nums)
print('The total: ', total)
print('The average: ', avg)
else:
print('No numbers found in the textfile')
if __name__ == '__main__':
main()
希望它有所帮助!
答案 1 :(得分:0)
这是一个帮助您入门的基本示例。您可以使用file.readlines()读取文件中的所有行,而不是硬编码将从文件中读取多少个数字,这些行返回一个列表,列表中包含length方法:
import sys
def main ():
nums = []
with open('numdata.txt', 'r') as data:
for d in data.readlines():
try:
nums.append(int(d.strip('\n')))
except IOError:
print("got IOError")
sys.exit()
except ValueError:
print("got ValueError")
sys.exit()
total = sum(nums)
average = total/len(nums)
print('the total: ', total)
print('the average: ', average)
main()
exception handling可能需要更详细,特别是如果文件中的数字最终是float
之类的各种数据类型,但是对于示例中的数字int()
会工作的。
答案 2 :(得分:0)
我不知道你的文件是怎么样的,但如果你的数字用新行分隔(\ n)那么你可以用这个
with open("numdata.txt") as t:
print sum(map(int, filter(None, t.read().split("\n"))))
总和 - 总结清单
map - 将数字从字符串更改为int
filter - 取出任何空字符串(我得到了很多)