Написание файлов Python Я думаю, у меня есть проблема с остальными: количество - PullRequest
0 голосов
/ 27 ноября 2018

Напишите функцию с именем «internet_histogram», которая не принимает параметров и не возвращает значение.В среде тестирования будет файл с именем «survey.csv», содержащий результаты опроса, как описано выше (этот файл имеет строку заголовка, которая должна быть учтена вашим кодом).Напишите новый файл с именем «histogram.csv», содержащий 2 столбца, представляющих «internet_use ,quency», и без строки заголовка, которая будет содержать гистограмму результатов респондентов в возрасте от 28 до 29 лет, включая возраст конечной точки.В вашем файле будет ровно 6 строк со значениями internet_use 1-5, соответствующими результатам intfreq, и 6 для респондентов, ответивших 2 на eminuse.Прочитайте файл результатов опроса и проследите, сколько респондентов в этом возрастном диапазоне ответили с каждым из этих 6 вариантов, и запишите эти значения в свой файл «histogram.csv» в порядке internet_use, начиная с 1. Пример histogram.csv: 1,5 2, 7 3,0 4,1 5,2 6,4

мой код:

import csv
def internet_histogram():
    count_6 = 0
    count_5 = 0
    count_4 = 0
    count_3 = 0
    count_2 = 0
    count_1 = 0
    with open("survey.csv",'r') as f:
        reader = csv.reader(f)
        with open("histogram.csv", 'w') as g:
            writer = csv.writer(g)
            next(reader)
            for line in reader:
                if int(line[3]) >= 28 and int(line[3]) <= 29:
                    if line[2] != '':
                        if int(line[2]) == 1:
                            count_1 += 1
                        if int(line[2]) == 2:
                            count_2 += 1
                        if int(line[2]) == 3:
                            count_3 += 1
                        if int(line[2]) == 4:
                            count_4 += 1
                        if int(line[2]) == 5:
                            count_5 += 1
            else:
                count_6 = count_6 + 1
                arr = [[1, count_1], [2, count_2], [3, count_3], [4, count_4], [5, count_5], [6, count_6]]
                for i in arr:
                    writer.writerow(i)

вывод: писал: "1,26 2,29 3,2 4,3 5, 1 6,1 "Ожидается:" 1,26 2,29 3,2 4,3 5,1 6,2 "

Я думаю, что это проблема с оператором else, но я не совсем уверен, любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 27 ноября 2018

Как написано сейчас, вы всегда получите счет 1 для столбца 6.
Вы должны сделать отступ в else, чтобы считать этот случай вместе с другими, но используя else будет относиться только к последнему if, поэтому будет подсчитывать все случаи, для которых int(line[2]) != 5, что, вероятно, не то, что вы пытаетесь сделать.
Для лучшей ясности Python-дзен я бы использовалвместо else:

if int(line[2]) not in [1, 2, 3, 4, 5]:
    count_6 += 1

Это вам подходит?
Удачи!

...