【问题标题】:Code Not Working Properly - Trying To Create A Simple Graph代码无法正常工作 - 尝试创建一个简单的图表
【发布时间】:2020-09-11 01:02:41
【问题描述】:

我正在尝试创建一个简单的程序,然后将我输入的与每日 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]))

【问题讨论】:

    标签: python python-3.x graphing


    【解决方案1】:

    每次运行您的脚本时,我都懒得输入所有数据,因此我自动化了该部分以使其开发和测试更容易。同样,我认为最简单的做法是使用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:**
    

    【讨论】:

    • 虽然代码确实有效,但它不会像现在那样对日期进行排序,有时,如果这些日期没有案例,则不会显示日期。有办法克服吗?
    • 我修改了答案以按日期对数据进行排序。它打印没有大小写的日期(如示例输出所示),但前提是输入了指示该条目的条目。如果你想为没有条目的日期打印一些东西,你将需要做其他事情。
    • 我相信代码现在可以令人满意地回答您的问题和后续评论......请接受它。见How does accepting an answer work?
    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多