题目1:找出100-999之间的水仙花数(各位数字的立方和刚好等于这个数本身)
如:153 = 1^3 + 5^3 + 3^3
算法分析:
123 // 100 = 1 ---> 23 获取百位数
123 // 10 = 12 % 10 = 2 --> 获取十位数(法一)
123 % 100 = 23 // 10 = 2 --> 获取十位数(法二)
123 % 10 = 3 --> 获取个位数
实现:
for num in range(100,1000):bw = num // 100sw = num // 10 %10gw = num % 10if bw ** 3 + sw ** 3 + gw ** 3 == num:print(num)
输出:
153
370
371
407
题目2:输入两个非负整数m和n(m>=n),计算C(m, n)的值。
算法分析:
A(m, n) = m! / (m - n)! ---> 排列 ---> permutation
C(m, n) = m! / n! / (m - n)! ---> 组合 ---> combination如:C(5, 3) = 5! / 3! / 2! = 10
实现:
m = int(input('m = '))
n = int(input('n = '))fm = 1
for i in range(2, m + 1):fm *= ifn = 1
for i in range(2, n + 1):fn *= ifk = 1
for i in range(2, m - n + 1):fk *= iprint(fm // fn // fk)
事实上,求N的阶乘,我们可以使用Python中的第三方函数库math中的factorial()方法求解:
from math import factorial as fac # 此处从math模块导入factorial函数并创建别名 as ---> alias --->别名m = int(input('m = '))
n = int(input('n = '))print(fac(m) // fac(n) // fac(m - n)) # 调用函数可以直接利用别名
题目3:输入一个正整数,判断它是不是质数(只能被1和自身整除的数)
实现:
a = int(input('请输入一个正整数:'))
is_prime = Truefor i in range(2, a):if a % i == 0:is_prime = Falsebreakif a > 1 and is_prime:print(f'{a}是质数')
else:print(f'{a}不是质数')
这里使用了个break语句,只要符合条件立马跳出循环。
题目4:嵌套循环的使用:输出乘法口诀表
实现:
for i in range(1, 10):for j in range(1, i + 1):print(f'{i}×{j}={i * j}', end='\t')print() # 换行,不需要加/n参数,默认换行
输出:
1×1=1
2×1=2 2×2=4
3×1=3 3×2=6 3×3=9
4×1=4 4×2=8 4×3=12 4×4=16
5×1=5 5×2=10 5×3=15 5×4=20 5×5=25
6×1=6 6×2=12 6×3=18 6×4=24 6×5=30 6×6=36
7×1=7 7×2=14 7×3=21 7×4=28 7×5=35 7×6=42 7×7=49
8×1=8 8×2=16 8×3=24 8×4=32 8×5=40 8×6=48 8×7=56 8×8=64
9×1=9 9×2=18 9×3=27 9×4=36 9×5=45 9×6=54 9×7=63 9×8=72 9×9=81
题目5:输入三角形三条边的长度,如果能构成三角形就计算周长和面积,如果不能构成三角形提示用户重新输入,直到正确。
实现:
import mathwhile True:a = float(input('a = '))b = float(input('b = '))c = float(input('c = '))if a + b > c and b + c > a and a + c > b:perimeter = a + b + chalf = perimeter / 2# 海伦公式# area = (half * (half - a) * (half - b) * (half - c)) ** 0.5# 调用sqrt函数求平方根area = math.sqrt(half * (half - a) * (half - b) * (half - c))print(f'三角形的周长:{perimeter}')print(f'三角形的面积:{area}')breakelse:print('不能构成三角形,请重新输入!')
题目6:找出1-10000之间的完美数,完美数的意思是指除自身外所有因子的和等于这个数,如:6=1+2+3
实现:
import timestart = time.time()for num in range(2, 10000):total = 1for i in range(2, int(num ** 0.5) + 1):if num % i == 0:total += iif i != num // i:total += num // iif num == total:print(num)
end = time.time()print(f'执行时间:{end - start:.3f}秒')
输出:
6
28
496
8128
执行时间:0.046秒