美股熔断历史上只发生过4次,上上次熔断和上一次熔断,还要追溯到2020年3月9日和2020年3月13日,那两天我的记忆很深刻,那感觉,仿佛就在几天前。
话又说回来了,特朗普可是说过狠话的:
这是在2015年竞选期间他发过的一条推特:“如果有一天道琼斯指数单日狂跌超过1000点,那当时的总统就应该被装进加农炮里,以极快的速度被射向太阳。不能找任何借口!”
嘻嘻,见过骗吃骗喝的,还第一次见骗太空游的。而且还骗了3次,这招高明。 不过,各大媒体很快辟谣,推特实际上是网友的p图,特朗普本人可没有立过这样的flag。
不过这真的是一个有趣的话题,今天我们就来用Python模拟一下,制作一个太空小游戏。
1.准备
开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。
Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。
当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。
输入以下命令安装我们所需要的依赖模块:
pip install freegames pip install turtle
看到 Successfully installed xxx 则说明安装成功。你可以在Python实用宝典公众号后台回复:加农炮的特朗普 获得本文完整数据和代码。
2.编写代码
原理很简单,就是用到了张特朗普的漫画图和freegames模块,以及turtle画图模块。turtle画图模块我们以前也写过不少文章,大家不了解可以看看:
1.Python turtle 画雪花
2.Python turtle 深入理解递归
2.1 模块加载与设定图像
首先,引入turtle模块,和freegames模块,我们这一次实验需要用到freegames模块里的向量vector(用于表示坐标)。
import turtle from random import randrange from freegames import vector # 设定screen screen = turtle.Screen() screen.setup(420, 420, 370, 0) # 加载trump图,并设为默认turtle trump = '3.gif' screen.addshape(trump) turtle.shape(trump)
2.2 准备画图
在开始画图之前,由于需要用特朗普头像作为移动点,我们需要隐藏原有的turtle对象,并设置不显示tracer,即特朗普移动的时候不画线。
最后设定当用户点击画布的时候,执行tap函数。
turtle.hideturtle() turtle.up() turtle.tracer(False) turtle.onscreenclick(tap)
tap函数如下,即设定球体的位置和初始速度。
def tap(x, y): """ 回应屏幕点击 :param x: x轴位置 :param y: y轴位置 """ if not inside(ball): ball.x = -199 ball.y = -199 speed.x = (x + 200) / 25 speed.y = (y + 200) / 25
2.3 开始画图
这一部分的核心是move函数,不过在说道move函数前,我们要重点讲一下如何将原有端点换成特朗普的头像,那就是draw函数的功能:
def draw(): """ 绘画出太阳和trump """ turtle.hideturtle() turtle.clear() for target in targets: turtle.goto(target.x, target.y) turtle.dot(20, 'red') if inside(ball): turtle.showturtle() turtle.goto(ball.x, ball.y) turtle.update()
还记得我们在一开始就将特朗普的头像设定为turtle的shape了吗?然后在move函数运行之前,又将turtle的点隐藏了起来,其实这个时候隐藏的就是特朗普的头像。而在开始移动的时候,我们仅需要将turtle重新show回来即可。因此核心语句便是:
turtle.showturtle() turtle.goto(ball.x, ball.y)
这两句控制了头像的移动。
接下来看看move函数主体:
def move(): """ 移动太阳和trump :return: """ # 生成"太阳"球体 if randrange(40) == 0: y = randrange(-150, 150) target = vector(200, y) targets.append(target) # 移动太阳 for target in targets: target.x -= 0.5 # 如果Trump在屏幕内,减速并移动 if inside(ball): speed.y -= 0.35 ball.move(speed) # 重新渲染"太阳"位置 dupe = targets.copy() targets.clear() # 和Trump距离太近,则消去球体 for target in dupe: if abs(target - ball) > 13: targets.append(target) # 渲染画布 draw() # 没有目标了则终止游戏 for target in targets: if not inside(target): return # 每隔50毫秒递归调用本函数 turtle.ontimer(move, 50)
其实注释写的挺清楚的,但是这里我们还是详细解释一下:
1.首先需要生成“太阳”球体,这里用到了vector,是一个用于生成坐标的函数,y是随机产生的,所以球体初始位置都在最右边(200, y)。
2.平移所有的太阳,包括新增的。
3.如果屏幕内存在Trump头像,令其移动。
4.重新渲染太阳位置,用新坐标代替,若和Trump距离过近,则消去该球体。
5.渲染所有的球体和Trump的新位置。
6.如果没有球体了,则终止游戏,否则每50毫秒重新调用本函数。
基于这个逻辑大家也可以写一个属于自己的游戏哦。
3.玩笑终归玩笑
当然,这只是个游戏,Trump其实没说过加农炮送上太阳的那句话,不过近期美股的形式确实令人担忧。即使在美联储将利息降为0、大放水7000亿美元的情况下,依然无法挽回局势,不容乐观。
金融市场雪崩在劫难逃,站在金融周期的角度看,十年一次的洗盘即将到来,普通人如何保护好自己?那当然就是学习更多的本领啦!欢迎关注下方的Python实用宝典,优质的Python教程将源源不断奉出。
我们的文章到此就结束啦,如果你喜欢我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!
Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典
评论(0)