【青少年编程】黄羽恒:天气预报

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。

微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档)。

编程题

“天气预报”是来自「青少年编程竞赛交流群」中 「黄羽恒」 小朋友的作品。

小朋友们出去郊游之前,最重要的就是查看郊游目的地的天气情况。

首先,准备一组图像包括背景图(背景2.jpg)、晴天图(qing.jpg)、阴天图(yin.jpg)、下雪图(xue.jpg)等等,以及播报天气情况时的背景音乐(Plant vs Zombie.wav)如下图所示,

其次,利用爬虫技术,从下列网址爬取指定城市的天气情况。

https://www.tianqiapi.com/api?version=v6&appid=87842446&appsecret=PvYxBu6V&city='北京'

再次,根据天气情况选择对应的图片进行显示。

最后,给定城市(比如上海、北京等)之后,程序就会播报该城市的天气情况。

1. 思路分析

写一个weather_helper的类。

  • get_weather(city):获取指定城市city的天气情况;
  • play_sound(name, loop=-1, volume=0.5):指定播放声音的文件name以及重复的次数loop和音量volume来播放声音的函数;
  • get_font(size):指定字体大小(size)来获取字体的函数;
  • get_img(name, size):指定文件名(name)和大小(size)来获取图片的函数;

2. 程序代码

import pygame
import sys
import requests
import random

class weather_helper():
    def __init__(self):
        self.weather_info = self.get_weather('北京')
        print(self.weather_info)
        pygame.init()
        self.screen = pygame.display.set_mode([600, 290])
        pygame.display.set_caption('天气')
        self.clock = pygame.time.Clock()
        self.play_sound('天气/Plants vs Zombie.wav')
        self.do_pygame_process()

def do_pygame_process(self):
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()

# 在窗口上绘制图片
            self.screen.blit(self.get_img('天气/背景2.jpg', (620, 300)), self.get_random((-10, -10), 2))

wea_img = self.get_img('天气/' + self.weather_info['wea_img'] + '.jpg', (256, 256))
            self.screen.blit(wea_img, self.get_random((20, 10), 2))

f1_r = self.get_font(80).render(self.weather_info['wea'], True, (0, 0, 0))
            self.screen.blit(f1_r, (250, 24))

f2_r = self.get_font(24).render(
                self.weather_info['city'] + ' ' + self.weather_info['date'] + ' ' + self.weather_info['week'], True,
                (0, 0, 0))
            self.screen.blit(f2_r, (300, 120))

f3_r = self.get_font(24).render(
                '湿度' + self.weather_info['tem2'] + '~' + self.weather_info['tem1'] + '   空气质量' + self.weather_info[
                    'air_level'], True, (0, 0, 0))
            self.screen.blit(f3_r, (300, 160))

text = self.weather_info['air_tips']
            x = 300
            y = 200
            line_warp = 0
            for words in text:
                f3_r = self.get_font(18).render(words, True, (0, 0, 0))
                self.screen.blit(f3_r, (x, y))
                x += 18
                line_warp += 1
                if line_warp % 15 == 0:
                    y += 18
                    x = 300

pygame.display.update()
            self.clock.tick(60)

def get_font(self, size):
        return pygame.font.SysFont('SimHei', size)

def get_img(self, name, size):
        img = pygame.image.load(name)
        return pygame.transform.scale(img, size)

def get_weather(self, city):
        url = 'https://www.tianqiapi.com/api?version=v6&appid=87842446&appsecret=PvYxBu6V&city=' + city
        with requests.get(url) as response:
            json = response.content.decode()
            return eval(json)

def get_random(self, scope, step):
        return random.randint(scope[0] - step, scope[0] + step), random.randint(scope[1] - step, scope[1] + step)

def play_sound(self, name, loop=-1, volume=0.5):
        pygame.mixer.init()
        sound = pygame.mixer.Sound(name)  # 声音
        sound.set_volume(volume)
        sound.play(loop)

weather_helper()

3. 结果展示


基础知识:

一级编程题:

二级编程题:

三级编程题:

小朋友投稿:

Scratch:

Python:

群内答疑:

Scratch:

Python:


(0)

相关推荐

  • 童年记忆第三弹!!!用python写一个天天酷跑

    写出来的效果图就是这样了 下面就更新一下全部的代码吧 还是老样子先定义 import pygame,sysimport random 写一下游戏配置 width = 1200 #窗口宽度height ...

  • 如何训练AI玩飞机大战游戏

    虽然没有谷歌强大的集群和DeepMind变态的算法的团队,但基于深度强化学习(Deep Q Network DQN )的自制小游戏AI效果同样很赞.先上效果图: 下面分四个部分,具体给大家介绍. /1 ...

  • 用Python写一个植物大战僵尸!简直一模一样

    引入需要的模块 import pygameimport random 配置图片地址 IMAGE_PATH = 'imgs/' 设置页面宽高 scrrr_width = 800scrrr_height ...

  • 用python写一个简单的贪吃蛇游戏

    不知道有多少同学跟我一样,最初接触编程的动机就是为了自己做个游戏玩? Python 虽然并不是一个"为游戏而生"的语言,但也有着自己的游戏引擎.最常用的就是 pygame.另外还有 ...

  • Python游戏编程(Pygame)

    安装Pygame pip install pygame 1 C:\Users> pip install pygame Collecting pygame Downloading https:// ...

  • 【青少年编程】黄羽恒:加减乘除法小测试

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...

  • 【青少年编程】黄羽恒:翻译小工具 -- 利用有道翻译

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...

  • 【青少年编程】黄羽恒:Python

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...

  • 【青少年编程】黄羽恒:平行空间

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...

  • 【青少年编程】黄羽恒:漫天飞雪

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...

  • 【江西】黄锦恒《“交给我吧”读后感》指导老师:孙寅

    <交给我吧>读后感 文清外国语学校一年级 黄锦恒 今天,我读了一本绘本,名字是<交给我吧>.里面的主人公叫小绘,是一个在家里倍受宠爱的小公主.一天放学回家的路上,小绘听到两名男 ...

  • 【青少年编程】【Scratch】10 画笔模块

    10 画笔模块 有关于画笔模块,需要掌握以下两个方面的内容: 能够设置画笔的属性:颜色.粗细.亮度/饱和度/透明度 能够使用画笔绘制各种图案:抬笔.落笔.擦除 1. 使用者可以设置各种画笔属性. 设置 ...

  • 【青少年编程】小猫寻宝

    小猫寻宝 "小猫寻宝"是来自「青少年编程竞赛交流群」中 「马雷越」 小朋友的作品. 制作一款小游戏,使用上.下.左.右键控制角色小猫躲避吸血蝙蝠,到达钥匙位置获得胜利.按要求完成程 ...

  • 【青少年编程】Python的缩进规则

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...