设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 11136|回复: 1
打印 上一主题 下一主题

【天气查询】Python3.5实施代码及注意事项

[复制链接]

1

主题

0

好友

25

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2017-12-21 20:26:16 |只看该作者 |倒序浏览
看到基础课件“天气查询”章节,我个人用的版本是3.5。个人小白一枚(真的很白),抛砖引玉。先上代码部分:

# -*- coding: utf-8 -*-

import urllib.request
import json
from city import city

cityname=input('你想查哪个城市的天气?')
citycode=city.get(cityname)
#print(citycode)
if citycode:
    try:
        url=('http://www.weather.com.cn/data/cityinfo/%s.html'%citycode)
        content=urllib.request.urlopen(url).read()
        #print(content)
        content1=content.decode('utf-8')
        #print(content1)
        data=json.loads(content1)
        print(data)
        result=data['weatherinfo']
        str_temp=('%s\n%s - %s')%(result['weather'],result['temp1'],result['temp2'])
        print(str_temp)
    except:
        print('查询失败')
else:
    print('没有找到该城市')

这里面有几个需要注意的地方:

1、city.py 需要进行转码。老师的文件我也没看懂是什么编码的,反正开始的时候程序老是报“utf-8”不能解码。我用的是notepad++转换为utf-8.
2、Python3.0以后的urllib2模块已经合并,开始我也不知道该用什么。问度娘,还真有。找到urllib.request,看了几个网上的例子大体知道该怎么写了。
3、继续出错,来到“content=urllib.request.urlopen(url).read()”。每次程序运行都会告诉你,json.loads(content1)的参数不能是byte类型。窝草,什么鬼?赶紧打印输出一下

你想查哪个城市的天气?北京
101010100
b'{"weatherinfo":{"city":"\xe5\x8c\x97\xe4\xba\xac","cityid":"101010100","temp1":"-2\xe2\x84\x83","temp2":"16\xe2\x84\x83","weather":"\xe6\x99\xb4","img1":"n0.gif","img2":"d0.gif","ptime":"18:00"}}'


中间那些XXOO什么鬼?怎么跟老师贴图不一样?既然不能是byte类型,强制转换一下。str()套上去,结果还是。。。
是不是那些XXOO和老师贴图那样变成汉字就行了?我知道"\xe5\x8c\x97\xe4\xba\xac"肯定就是“北京”。但是需要转码,继续度娘,于是就有了content.decode('utf-8')。

跳过以上三个坑,恭喜终于在Python3.5上实现代码!
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

沙发
发表于 2017-12-21 22:12:14 |只看该作者
很棒诶 基本由python2转到python3的问题都被你自行解决了 赞
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-23 13:21 , Processed in 0.021703 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部