练习5: 函数和代码复用 (第3周)

1.七段数码管绘制

七段数码管是一种展示数字的有效方式。
在这里插入图片描述


请用程序绘制当前系统时间对应的七段数码管,效果如下:
在这里插入图片描述
要求如下:
‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
(1) 使用 time 库获得系统当前时间,格式如下:20190411‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

(2) 绘制对应的七段数码管‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

(3) 数码管风格不限


import turtle as t
import time 
def drawGap(): #绘制数码管间隔
    t.penup()
    t.fd(5)
def drawLine(draw): #绘制单段数码管
    t.pendown() if draw else t.penup()#<表达式1> if <条件> else <表达式2>
    t.fd(40)
    drawGap()
    t.right(90)
def drawDigit(digit): #根据数字绘制七段数码管
    drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,6,8] else drawLine(False)
    t.left(90)
    drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
    t.left(180)
    t.penup() #为绘制后续数字确定位置
    t.fd(20) #为绘制后续数字确定位置
def drawDate(date): #date为日期,格式为'%Y-%m=%d+'
        t.pencolor("red")
        for i in date:
            drawDigit(eval(i))
def main():
    t.setup(800,350,200,200)
    t.penup()
    t.fd(-300)
    t.pensize(5)
    drawDate(time.strftime('%Y%m%d',time.gmtime()))
    t.hideturtle()
    t.done()
    
main()

2.科赫雪花小包裹

科赫曲线,也叫雪花曲线。绘制科赫曲线。
在这里插入图片描述


import turtle
def koch(size, n): #每一段直线的长度size;阶数n
    if n == 0:
        turtle.fd(size)
    else:
        for angle in [0,60,-120,60]:
            turtle.left(angle)
            koch(size/3,n-1)
            
def main(level):
    turtle.setup(600,600)
    turtle.penup()
    turtle.goto(-200, 100)
    turtle.pendown()
    turtle.pensize(2)
    koch(400,level) #长度600像素;level阶   
    turtle.hideturtle()
    
try:
    level = eval(input("请输入科赫曲线的阶: "))
    main(level)
except:
    print("输入错误")

3.任意累积

描述

计算任意个输入数字的乘积。


输入
示例1:1,2,3,4

输出
示例1: 24


#累积
def cmul(a,*b): #可变参数*b,参数数量不确定
    s = a
    for i  in b:
        s *= i
    return s

print(eval("cmul({})".format(input())))

4.斐波那契数列计算

描述
根据编程模板补充代码,计算斐波那契数列的值,具体功能如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

  1. 获取用户输入整数N,其中,N为正整数‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
  2. 计算斐波那契数列的值‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

    如果将斐波那契数列表示为fbi(N),对于整数N,值如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬

    fbi(1)和fbi(2)的值是1,当N>2时,fbi(N) = fbi(N-1) + fbi(N-2)

    ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪
    请采用递归方式编写。

输入
示例1:4

输出
示例1:3


#斐波那契数列 fbi(n)=fbi(n-1)+fbi(n-2)
def fbi(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fbi(n-1) + fbi(n-2)

n = eval(input())
print(fbi(n))

5.汉诺塔实践

描述
有三个圆柱A、B、C,初始时A上有N个圆盘,N由用户输入给出,最终移动到圆柱C上。
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
每次移动步骤的表达方式示例如下:[STEP 10] A->C。其中,STEP是步骤序号,宽度为4个字符,右对齐。


输入格式
一个整数

示例1:3

输出格式
每个步骤一行,每行参考格式如下:[STEP 10] A->C

示例1:
[STEP 1] A->C
[STEP 2] A->B
[STEP 3] C->B
[STEP 4] A->C
[STEP 5] B->A
[STEP 6] B->C
[STEP 7] A->C

#汉诺塔
steps = 0
def hanoi(src, des, mid, n): #源柱子、目的柱子、中间的过渡柱子、圆盘的数量
    global steps
    if n == 1:
        steps += 1
        print("[STEP{:>4}] {}->{}".format(steps, src, des))
    else:
        hanoi(src, mid, des, n-1)
        steps += 1
        print("[STEP{:>4}] {}->{}".format(steps, src, des))
        hanoi(mid, des, src, n-1)

N = eval(input())
hanoi("A", "C", "B", N)

说明:题目来自北理嵩天老师【Python语言程序设计(第9期)】课程,如有侵权,立删。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为一个AI语言模型,我可以回答你的问题。对于Python新手的练习顺序,以下是我建议的顺序: 1.了解基本语法:首先需要学习Python的基本语法,例如变量、数据类型、条件语句、循环语句等等。 2.掌握函数函数Python编程中的重要概念,因此需要掌握如何定义和调用函数。 3.熟悉模块:Python拥有丰富的模块,可以帮助我们更快速、高效地完成各种任务,因此需要了解一些常用的模块,例如math、random等等。 4.学习面向对象编程:Python是一种面向对象的编程语言,因此需要学习如何定义类、创建对象以及使用面向对象编程思想。 5.实践项目:学习编程最好的方式是实践,因此建议通过完成一些小型项目来加强自己的编程能力和实战经验。 希望我的建议能对你有所帮助,祝你学习愉快! ### 回答2: 作为Python新手,以下是一些建议的练习顺序: 1. 掌握基本语法:开始学习Python之前,先了解基本的语法结构,如变量、数据类型、运算符、控制语句等。通过阅读教程或参加入门课程可以获得这方面的知识。 2. 简单的输出和输入:练习编写简单的代码,例如打印“Hello, World!”或要求用户输入一些信息。这有助于熟悉基本的输入输出操作。 3. 条件语句:学习如何使用条件语句(如if语句和else语句)来根据条件执行不同的代码块。这是编写更复杂程序所必需的基本知识。 4. 循环结构:掌握循环结构(如for循环和while循环)的使用方法,并尝试编写能够重复执行某段代码的程序。这对于处理大量数据或重复操作非常有用。 5. 函数:学习如何定义和使用函数函数是一段具有特定功能的可重复使用代码块。通过划分功能和模块化程序,可以提高代码的可读性和复用性。 6. 列表和字典:了解如何使用列表和字典存储和处理数据。列表是有序的数据集合,而字典是键值对的无序集合。这些数据结构在实际编程中经常使用。 7. 文件操作:学习如何读写文件,以及文件的打开、写入和关闭操作。这对于处理大量数据或持久化数据非常有用。 8. 异常处理:了解如何使用异常处理机制来处理程序运行时可能发生的错误。这可以让程序在遇到错误时不崩溃,并做出相应的处理。 9. 模块和:尝试使用Python内置的模块和第三方来扩展Python的功能。例如,学习如何使用math模块进行数学计算,或使用numpy进行科学计算。 10. 小项目:挑战一些小项目来实践所学的知识。例如,编写一个简单的文本游戏、实现一个简单的计算器或制作一个简单的网页爬虫。通过实践项目,可以更好地理解Python编程的实际应用。 练习顺序可能因人而异,根据自己的学习速度和实际需求进行调整。最重要的是坚持练习,通过不断的编程实践提升自己的技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值