微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

代码无法正常工作-试图创建一个简单的图形

如何解决代码无法正常工作-试图创建一个简单的图形

我正在尝试创建一个简单的程序,然后将我与日常COVID-19病例相关的数据输入制成表格并创建为一个小图形。例如,我的第一个输入(主输入)将是:7 20200401 20200403,它表示我的主输入后输入的数量,以及案例的起始日期。然后,我将输入医院的信息,该医院的病例数以及报告的日期。每天的案例数将以*表示。当我去运行程序时,它仅显示了过去7天输入的最后#个案例是什么。有什么办法可以解决它,并使程序每天正确显示正确数量的案件?

为了帮助您理解,以下是该程序的示例输入和输出

输入:

7 20200401 20200403
HP1 20200401 1
HP2 20200401 1
HP3 20200401 1
HP4 20200402 1
HP5 20200402 1
HP6 20200403 1
HP7 20200403 1

输出

20200401:***
20200402:**
20200403:**

但是,我得到了:

20200401:*
20200402:*
20200403:*

这是我的代码

CoronaCaseNumber = input("")
CoronaList = CoronaCaseNumber.split(" ")
LuckyNumber = CoronaList[0]
Date = CoronaList[1]
Date2 = CoronaList[2]
LuckyNumero = int(LuckyNumber)
DateList = []
CaseNumberList = []
for case in range(LuckyNumero):
    CoronaCaseData = input()
    CoronaList2 = CoronaCaseData.split(" ")
    InfoDate = CoronaList2[1]
    DateList.append(InfoDate)
    CaseNumber = CoronaList2[2]
    CaseNumberList.append(CaseNumber)

EmptySet = []
for i in DateList:
    if i >= Date and i <= Date2:
        if i not in EmptySet:
            EmptySet.append(i)

for i in range(0,len(CaseNumberList)):
    CaseNumberList[i] = int(CaseNumberList[i])

EmptySet.sort()
for i in range(len(EmptySet)):
    print("{}{}{}".format(EmptySet[i],":","*" * CaseNumberList[i]))

解决方法

我太懒惰了,每当我运行脚本时都无法输入所有数据,所以我自动化了这部分以简化开发和测试过程。同样,我认为最简单的方法是使用collections模块的defaultdict类来跟踪日期和日期的总数他们每个人。这就是我的意思:

from collections import defaultdict

#CoronaCaseNumber = input("")
#CoronaList = CoronaCaseNumber.split(" ")
#LuckyNumber = CoronaList[0]
#Date = CoronaList[1]
#Date2 = CoronaList[2]
LuckyNumber,Date,Date2 = "8 20200401 20200404".split(" ")

data = """\
HP4 20200402 1
HP5 20200402 1
HP1 20200401 1
HP2 20200401 1
HP3 20200401 1
HP6 20200403 0
HP6 20200404 1
HP7 20200404 1
""".splitlines()

LuckyNumero = int(LuckyNumber)
DateList = []
CaseNumberList = []
for case in range(LuckyNumero):
    CoronaCaseData = data[case]
    CoronaList2 = CoronaCaseData.split(" ")
    InfoDate = CoronaList2[1]
    DateList.append(InfoDate)
    CaseNumber = CoronaList2[2]
    CaseNumberList.append(CaseNumber)

DailyCases = defaultdict(int)

for i,d in enumerate(DateList):
    if Date <= d <= Date2:  # Valid date?
        DailyCases[d] += int(CaseNumberList[i])

# Print daily cases sorted by date (i.e. the dictionary's keys).
for date in sorted(DailyCases,key=lambda d: int(d)):
    print("{}:{}".format(date,'*' * DailyCases[date]))

输出:

20200401:***
20200402:**
20200403:
20200404:**

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。