题目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 // 100
sw = num // 10 %10
gw = num % 10
if 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 *= i
fn = 1
for i in range(2, n + 1):
fn *= i
fk = 1
for i in range(2, m - n + 1):
fk *= i
print(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 = True
for i in range(2, a):
if a % i == 0:
is_prime = False
break
if 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 math
while 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 + c
half = 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}')
break
else:
print('不能构成三角形,请重新输入!')
题目6:找出1-10000之间的完美数,完美数的意思是指除自身外所有因子的和等于这个数,如:6=1+2+3
实现:
import time
start = time.time()
for num in range(2, 10000):
total = 1
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
total += i
if i != num // i:
total += num // i
if num == total:
print(num)
end = time.time()
print(f'执行时间:{end - start:.3f}秒')
输出:
6
28
496
8128
执行时间:0.046秒