# -*- coding: utf-8 -*- import itertools from functools import reduce minus = [-1] def change(num): minus[0]*= -1 return minus[0]*4/num def pi(N): ' 计算pi的值 ' # step 1: 创建一个奇数序列: 1, 3, 5, 7, 9, ... odd_seq = itertools.count(1,2) # step 2: 取该序列的前N项: 1, 3, 5, 7, 9, ..., 2*N-1. lmt_seq = itertools.takewhile(lambda x:x<=(2*N-1),odd_seq) # step 3: 添加正负符号并用4除: 4/1, -4/3, 4/5, -4/7, 4/9, ... seq = map(change,lmt_seq) # step 4: 求和: return reduce(lambda x,y: x+y,seq) # 测试: print(pi(10)) print(pi(100)) print(pi(1000)) print(pi(10000)) print(pi(100000)) assert 3.04 < pi(10) < 3.05 assert 3.13 < pi(100) < 3.14 assert 3.140 < pi(1000) < 3.141 assert 3.1414 < pi(10000) < 3.1415 print('ok') #看了下评论的代码,其实我更迷惑 #为什么简单的json.loads一下就可以创建一个对象 #返回的json数据应该是python里一个嵌套到底dict类型 #好像是这样的,json.loads默认返回的类型是dict #通过设置参数函数可以定制返回的类型 #让我手足无措的应该是这个嵌套的dict from urllib import request import json def fetch_data(url): with request.urlopen(url) as f: data =f.read() return json.loads(data.decode('utf-8')) # 测试 URL = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20%3D%202151330&format=json' data = fetch_data(URL) print(data) assert data['query']['results']['channel']['location']['city'] == 'Beijing' print('ok')