【每周一坑】阿姆斯特朗数

这是一个很经典的编程练习题:

如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋数、自幂数)。

407 = 43 + 03 + 73 就是一个阿姆斯特朗数。

写一段代码,输出 1000 以内的所有阿姆斯特朗数。

附加题:输入一个正整数,输出距离它最近的阿姆斯特朗数。

期待各位同学提交解答。

提交代码可以使用 paste.ubuntu.com 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。

往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。


【解答】美队盾牌

turtle 库相关介绍参见:【编程课堂】海龟作图

要注意的是,画图完成后需要调用 turtle.done(),否则程序就直接退出了。

给一份参考解答:

# coding=utf-8
import turtle
import time
import math

def shield():    # 设置背景    turtle.bgcolor('#010101')
   # 设置速度    turtle.speed(10)
   # 依次填充同心圆    fill_circle('#FF0000', 230)    fill_circle('#FFFFFF', 178)    fill_circle('#FF0000', 129)    fill_circle('#0000FF', 75)
   # 完成五角星    draw_five('#FFFFFF', 75)    turtle.done()
   
# 画圆线
def draw_circle(radium):    turtle.home()    turtle.penup()    turtle.setheading(0)    turtle.forward(radium)    turtle.pendown()    turtle.setheading(90)    turtle.circle(radium)    turtle.penup()    turtle.home()

# 填充圆环
def fill_circle(color, r1):    turtle.color(color, color)    turtle.fillcolor()    turtle.begin_fill()    draw_circle(r1)    turtle.end_fill()

# 画并填充五角星
def draw_five(color, radium):    turtle.home()    turtle.penup()    turtle.setheading(90)    turtle.forward(radium)    turtle.setheading(288)    turtle.pendown()    long_side = (math.sin(math.radians(36))*radium)/math.sin(math.radians(126))    turtle.color(color, color)    turtle.fillcolor()    turtle.begin_fill()
   for i in range(10):        turtle.forward(long_side)
       if i % 2 == 0:            turtle.left(72)
       else:            turtle.right(144)    turtle.end_fill()    turtle.penup()

if __name__ == '__main__':    shield()

推荐 @strawhat 同学的答案,思路清晰,程序中各部分功能独立,非常好理解:

http://pastebin.ubuntu.com/25147394/

同时也给出其他两位同学的答案:

@疯琴:

https://github.com/YngwieWang/python_practice/blob/master/AmericanCaptain.py

@xuxiaojiao:

http://pastebin.ubuntu.com/25160891/

(0)

相关推荐

  • 【每周一坑】数路径

    代码方面的问题,欢迎大家在论坛上发帖讨论(有问必回):bbs.crossincode.com 最近有同学表示在找工作面试时遇到了在我们[每周一坑]栏目中做过的题目,于是轻松搞定.所以说嘛,功夫不负有心 ...

  • 【每周一坑】乒乓数

    刚从假期回来,又要迎接周末,各位看官想必都很辛苦,所以本周每周一坑为大家准备一道简单的甜点题目,本题取材于伯克利大学 CS61 课程 homework02. 求解乒乓数,题目说明: 乒乓序列从1开始计 ...

  • 【每周一坑】疯狂的小母牛 +【解答】数据库

    之前我们的"每周一坑"栏目挖了一个"单词本"的系列.不过看起来大家都这种中长线项目兴趣不大啊--最近的一期,直到最近几天才有一位同学提交了解答. 所以我决定暂停 ...

  • 【每周一坑】数据库 +【解答】自动翻译

    我们的系列坑 单词本 今天继续第3期. 上次我们的目标是加入自动翻译,需要用到网络接口,可以看作是一个最简单的爬虫.详细方法稍后分析,先来谈谈今天的任务: 使用数据库存储单词数据 交互效果与之前相同, ...

  • 【每周一坑】自动翻译 | 【解答】单词本

    上次我们挖了一个系列坑:[每周一坑]单词本. 第一期的目标,是实现控制台下的单词录入及保存功能.各位都有实现吗?在本文后半段,我们会来做具体分析. 在这之前,先给出新的目标: 自动给添加的单词增加翻译 ...

  • 【每周一坑】单词本 +【解答】三国演义中谁的存在感最强

    "每周一坑"这个系列在本教室的文章中,阅读量不算高.但我屡次在和读者沟通时听到说"我都有跟着每周一坑里的题在做".这是个有意思的普遍现象:内容的价值和传播度并不 ...

  • 【每周一坑】三国演义中谁的存在感最强 +【解答】暴力计算圆周率

    自然语言处理(NLP)是人工智能的一个重要领域.在对中文做自然语言处理的时候,一个很基础的操作就是分词:因为中文不像英语有现成的单词划分,需要将汉字序列切分成一个个单独的词,以便于后续的处理和分析. ...

  • 【每周一坑】暴力计算圆周率 +【解答】生成/识别二维码

    我们之前有出过一些和概率相关的问题.比如 几道有趣的概率题.三门问题.田忌赛马.蜥蜴流感与贝叶斯定理.我讲过,用计算机程序来解编程题有个很有意思的思路,就是暴力解法.就是利用电脑的计算能力,去模拟大量 ...

  • 【每周一坑】生成/识别二维码 +【解答】新个税计算器

    二维码的本质是将文本信息转化成符合一定格式的平面图片信息,以便于计算机/手机通过摄像头或扫码设备快速而准确地识别,实现信息的传递.从某种角度来说,二维码可算是打通次元壁的途径,将互联网与现实世界更便捷 ...