如何解决多次设置相同的变量不起作用[已解决]
编辑:已解决。谢谢您的宝贵时间!
最近,我一直在研究python程序,以返回特定日期的案件数。你们能帮我吗?预期的行为是在输入日期时返回正确的活动案例数,但是它什么也不返回。作为python的新手,我不知道代码的哪一部分导致了此问题。我的代码如下:
import requests as r
import json
from datetime import datetime
#Code to return the day of the year of the first case in South Africa
data=json.loads(r.get('https://api.covid19api.com/country/south-africa?from=2020-03-01T00:00:00Z&to=2020-04-01T00:00:00Z').text)
data=data[20]
data=data['Date']
data=datetime.strptime(str(data),'%Y-%m-%dT%H:%M:%SZ').timetuple().tm_yday
print(data)
#This function is SUPPOSED to return the number of cases for the inputted day of the year. The the country input so far does nothing. On day 81 of 2020,there was the first case in South Africa. Therefore this function should at least retun 1.
def cases(day,country):
##Load the data from the API,this should encompass the whole year.
data=json.loads(r.get('https://api.covid19api.com/country/south-africa?from=2020-01-01T00:00:00Z&to=2020-12-01T00:00:00Z').text)
#Set some initial stuff.
done=False
i = 1
cases=0
while done == False:
data=data[i]
data=data['Date']
#Get day of the year of the current case from the API.
current = datetime.strptime(str(data),'%Y-%m-%dT%H:%M:%SZ').timetuple().tm_yday
#Since the API orders cases earliest to latest this checks and increments the cases variable until it is no longer the current day.
if current == day:
cases += 1
else:
done= True
i+=1
return (cases)
print(cases(81,'south-africa'))
#2020-03-21T00:00:00Z
再现此问题的最短代码似乎是这样的:
def cases(day,country):
data=json.loads(r.get('https://api.covid19api.com/country/south-africa?from=2020-01-01T00:00:00Z&to=2020-12-01T00:00:00Z').text)
done=False
i = 1
cases=0
while done == False:
data=data[i]
data=data['Date']
current = datetime.strptime(str(data),'%Y-%m-%dT%H:%M:%SZ').timetuple().tm_yday
if current == day:
cases += 1
else:
done= True
i+=1
return (cases)
编辑,似乎正确的代码是:
def cases(day,this should encompass the whole year.
data=json.loads(r.get('https://api.covid19api.com/country/south-africa?from=2020-01-01T00:00:00Z&to=2020-12-01T00:00:00Z').text)
#Set some initial stuff.
cases = 0
for item in data:
date = item['Date']
#Get day of the year of the current case from the API.
current = datetime.strptime(str(date),'%Y-%m-%dT%H:%M:%SZ').timetuple().tm_yday
#Since the API orders cases earliest to latest this checks and increments the cases variable until it is no longer the current day.
if current == day:
return item['Confirmed']
return 0
感谢您的帮助!
解决方法
重新分配data
将阻止此代码工作,因为再次启动while
循环并再次运行data = data[i]
时,data
不再包含您所有的结果是从API获取的,但现在仅包含一个字符串,其中包含您处理的最后一天的数据。
请勿在同一上下文中重新分配变量名称。
def cases(day,country):
##Load the data from the API,this should encompass the whole year.
data=json.loads(r.get('https://api.covid19api.com/country/south-africa?from=2020-01-01T00:00:00Z&to=2020-12-01T00:00:00Z').text)
#Set some initial stuff.
cases = 0
for item in data:
date = item['Date']
#Get day of the year of the current case from the API.
current = datetime.strptime(str(date),'%Y-%m-%dT%H:%M:%SZ').timetuple().tm_yday
#Since the API orders cases earliest to latest this checks and increments the cases variable until it is no longer the current day.
if current == day:
return item['Confirmed']
return 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。