【发布时间】:2017-10-06 22:14:18
【问题描述】:
我们得到一个包含 3 列的 .txt 文件;姓名、身高和体重。我们需要为 BMI 添加第 4 列(来自给定公式),并找到每个类别的最小值、最大值和平均值。
文本来自本地文件“data.txt”。这是文本(在代码块中制作以保持格式化以便打印):
Name Height(m) Weight(kg)
Joe 1.82 72.57
Mary 1.60 63.50
Dion 1.90 90.71
Kayla 1.72 66.31
Jose 1.78 70.23
Sofia 1.63 65.12
Erik 1.98 92.21
Sara 1.57 65.77
这是我到目前为止的代码,除了 BMI 列之外,它显示它大部分是完整的:
in_file = open("data.txt","r")
th=0 #total height
tw=0 #total weight
tbmi=0 #total bmi
min_h=3.00
min_w=100.00
min_bmi=40
max_h=0
max_w=0
max_bmi=0
for line_str in in_file:
print(line_str,end="")
if 'Heigh' not in line_str:
a = float((line_str[12:16]))
b = float((line_str[23:27]))
bmi=(b/(a**2))
tbmi+=bmi
th += a
tw +=b
if min_h > a:
min_h = a
if min_w > b:
min_w = b
if min_bmi > bmi:
min_bmi = bmi
if max_h < a:
max_h =a
if max_w < b:
max_w =b
if max_bmi < bmi:
max_bmi = bmi
print("")
print('{:<12s}{:<12.2f}{:<12.2f}{:<12.2f}'.format("Average", th/8, tw/8, tbmi))
print('{:<12s}{:<12.2f}{:<12.2f}{:<12.2f}'.format("Max", max_h, max_w, max_bmi))
print('{:<12s}{:<12.2f}{:<12.2f}{:<12.2f}'.format("Min", min_h, min_w, min_bmi))
我需要做的就是有一个带有标题 BMI 的列,并将所有 BMI 值添加到每个 line_str 中,但无法进行任何工作,例如使用 readline() 忽略第一行,并且我会制作自己的标题。由于某种原因,我也无法在“for line_str in in_file:”行上方打印独立标题;在这种情况下,我只是要制作自己的标题,然后使用我需要的格式逐行打印出我需要的结果。似乎效率低下……
编辑:Alessio 的回答成功了!没想到!
【问题讨论】:
-
这可能是因为您以读取模式打开了文件。 "in_file = open("data.txt","r")"
-
“什么都做不了”是什么意思?当然它会打印一些东西或给你一个回溯。
-
抱歉...是的,它打印我需要的值,例如平均值等。什么不起作用,正在尝试 readline() 跳过第一行文本并制作我自己的标题,或在文本文件上方打印一个新行(然后我打算用正确的格式逐个字符串打印我需要的每个值)但它不会让我在“for line_str in in_file”上方打印出于某种原因
-
您不能使用 readline 丢弃第一行,因为
for line_str in in_file总是从头开始。与任何 for 循环一样,它是一个新的迭代:for i in range(10)始终以 i=0 开头,即使 i 之前被分配为 1。