前言:嵩天老师的《Python语言程序设计课程》被评为国家精品课程,在幕课上累计超过11万学员,里面的习题对初学者入门Python,提高编程实战能力很有帮助。因此,我想把自己学习这门课程作业分享出来,希望对Python初学者有所帮助
目录
实例7:七段数码管绘制
描述
实例8:科赫雪花小包裹
描述
任意累积
描述
输入输出示例
斐波那契数列计算
描述
输入输出示例
汉诺塔实践
描述
输入格式
输出格式
输入输出示例
随机密码生成
描述
输入输出示例
连续质数计算
描述
输入输出示例
实例7:七段数码管绘制
描述
这是"实例"题,与课上讲解实例相同,请作答检验学习效果。
七段数码管是一种展示数字的有效方式。
请用程序绘制当前系统时间对应的七段数码管,效果如下:
要求如下:
(1) 使用 time 库获得系统当前时间,格式如下:20190411
(2) 绘制对应的七段数码管
(3) 数码管风格不限
请在本机编写代码完成实例,建议有趣的风格请在Python123的绘图专区上传展示。
# -*- coding: utf-8 -*-
import turtle
import time
def drawLine(draw): #绘制单段数码管
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
turtle.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)
turtle.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)
turtle.left(180)
turtle.penup()
turtle.fd(20)
def drawDate(date):
for i in date:
drawDigit(eval(i))
def main():
turtle.setup(800, 350, 200, 200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
date = time.strftime('%Y%m%d',time.gmtime())
drawDate(date)
turtle.hideturtle()
turtle.done()
main()
实例8:科赫雪花小包裹
描述
这是"实例"题,与课上讲解实例相同,请作答检验学习效果。
科赫曲线,也叫雪花曲线。绘制科赫曲线。
请补充编程模板中代码,完成功能:获得用户输入的整数N,作为阶,绘制N阶科赫曲线。
# 请在...补充一行或多行代码
import turtle
def koch(size, n):
if n == 0:
turtle.fd(size)
else:
koch(size/3,n-1)
turtle.left(60)
koch(size/3,n-1)
turtle.right(120)
koch(size/3,n-1)
turtle.left(60)
koch(size/3,n-1)
def main(level):
turtle.setup(600,600)
turtle.penup()
turtle.goto(-200, 100)
turtle.pendown()
turtle.pensize(2)
size = 600
koch(size, level)
turtle.hideturtle()
turtle.mainloop()
turtle.bye()
try:
level = eval(input("请输入科赫曲线的阶: "))
main(level)
except:
print("输入错误")
任意累积
描述
请根据编程模板补充代码,计算任意个输入数字的乘积。
注意,仅需要在标注...的地方补充一行或多行代码。
输入输出示例
| 输入 | 输出 |
示例 1 |
|
|
# 请在...补充一行或多行代码
def cmul(*args): # *args输入不确定的多个参数,这种方式使用input()作为输入的参数,如果输入是数字,并不是数字字符串
k = 1
for i in args:
k = k * i
return k
print(eval("cmul({})".format(input())))
斐波那契数列计算
描述
根据编程模板补充代码,计算斐波那契数列的值,具体功能如下:
1. 获取用户输入整数N,其中,N为正整数
2. 计算斐波那契数列的值
如果将斐波那契数列表示为fbi(N),对于整数N,值如下:
fbi(1)和fbi(2)的值是1,当N>2时,fbi(N) = fbi(N-1) + fbi(N-2)
请采用递归方式编写。
输入输出示例
| 输入 | 输出 |
示例 1 |
|
|
# 请在...补充一行或多行代码
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))
汉诺塔实践
描述
汉诺塔问题大家都清楚,这里不再赘述。
请补充编程模板中代码,完成如下功能:
有三个圆柱A、B、C,初始时A上有N个圆盘,N由用户输入给出,最终移动到圆柱C上。
每次移动步骤的表达方式示例如下:[STEP 10] A->C。其中,STEP是步骤序号,宽度为4个字符,右对齐。
请编写代码,获得输入N后,输出汉诺塔移动的步骤。
输入格式
一个整数
输出格式
每个步骤一行,每行参考格式如下:[STEP 10] A->C
输入输出示例
| 输入 | 输出 |
示例 1 | 3 | [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 = steps + 1
print("[STEP{:>4}] {}->{}".format(steps, src, des)) #基例
else: # 递归链条
hanoi(src,mid,des,n-1) # 第一步,借助C,将A上面n-1个汉诺塔从A移到B
steps = steps + 1
print("[STEP{:>4}] {}->{}".format(steps, src, des)) # 第二步,将A上最后一个汉诺塔移到C
hanoi(mid,des,src,n-1) # 第三步,借助A,将B上的n-1个汉诺塔移动到C,完成整个汉诺塔的移动工作
N = eval(input())
hanoi("A", "C", "B", N)
随机密码生成
描述
补充编程模板中代码,完成如下功能:
以整数17为随机数种子,获取用户输入整数N为长度,产生3个长度为N位的密码,密码的每位是一个数字。每个密码单独一行输出。
产生密码采用random.randint()函数。
输入输出示例
| 输入 | 输出 |
示例 1 |
| 634 |
# 代码1:使用randint函数产生三位数密码,但是这种方式不能产生001这种类型的三位数密码
import random
def genpwd(length):
a = pow(10, length - 1) # 定义一个下限
b = pow(10, length) - 1 # 定义一个上限
return "{}".format(random.randint(a, b))
length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length))
# 代码2,可以产001这种三位数密码,但是提交代码确测试通不过,应该是程序批改作业的问题,这种方式也应该是符合要求的。
import random
def genpwd(length):
pwd=''
for i in range(length):
pwd=pwd+str(random.randint(0,9))
return pwd
length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length))
连续质数计算
描述
补充编程模板中代码,完成如下功能:
获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。
注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。
输入输出示例
| 输入 | 输出 |
示例 1 |
|
|
# 代码1:
def prime(m): # 判断一个数是不是质数的函数,常用的判断函数
if m < 2:
return False
else:
for i in range(2, m):
if m%i == 0:
return False
else:
return True
n = eval(input())
if n != int(n): # 因为可能输入有浮点数
n = int(n) + 1
else: # 保证输入5.0时,输出为整数5。这里只根据题目中只输入正浮点或者正整数时做的处理
n = int(n)
count = 5
while count > 0:
if prime(n):
if count > 1:
print(n, end=',')
else:
print(n)
count -= 1
n += 1
# 代码2,输出格式跟列表很类型,可以使用列表输出结果
def prime(m): # 判断一个数是不是质数的函数
if m < 2:
return False
else:
k = 1
for i in range(2,m):
k = k*(m % i)
if k!= 0: # 不能被1和本身之外的其他数整除
return True
else:
return False
n = eval(input())
if n > int(n):
n = int(n) + 1
else:
n = int(n)
count = 5
output = []
while count > 0:
if prime(n):
output.append(n)
count = count - 1
n = n + 1
for j in output:
print(j,end=',')