本篇文章是对北京理工大学嵩天老师的《Python语言程序设计》第五章考试题及练习题的学习记录。
一、考试题
1、随机密码生成
问题描述:
描述
补充编程模板中代码,完成如下功能:
以整数17为随机数种子,获取用户输入整数N为长度,产生3个长度为N位的密码,密码的每位是一个数字。每个密码单独一行输出。
产生密码采用random.randint()函数。
输入输出示例
输入 输出 示例 1 3
634 524 926
参考代码:
import random
def genpwd(length):
a = 10 ** (length - 1)
b = 10 ** length -1
return "{}".format(random.randint(a,b))
length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length))
2、连续质数计算
问题描述
描述
补充编程模板中代码,完成如下功能:
获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。
注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。
输入输出示例
输入 输出 示例 1 12
13,17,19,23,29
参考代码
def prime(m):
for i in range(2,m):
if m % i ==0:
m +=1
return prime(m)
else:
return m
n = eval(input())
N = int(n)
N = N + 1 if N<n else N
count = 5
while count>0:
if count>1:
print(prime(N),end=",")
N = prime(N) + 2
else:
print(prime(N),end="")
count -= 1
二、练习题
1、科赫雪花小包裹
问题描述
描述
这是"实例"题,与课上讲解实例相同,请作答检验学习效果。
科赫曲线,也叫雪花曲线。绘制科赫曲线。
请补充编程模板中代码,完成功能:获得用户输入的整数N,作为阶,绘制N阶科赫曲线。
参考代码
import turtle
def koch(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)
turtle.right(120)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.right(120)
turtle.hideturtle()
try:
level = eval(input("请输入科赫曲线的阶: "))
main(level)
except:
print("输入错误")
2、任意累积
问题描述
请根据编程模板补充代码,计算任意个输入数字的乘积。
注意,仅需要在标注...的地方补充一行或多行代码。
输入示例1
1,2,3,4
输出示例1
24
参考代码
def cmul(a, *b):
m = a
for i in b:
m *= i
return m
print(eval("cmul({})".format(input())))
3、斐波那契数列计算
问题描述
根据编程模板补充代码,计算斐波那契数列的值,具体功能如下:
获取用户输入整数N,其中,N为正整数
计算斐波那契数列的值
如果将斐波那契数列表示为fbi(N),对于整数N,值如下:
fbi(1)和fbi(2)的值是1,当N>2时,fbi(N) = fbi(N-1) + fbi(N-2)
请采用递归方式编写。
输入示例1
4
输出示例1
3
参考代码
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))
4、汉诺塔实践
问题描述
汉诺塔问题大家都清楚,这里不再赘述。
请补充编程模板中代码,完成如下功能:
有三个圆柱A、B、C,初始时A上有N个圆盘,N由用户输入给出,最终移动到圆柱C上。
每次移动步骤的表达方式示例如下:[STEP 10] A->C。其中,STEP是步骤序号,宽度为4个字符,右对齐。
请编写代码,获得输入N后,输出汉诺塔移动的步骤。
输入格式:一个整数
输入示例1
4
输出格式:每个步骤一行,每行参考格式如下:[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)