python制作属于自己的天气预报5

将绘制的图形高温、低温、以及日期加入到了图中

 

#测试用压缩的数据
import re
from typing import List
from urllib.request import Request, urlopen
import gzip,zlib
import json,tkinter,turtle

#网站获取数据Api
url = 'http://t.weather.sojson.com/api/weather/city/101250101'
#包装头部
firefox_headers = {'User-Agent': "	Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0 " , "Accept-Encoding" :"gzip, deflate"}

#构建请求
request = Request( url, headers=firefox_headers )
html = urlopen( request )



#获取数据以utf-8的编码方式
#data2 = html.read().decode('utf-8')
data2 = zlib.decompress(html.read(), 16+zlib.MAX_WBITS).decode('utf-8')
data1=str(data2)
# 将json数据转换为dict数据
weather_dict=json.loads(data2)
#data3 =dict(html.read().decode('utf-8'))
#data3 =dict (str(data2))

#print(weather_dict)
forecast = weather_dict.get('data').get('forecast')
'''
print('城市:', weather_dict.get('cityInfo').get('parent')+' '+weather_dict.get('cityInfo').get('city'))
print('更新时间:', weather_dict.get('cityInfo').get('updateTime'))
print('温度:', weather_dict.get('data').get('wendu') + '℃ ')
print('空气质量:', weather_dict.get('data').get('quality'))
print('风向:', forecast[0].get('fx'))
print('风向:', weather_dict.get('data').get('forecast')[0].get('fx'))
'''


t_d = [str(str([weather_dict.get('data').get('yesterday').get('ymd')])[7:-2])]
t_h = [int(str([weather_dict.get('data').get('yesterday').get('high')])[5:-3])]
#t_t  = (str([weather_dict.get('data').get('yesterday').get('low')])[0:])
t_l = [int(str([weather_dict.get('data').get('yesterday').get('low')])[5:-3])]



for i in range(1,16,1):
    t_d.insert(i, str(str([forecast[i - 1].get('ymd')])[7:-2]))
    t_h.insert(i, int(str([forecast[i - 1].get('high')])[5:-3]))
    t_l.insert(i, int(str([forecast[i - 1].get('low')])[5:-3]))
#    t_l.insert(i, forecast[i - 1].get(str([weather_dict.get('data').get('yesterday').get('low' )])[3:-3]))
#    t_l.insert(i, forecast[i - 1].get('low'))

#计算半月最高温与最低温的差值与平均值,比以平均值作为0线画图
chazhi=max(t_h)-min(t_l)
pingjun=int(max(t_h)-chazhi/2)

'''
print(t_h)
print(t_l)
print(pingjun)
'''
#预猜测半月最大温差50度

'''
for i in range(0, 16, 1):
#    print(i)
    print(t_d[i]+'\t'+str(t_h[i])+'\t'+str(t_l[i]))
    print('\n')
'''

#海龟制图默认为300*300的方形
#绘制网格线,X轴为日期轴差值为20,Y轴为温度轴差值为6
#turtle.bgcolor('gray')
turtle.speed(0)
turtle.width(1)
turtle.color('gray')
turtle.penup()
#更改起始位置
turtle.goto(300, 300)
for x in range(0,51,1):
#    turtle.goto(-300, 300 - x * 12)
    turtle.color('red')
    turtle.goto(-305, 290 - x * 12)
    turtle.write(pingjun+25-x,align='right',font=('arial',6,'normal'))
    turtle.goto(-300, 300 - x * 12)
    turtle.color('gray')
    turtle.pendown()
    turtle.goto( 300, 300 - x * 12)
    turtle.penup()


for y in range(0,16,1):
#    turtle.goto(-300+y*40, 300)
    turtle.color('red')
    turtle.goto(-310 + y * 40, 300)
    turtle.write(t_d[y],font=('arial',6,'normal'))
    turtle.goto(-300 + y * 40, 300)
    turtle.color('gray')
    turtle.pendown()
    turtle.goto(-300+y*40, -300)
    turtle.penup()


#我以X轴-300为昨日的坐标位,300为15日后的坐标位
#我以Y轴-300为零下50°的坐标,300为正50度的坐标

#高温曲线
turtle.speed(10)
turtle.width(5)
turtle.color('blue')
turtle.penup()
for p in range(0,16,1):
    turtle.goto(-300+40*p, (t_h[p]-pingjun) * 6)
    turtle.pendown()
#低温曲线
turtle.color('LightBlue')
turtle.penup()
for p in range(0,16,1):
    turtle.goto(-300+40*p, (t_l[p]-pingjun) * 6)
    turtle.pendown()






turtle.done()


#os.system('pause')

turtle.mainloop()



 

你可能感兴趣的:(python)