Python Day5 练习题分享 循环结构练习题集

1. 特殊累加求和

# 计算特定序列的累加和
# 初始值a=1,每次循环i增加2,a更新为i+a,直到a超过10000
i = 1
sum_ = 0
a = 1
while a <= 10000:
    sum_ = sum_ + a  # 累加当前a的值
    i += 2           # i每次递增2
    a = i + a        # 更新a的值
    print(sum_)      # 输出每次累加后的结果

2. 分数序列输出

# 打印从1到100的倒数序列:1, 1/2, 1/3, ..., 1/100
for i in range(1, 101):  # 遍历1到100的整数
    print(1/i)           # 输出每个数的倒数

3. 计算日期序号

# 输入年、月、日,计算该日期是当年的第几天
year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
day = int(input('请输入几号:'))
date = day  # 初始化天数为输入的日

# 累加当前月份之前的所有月份天数
for i in range(1, month):
    if i in [1, 3, 5, 7, 8, 10]:  # 大月31天
        date += 31
    elif i in [4, 6, 9, 11]:     # 小月30天
        date += 30
    else:  # 2月需要判断闰年
        if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
            date += 29  # 闰年2月29天
        else:
            date += 28  # 平年2月28天

print(date)  # 输出结果

4. 九九乘法表

# 使用嵌套循环打印标准的九九乘法表
for i in range(1, 10):        # 外层循环控制行数(1-9)
    for j in range(1, i+1):   # 内层循环控制每行的列数(不超过当前行数)
        print(i, '*', j, '=', i*j, end='\t')  # 输出乘法表达式,使用制表符分隔
    print()  # 换行

5. 数字金字塔

# 打印数字金字塔图形:
# 1
# 22
# 333
# 4444
# 55555
for i in range(1, 6):       # 控制行数(1-5)
    for j in range(i):      # 每行打印i个数字
        print(i, end='')    # 打印当前行号,不换行
    print()                 # 换行

6. 最大公约数计算

# 使用欧几里得算法计算两个数的最大公约数
a = int(input('请输入第一个数:'))
b = int(input('请输入第二个数:'))
if a < b:        # 确保a大于等于b
    a, b = b, a
while b != 0:    # 辗转相除法
    c = a % b
    a = b
    b = c
print(a)         # 输出最大公约数

7. 质因数分解

# 将一个正整数分解为质因数的乘积
num_ = int(input('输入一个数字:'))  # 原始输入值
num = num_                           # 用于计算的副本
list01 = []                          # 存储质因数的列表
i = 2                                # 从最小的质数2开始

while True:
    while True:
        if num % i == 0:       # 如果i是当前数的因数
            list01.append(i)   # 将i添加到因数列表
            num //= i          # 整除更新当前数
        else:
            break              # 无法整除时跳出内层循环
    if num ** 0.5 < i:         # 判断是否已找到所有质因数
        if num == 1:
            break              # 分解完成
        else:
            list01.append(num)  # 添加最后一个质因数
            break
    i = i + 1                   # 尝试下一个可能的因数

# 格式化输出结果
c = str(list01[0])
for i in range(1, len(list01)):
    c = c + '*' + str(list01[i])
print(num_, '=', c)

8. 素数筛选

# 找出100以内的所有素数(质数)
for i in range(2, 101):      # 遍历2到100的所有数
    is_prime = True          # 假设当前数是素数
    for j in range(2, int(i ** 0.5) + 1):  # 检查到平方根即可
        if i % j == 0:       # 如果能被整除
            is_prime = False  # 标记为非素数
            break            # 提前退出循环
    if is_prime:             # 如果仍然是素数标记
        print(i)             # 输出该素数

9. π 的近似计算

# 使用莱布尼茨级数公式计算π的近似值
# π/4 ≈ 1 - 1/3 + 1/5 - 1/7 + ...
sum_series = 1              # 初始化累加和
denominator = 1             # 分母初始值
for i in range(1, 1000001):  # 计算前100万项
    if i == 1:              # 第一项为1
        sum_series = 1
    elif i % 2 == 0:        # 偶数项为减
        sum_series = sum_series - (1/denominator)
    else:                   # 奇数项为加
        sum_series = sum_series + (1/denominator)
    denominator += 2        # 分母每次增加2
print(sum_series * 4)       # 输出π的近似值

10. 百钱买百鸡问题

# 经典数学问题:公鸡5元,母鸡3元,小鸡1元3只
# 用100元买100只鸡,求各买多少只
for i in range(1, 101):       # 公鸡数量范围
    for j in range(1, 101):   # 母鸡数量范围
        for k in range(1, 101):  # 小鸡数量范围
            # 满足总钱数和总鸡数的条件
            if i*5 + j*3 + k/3 == 100 and i + j + k == 100:
                print(f'公鸡{i}个,母鸡{j}个,小鸡{k}个')

11. 月份日历生成

# 输入年份和月份,生成对应的日历
year = int(input('请输入年份:'))
month = int(input('请输入月份:'))

# 计算蔡氏公式中的参数,用于确定每月第一天是星期几
D = 1  # 固定为1,表示每月第一天
if 2 < month < 13:
    M = month - 2
    C = year // 100
    Y = year % 100
elif 0 < month < 3:
    M = month + 10
    Y = (year - 1) % 100
    C = (year - 1) // 100
else:
    print('输入的月份有误!!!请输入1~12月')
    exit()

# 蔡氏公式计算星期几(0=星期日,1=星期一...)
W = int(((26 * M - 2) // 10 + D + Y + Y // 4 + C // 4 - 2 * C) % 7)
if W < 0:
    W = W + 7

# 确定当月的天数
if month < 0 or month > 12:
    print('输入不合法!')
elif month in [1, 3, 5, 7, 8, 10, 12]:
    num = 31
elif month in [4, 6, 9, 11]:
    num = 30
elif (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    num = 29  # 闰年2月
else:
    num = 28  # 平年2月

# 打印日历头部
ls01 = '日一二三四五六'
for i in ls01:
    print(i, end='\t')
print()

# 打印日期
for i in range(1, num + 1):
    if i == 1:  # 处理第一行的空格
        for j in range(W):
            print('', end='\t')
    print(i, end='\t')
    if (i + W) % 7 == 0:  # 每7个日期换行
        print()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值