如何计算请求的某些结果



我正在攻读数据科学硕士学位,关于Python,我有以下声明:

按以下URL拨打100次电话,并计算有多少电话有三个或三个以下的参与者。

API是:http://www.boredapi.com/api/activity/

在我理解了这句话之后,我建立了下面的函数:

import requests
total_calls = 100
call_0 = 0
def calls(total_calls, call_0):
while total_calls > call_0:
activity = ('http://www.boredapi.com/api/activity/')
call_n = requests.get(activity)
print(call_n.text)
call_0 += 1
if total_calls - call_0 < 0:
print(call_0)
elif total_calls - call_0 == 0:
break
return output_call
output_call = calls(total_calls, call_0)
output_call

我被卡住了,因为我不知道该怎么数";output_call";具有<=3名参与者。

例如,如果我运行9次而不是100次,就会得到一个结果:

{"activity":"Hold a yard sale","type":"social","participants":1,"price":0,"link":"","key":"1432113","accessibility":0.1}
{"activity":"Meditate for five minutes","type":"relaxation","participants":1,"price":0,"link":"","key":"3699502","accessibility":0.05}
{"activity":"Draw and color a Mandala","type":"relaxation","participants":1,"price":0.05,"link":"https://en.wikipedia.org/wiki/Mandala","key":"4614092","accessibility":0.1}
{"activity":"Go to a local thrift shop","type":"recreational","participants":1,"price":0.1,"link":"","key":"8503795","accessibility":0.2}
{"activity":"Organize your basement","type":"busywork","participants":1,"price":0,"link":"","key":"8203595","accessibility":0.9}
{"activity":"Back up important computer files","type":"busywork","participants":1,"price":0.2,"link":"","key":"9081214","accessibility":0.2}
{"activity":"Fix something that's broken in your house","type":"diy","participants":1,"price":0.1,"link":"","key":"6925988","accessibility":0.3}
{"activity":"Clean out your closet and donate the clothes you've outgrown","type":"charity","participants":1,"price":0,"link":"","key":"9026787","accessibility":0.1}
{"activity":"Go to the gym","type":"recreational","participants":1,"price":0.2,"link":"","key":"4387026","accessibility":0.1}
{}

以下对您来说应该很好:

import requests, json
total_calls = 100
call_0 = 0

def calls(total_calls, call_0):
less_than_3_count = 0
while total_calls > call_0:
# Check break condition in the beginning 
if total_calls - call_0 == 0:
break

activity = 'http://www.boredapi.com/api/activity/'
response = requests.get(activity)
call_0 += 1
print(call_0, response.text)
json_object = json.loads(response.text)
if json_object['participants'] <= 3:
less_than_3_count += 1

return less_than_3_count

output_call = calls(total_calls, call_0)
output_call

您可以这样进行。

设计您的calls()函数以返回您感兴趣的呼叫数量。

然后将CCD_ 2初始化为0,并且当参与者的数量lte3。

range()是一个内置的Python函数,您经常使用它来循环n次。

根据请求结果,您最好请求JSON而不是文本,这将为您提供一个Python字典(相当于JSON对应字典)。

使用参与者密钥访问参与者的值数量。

activity = "http://www.boredapi.com/api/activity/"
total_calls = 100
def calls(total_calls: int) -> int:
counter = 0
for _ in range(total_calls):
r = requests.get(activity)
if r.ok:
if r.json()["participants"] <= 3:
counter += 1
return counter
calls(total_calls)
import requests

def calls(total_calls):
output_calls = 0
activity = 'http://www.boredapi.com/api/activity/'
while total_calls > 0:
call_n = requests.get(activity).json()
if call_n['participants'] <= 3:
output_calls += 1
total_calls -= 1
return output_calls
output_call = calls(total_calls=100)  # change the total call value here
print(output_call)

假设您将处理请求的异常。

这是简化的Python版本;

import requests
from pprint import pp

def calls(count=100):
bigger_then_3 = 0
bigger_then_3_calls = []
for cal in range(count):
resp = requests.get("http://www.boredapi.com/api/activity/").json()
if resp["participants"] <= 3:
bigger_then_3_calls.append(resp)
bigger_then_3 += 1
return bigger_then_3, bigger_then_3_calls

if __name__ == '__main__':
bigger_count, bigger_calls = calls(10)
print(f"Bigger count: {bigger_count}")
pp(bigger_calls)

最新更新