前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >电视剧里的代码真能运行吗?

电视剧里的代码真能运行吗?

作者头像
囍楽云
发布2022-12-29 12:27:35
2730
发布2022-12-29 12:27:35
举报
文章被收录于专栏:囍楽云博客

  大家好,欢迎来到 的编程教室 !

  前几天,后台老有小伙伴留言“爱心代码”。这不是很早之前发过的内容嘛,怎么最近突然又被人翻出来了?后来才知道,原来是一部有关程序员的青春偶像剧《点燃我,温暖你》在热播,而剧中有一段关于期中考试要用程序画一个爱心的桥段。

  于是出于好奇,就去看了这一集(第5集,不用谢)。这一看不要紧,差点把刚吃的鸡腿给喷出来--槽点实在太多了!

  忍不住做了个欢乐吐槽向的代码解读视频,在某平台上被顶到了20个w的浏览,也算蹭了一波人家电视剧的热度吧……

  看剧学编程:你用程序画爱心是认真的吗?

  下面是图文版,给大家分析下剧中出现的“爱心”代码,并且来复刻一下最后男主完成的酷炫跳动爱心。

  剧中代码赏析

  1. 首先是路人同学的代码:

  虽然剧中说是“C语言期中考试”,但这位同学的代码名叫 draw2.py,一个典型的 Python 文件,再结合截图中的 pen.、pen.setpos 等方法来看,应该是用 turtle 海龟作图库来画爱心。那效果通常是这样的:

   import turtle as t

代码语言:javascript
复制
    t.color('red')
    t.setheading(50)
    t.begin_fill()
    t.circle(-100, 170)
    t.circle(-300, 40)
    t.right(38)
    t.circle(-300, 40)
    t.circle(-100, 170)
    t.end_fill()

  而不是剧中那个命令行下用1组成的不规则的图形。

  2. 然后是课代表向路人同学展示的优秀代码:

  及所谓的效果:

  这确实是C语言代码了,但文件依然是以 .py 为后缀,并且 前面没有加上#,这显然是没法运行的。

  里面的内容是可以画出爱心的,用是这个爱心曲线公式:

  然后遍历一个1517的方阵,计算每个坐标是在曲线内还是曲线外,在内部就输出#或,外部就是-

  用python改写一下是这样的:

   for y in range(9, -6, -1):

代码语言:javascript
复制
        for x in range(-8, 9):
            print('*##*'[(x+10)%4] if (x*x+y*y-25)**3 < 25*x*x*y*y*y else '-', end=' ')

  ​​​​​​效果:

  稍微改一下输出,还能做出前面那个全是1的效果:

   for y in range(9, -6, -1):

代码语言:javascript
复制
        for x in range(-8, 9):
            print('1' if (x*x+y*y-25)**3 < 25*x*x*y*y*y else ' ', end=' ')

  但跟剧中所谓的效果相去甚远。

  3. 最后是主角狂拽酷炫D炸天的跳动爱心:

  代码有两个片段:

  但这两个片段也不C语言,而是C++,且两段并不是同一个程序,用的方法也完全不一样。

  第一段代码跟前面一种思路差不多,只不过没有直接用一条曲线,而是上半部用两个圆形,下半部用两条直线,围出一个爱心。

  改写成 Python 代码:

   size = 10

代码语言:javascript
复制
    for x in range(size):
        for y in range(4*size+1):
            dist1 = ((x-size)**2 + (y-size)**2) ** 0.5
            dist2 = ((x-size)**2 + (y-3*size)**2) ** 0.5
            if dist1 < size + 0.5 or dist2 < size + 0.5:
                print('V', end=' ')
            else:
                print(' ', end=' ')
        print()
    for x in range(1, 2*size):
        for y in range(x):
            print(' ', end=' ')
        for y in range(4*size+1-2*x):
            print('V', end=' ')

  运行效果:

  第二段代码用的是基于极坐标的爱心曲线,是遍历角度来计算点的位置。公式是:

  计算出不同角度对应的点坐标,然后把它们连起来,就是一个爱心。

代码语言:javascript
复制
from math import pi, sin, cos
import matplotlib.pyplot as plt
no_pieces = 100
dt = 2*pi/no_pieces
t = 0
vx = []
vy = []
while t 
[1]: https://xuan.ddwoo.top/index.php/archives/424/                
        本文共 694 个字数,平均阅读时长 ≈ 2分钟
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档