描述
以整数17为随机数种子,获取用户输入整数N为长度,产生3个长度为N位的密码,密码的每位是一个数字。每个密码单独一行输出。
产生密码采用random.randint()函数。
使用递归,分别随机各个位数上的数字。能够完成题目要求,但与题目答案随机出的数字不同。
import random
def genpwd(length):
if length == 1:
return str(random.randint(0,9))
else:
a = random.randint(0,9)
return str(a)+genpwd(length - 1)
length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length))
用length表示出.randint
的随机范围,直接得到length位数的随机数。
import random
def genpwd(length):
a = 10**(length-1) #用length表示出.randint的随机范围
b = 10**length - 1
return "{}".format(random.randint(a, b))
length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length)
描述
获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。
注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。
输入输出示例
输入 12 输出 13,17,19,23,29
def prime(m):
for i in range(2,m):
if m % i == 0:
return False
return True
n = eval(input())
n_ = int(n)
n_ = n_+1 if n_ < n else n_
count = 5
while count > 0:
if prime(n_):
if count > 1:
print(n_, end=",")
else:
print(n_, end="")
count -= 1
n_ += 1
描述
这是"实例"题7,与课上讲解实例相同,请作答检验学习效果。
七段数码管是一种展示数字的有效方式。
import time
import turtle as t
def gap():
t.pu()
t.fd(5)
def drawLine(draw):
gap()
t.pd() if draw else t.pu()
t.fd(40)
gap()
t.right(90)
def drawDigit(d):
drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,2,6,8] else drawLine(False)
t.left(90)
drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False)
t.left(180)
t.pu()
t.fd(20)
def drawDate(date):
t.colormode(255)
t.pencolor(66, 210, 217)
for i in date:
if i == "-":
t.write("年", font = ("Arial", 18, "normal"))
t.pencolor(203, 215, 164)
t.fd(40)
elif i == "=":
t.write("月", font = ("Arial", 18, "normal"))
t.pencolor(255, 112, 97)
t.fd(40)
elif i == "+":
t.write("日", font = ("Arial", 18, "normal"))
t.fd(40)
else:
drawDigit(eval(i))
def main():
t.setup(750,350)
t.pu()
t.fd(-330)
t.pensize(5)
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
t.hideturtle()
t.done()
main()
描述
这是"实例"题8,与课上讲解实例相同,请作答检验学习效果。
完成功能:获得用户输入的整数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.colormode(255)
turtle.pencolor(0, 162, 232)
turtle.pensize(2)
for n in range(3):
koch(350,level)
turtle.right(120)
turtle.hideturtle()
turtle.done()
try:
level = eval(input("请输入科赫曲线的阶数: "))
main(level)
except:
print("输入错误")
描述
计算任意个输入数字的乘积。
输入输出示例
输入 1,2,3,4 输出 24
def cmul(a, *b):
m = a
for i in b:
m *= i
return m
print(eval("cmul({})".format(input())))
描述
计算斐波那契数列的值,具体功能如下:
如果将斐波那契数列表示为fbi(N),对于整数N,值如下:
fbi(1)和fbi(2)的值是1,当N>2时,fbi(N) = fbi(N-1) + fbi(N-2)
请采用递归方式编写。
def fbi(n):
if n ==1 or n == 2:
return 1
elif n > 2:
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
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)