1. 编制一个返回值为bool型的函数isPrimer(),用于判断参数是否为素数;
代码:
def isPrimer(n):
for i in range(2, n):
if not n % i:
return False
break
else:
return True
print(isPrimer(int(input())))
运行结果:
2. 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编程序计算共有多少种不同的走法?需求: 编制一个返回值为整型的函数Fib(n),用于获取n阶台阶的走法;
提示:(fib数列)
设n阶台阶的走法数为f(n)。如果只有1个台阶,走法有1种(一步上1个台阶),即f(1)=1;如果有2个台阶,走法有2种(一种是上1阶,再上1阶,另一种是一步上2阶),即f(2)=2;当有n个台阶(n>3)时,我们缩小问题规模,可以这样想:最后是一步上1个台阶的话,之前上了n-1个台阶,走法为f(n-1)种,而最后是一步上2个台阶的话,之前上了n-2个台阶,走法为f(n-2)种,故而f(n)=f(n-1)+f(n-2)。
代码:
def fib(n):
if n == 1:
all = 1
elif n ==2:
all = 2
else:
all = fib(n-1)+fib(n-2)
return all
print(fib(int(input('台阶数:'))))
运行结果:
3. 算法案例的拓展:
1). 求满足条件n=a!+b!+c!的所有三位数n并输出,要求用自定义函数实现求阶乘。
代码:
def factorial(a):
if a == 0:
return 0
fac = 1
for i in range(1, a + 1):
fac *= i
return fac
def isComp(n):
sum = 0
for i in str(n):
sum += factorial(int(i))
if sum == n:
return True
else:
return False
for n in range(100, 1000):
if isComp(n):
print(n)
运行结果:
2). 输出1000以内的所有完全数;
代码:
def isPerfect(m):
li = [s for s in range(1, m) if not m % s]
if m == sum(li):
return True
else:
return False
for n in range(1, 1001):
if isPerfect(n):
print(n)
运行结果:
3). 输出1000以内的所有素数;
代码:
def isPrime(p):
for i in range(2, p):
if not p % i:
return False
else:
return True
for p in range(1,1
if isPrime(p):
print(p)
运行结果:
4). 输出10000以内的所有回文数;
代码:
def isPalindrome(h):
if str(h) == str(h)[::-1]:
return True
else:
return False
for h in range(1, 10001):
if isPalindrome(h):
print(h)
运行结果:
5). 输出输出10000以内的所有回文素数(提醒:某数是素数后再判断是否也是回文数。);
代码:
def isPrime(p):
for i in range(2, p):
if not p % i:
return False
else:
return True
def isPalindrome(h):
if str(h) == str(h)[::-1]:
return True
else:
return False
for i in range(1,10001):
if isPalindrome(i) and isPrime(i):
print(i)
运行结果:
** 总结:
此类题目的共有特征是,需要考察一定范围内的数字符合某种特定的条件,从大的框架讲,就需要逐个考察相应范围内的每一个数字。因此,程的顶层结构是:
"""
for i in range(下限, 上限+1):
为构造条件进行相关的计算;
if(条件成立) 输出符合要求的结果
"""
4. 选人:1班和2班两个班,1班同学的学号为1-41,2班同学的学号为42-84,现在每个班要抽签确定5名同学去参加组织的Linux挑战大赛,请编程完成这个“抽签”的工作。
编制一个返回值为列表的函数getId(start=1, end=40, count=5),用于获取参加比赛的学生学号;
代码:
import random
def getId(start=1, end=40, count=5):
li = [random.randint(start, end) for i in range(count)]
return li
print('一斑:', getId(1, 41, 5))
print('二班:', getId(42, 84, 5))
运行结果:
打地鼠游戏:
代码:
import random
def beat():
for i in range(5):
n = int(input('洞口:'))
mouse = random.choice([1,2,3,4,5])
if n == mouse:
print('you got it')
break
else:
print('try again')
beat()
运行结果:
打字游戏:
代码:
def per(orginStr, userStr):
correct = 0
if len(orginStr) < len(userStr):
return '输入超出范围。'
else:
for i in zip(orginStr, userStr):
if i[0] == i[1]:
correct += 1
per = 100*(correct/len(orginStr))
return '%.2f%%' %per
print(per('hello', 'helle'))
运行结果: