编写一个名为“ internet_histogram”的函数,该函数不带任何参数且不返回任何值。测试环境中将有一个名为“ survey.csv”的文件,其中包含如上所述的调查结果(该文件具有一个标题行,您的代码可以对此进行很多处理)。编写一个名为“ histogram.csv”的新文件,该文件包含2列代表“ internet_use,frequency”的列,并且没有标题行,其中将包含28至29岁(包括端点年龄)的响应者结果的直方图。您的文件将有6行,internet_use值为1-5,与intfreq结果相对应,对于回答2为eminuse的响应者为6行。读取调查结果文件并跟踪在这年龄范围内有6个选项分别回答了多少响应者,并将这些计数按照从1开始的internet_use顺序写入“ histogram.csv”文件。 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语句存在问题,但我不太确定,任何帮助将不胜感激。
答案 0 :(得分:0)
现在,1
列的计数总为6
。
您应该缩进else
以便将这种情况与其他情况一起计算,但是使用else
只会引用最后的if
,因此它将计算{{ 1}},这可能不是您要尝试执行的操作。
为了获得最佳的python zen明确性,我将使用以下内容代替int(line[2]) != 5
:
else
对您有用吗?
祝你好运!
答案 1 :(得分:0)
我自己还不太熟悉Python,但是我通过在此处移动一些缩进以及一些其他小的更改来修复了您的程序:
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
elif int(line[2]) == 2:
count_2 += 1
elif int(line[2]) == 3:
count_3 += 1
elif int(line[2]) == 4:
count_4 += 1
elif 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)