025、Python 循环结构的一些案例练习

题目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秒
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不在同一频道上的呆子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值