我有一项任务要求我在python中创建一个程序,该程序读取一个文本文件,其中包含有关人员(姓名,体重和身高)的信息。
然后我需要该程序要求用户输入一个名称,然后在文本文件中查找该名称,并打印出包含该名称和该人的身高和体重的行。
然后程序必须计算出人的平均体重和平均身高。
文本文件是:
James,73,1.82,M
Peter,78,1.80,M
Jay,90,1.90,M
Beth,65,1.53.F
Mags,66,1.50,F
Joy,62,1.34,F
到目前为止,我有这个代码使用用户输入的名称打印出行,但我不知道分配高度和权重:
search = input("Who's information would you like to find?")
with open("HeightAndWeight.txt", "r") as f:
for line in f:
if search in line:
print(line)
答案 0 :(得分:4)
按照建议使用pandas
库,您可以执行以下操作:
import pandas as pd
df = pd.read_csv('people.txt', header=None, index_col=0)
df.columns = ['weight', 'height', 'sex']
print(df)
weight height sex
0
James 73 1.82 M
Peter 78 1.80 M
Jay 90 1.90 M
Beth 65 1.53 F
Mags 66 1.50 F
Joy 62 1.34 F
print(df.mean())
weight 72.333333
height 1.648333
答案 1 :(得分:3)
您可以使用内置csv
模块的Python将文件中的每一行拆分为列列表,如下所示:
import csv
with open('HeightAndWeight.txt', 'rb') as f_input:
csv_input = csv.reader(f_input)
total_weight = 0
total_height = 0
for index, row in enumerate(csv_input, start=1):
total_weight += float(row[1])
total_height += float(row[2])
print "Average weight: {:.2f}".format(total_weight / index)
print "Average height: {:.2f}".format(total_height / index)
这将显示以下输出:
Average weight: 72.33 Average height: 1.65
答案 2 :(得分:1)
答案实际上在您的问题标题中:使用standard lib's csv
module来解析您的文件
答案 3 :(得分:0)
search = input("Who's information would you like to find?")
heights = []
weights = []
with open("HeightAndWeight.txt", "r") as f:
for line in f:
if search in line:
print(line)
heights.append(int(line.split(',')[2]))
weights.append(int(line.split(',')[1]))
# your calculation stuff
答案 4 :(得分:0)
使用:
splitted_line = line.split(',', 4)
使用逗号,
作为分隔符,将刚刚找到的行拆分为四个部分。然后,您可以使用splitted_line[0]
获取第一部分(名称),使用splitted_line[1]
获取第二部分(年龄),依此类推。所以,要打印出人名,身高和体重:
print('The person %s is %s years old and %s meters tall.' % (splitted_line[0], splitted_line[1], splitted_line[2]))
要获得身高和年龄的平均值,您需要知道文件中有多少条目,然后将年龄和身高加起来除以条目数/人数。整件事情看起来像是:
search = input("Who's information would you like to find?")
total = 0
age = 0
height = 0
with open("HeightAndWeight.txt", "r") as f:
for line in f:
total += 1
splitted_line = line.split(',', 4)
age += int(splitted_line[1])
height += int(splitted_line[2])
if search in line:
print('The person %s is %s years old and %s meters tall.' % (splitted_line[0], splitted_line[1], splitted_line[2]))
average_age = age / total
average_height = height / total
这是一种直截了当的方式,也很容易理解。