У меня есть задача, которая требует, чтобы я создал программу на 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)
3
Thy 17 Дек 2015 в 18:49

5 ответов

Лучший ответ

Использование:

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

Это один простой способ сделать это, и, надеюсь, легко понять.

0
janrn 17 Дек 2015 в 16:10

Вы можете использовать встроенный в Python csv модуль, чтобы разбить каждую строку в файле на список столбцов следующим образом:

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
3
Martin Evans 17 Дек 2015 в 16:11

Используя библиотеку 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
4
Stefan 17 Дек 2015 в 16:21

Ответ на самом деле есть в названии вашего вопроса: используйте стандартный csv модуль lib проанализировать ваш файл

1
bruno desthuilliers 17 Дек 2015 в 16:06
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
0
xiº 17 Дек 2015 в 16:07