Python 编程基础作业总结

        本周主要围绕 Python 基础编程展开了学习,通过一系列的作业题来巩固所学知识。这些题目涵盖了输入输出、条件判断、循环结构等多个基础知识点,下面将对每道作业题进行详细分析。

1. 计算指定月份第一天是星期几

题目描述

编写一个程序,接受用户输入的一个年份和一个月份,输出该月份的第一天是星期几。使用蔡乐公式计算星期。

提示: 使用蔡乐公式计算星期。 W = ((26 * M - 2) / 10 + D + Y + Y / 4 + C / 4 - 2 * C ) % 7
#   M 为 1 表示 3月, 2表示4月,以此类推。M 为 11 表示1月、M为12表示2月,
#   如果是1月或者2月 则 对应的年份 需要减 1。 D 表示日 ,
#   C 表示年的头两位数(在 对 1、2月做了调整之后的年),
#   Y 表示年的后两位数 (在 对 1、2月做了调整之后的年)。
#   计算后的结果 W 如果小于 0 ,则 加上 7。
#   如果 W = 0 代表周日,1代表周一、依此类推 。
#   备注(公式中的除法均为整除)//取整

代码实现

year = int(input("请用户输入一个年份"))
month = int(input("请用户输入一个月份"))
M = None
D = 1
if month in range(1, 13):
    if month <= 2:
        M = month + 10
        year = year - 1
    if month > 2:
        M = month - 2
    ge = year % 10
    shi = year // 10 % 10
    bai = year // 100 % 10
    qian = year // 1000 % 10
    C = qian * 10 + bai
    Y = shi * 10 + ge
    W = ((26 * M - 2) // 10 + D + Y + Y // 4 + C // 4 - 2 * C) % 7
    if W < 0:
        W = W + 7
if W == 1:
    print('星期一')
elif W == 2:
    print('星期二')
elif W == 3:
    print('星期三')
elif W == 4:
    print('星期四')
elif W == 5:
    print('星期五')
elif W == 6:
    print('星期六')
elif W == 0:
    print('星期日')

分析

该程序首先获取用户输入的年份和月份,然后根据蔡乐公式计算该月份第一天是星期几。需要注意的是,公式中对于 1 月和 2 月的处理需要对年份进行调整。

2. 计算 100 - 200 之间不能被 3 整除的前 20 个数的平均值

题目描述

在控制台上输出 100 - 200 之间不能被 3 整除的前 20 个数的平均值。

代码实现

count = 0
sum = 0
num = 100
while num <= 200 and count < 20:
    if num % 3 != 0:
        sum += num
        count += 1
    num += 1
print(f'100~200之间不能被3整除的前20个数的平均值为{sum / count}')

分析

使用while循环遍历 100 到 200 之间的数,当找到不能被 3 整除的数时,将其累加到总和中,并记录个数。当找到 20 个数时,计算平均值并输出。

3. 统计 1000 以内满足特定条件的自然数个数

题目描述

一个自然数与 3 的和是 5 的倍数,与 3 的差是 6 的倍数,统计 1000 以内这样的自然数有几个。

代码实现

count = 0
for num in range(0, 1001):
    if (num + 3) % 5 == 0 and (num - 3) % 6 == 0:
        count += 1
print(count)

分析

使用for循环遍历 0 到 1000 之间的数,判断每个数是否满足条件,如果满足则计数器加 1,最后输出计数器的值。

4. 计算输入数字的平均数

题目描述

最多输入 10 个位于 10 - 50 之间的整数,如果输入了 30,则停止输入,计算输入的数字的平均数。

代码实现

count = 0
sum = 0
while count < 10:
    num = int(input('输入位于10-50之间的整数:'))
    if 10 <= num <= 50:
        sum += num
        count += 1
        if num == 30:
            print("输入了30,停止输入。")
            break
    else:
        print('输入无效,要输入位于10-50之间的整数')
if count > 0:
    ave = sum / count
    print(f'这些数字的平均数是: {ave}')
else:
    print('无有效数字')

分析

使用while循环控制输入次数,当输入的数字在 10 到 50 之间时,将其累加到总和中,并记录个数。如果输入的数字是 30,则停止输入。最后根据记录的个数计算平均值。

5. 计算 1 - 100 之间满足条件的数字的和

题目描述

编写一个程序,使用while循环计算并打印出 1 到 100 之间所有能被 3 整除但不能被 5 整除的数字的和。

代码实现

num = 1
sum = 0
while num <= 100:
    if num % 3 == 0 and num % 5 != 0:
        sum += num
    num += 1
print(f'1到100之间所有能被3整除但不能被5整除的数字的和{sum}')

分析

使用while循环遍历 1 到 100 之间的数,判断每个数是否能被 3 整除但不能被 5 整除,如果满足条件则将其累加到总和中,最后输出总和。

6. 计算 5 的阶乘

题目描述

编写一段程序,计算 5!。

代码实现

a = 5 * 4 * 3 * 2 * 1
print(f'5!={a}')

分析

直接使用乘法计算 5 的阶乘并输出结果。

7. 计算正整数的阶乘

题目描述

要求用户输入一个正整数,如果用户输入的数字小于等于 0,则继续要求用户重新输入,直到输入一个正整数。满足条件后计算给定正整数的阶乘。

代码实现

res = 1
a = int(input('输入一个正整数:'))
while a <= 0:
    a = int(input('请重新输入一个正整数:'))
for i in range(a, 0, -1):
    res *= i
print(res)

分析

使用while循环确保用户输入的是正整数,然后使用for循环计算该正整数的阶乘并输出结果。

8. 输出 10000 - 99999 之间的所有回文数

题目描述

输出 10000 - 99999 之间的所有回文数(例如 11211 、 22322 等),第一位和第五位相同、第二位和第四位相同

代码实现

for num in range(10000, 100000):
    a = num // 10000
    b = (num // 1000) % 10
    c = (num // 100) % 10
    d = (num // 10) % 10
    e = num % 10
    if a == e and b == d:
        print(num)

分析

使用for循环遍历 10000 到 99999 之间的数,将每个数的每一位分离出来,判断第一位和第五位是否相同,第二位和第四位是否相同,如果相同则输出该数。

9. 找出 10000 以内的所有完数

题目描述

一个数如果恰好等于它的因子之和,这个数就称为完数,例如 6 = 1 + 2 + 3,求 10000 以内所有完数。

代码实现

for num in range(2, 10001):
    z = 0
    for i in range(1, num):
        if num % i == 0:
            z += i
    if num == z:
        print(f"{num} 是完数,因为它的因子和为 {z}")

分析

使用两层for循环,外层循环遍历 2 到 10000 之间的数,内层循环找出每个数的所有因子并求和。如果该数等于其因子之和,则输出该数。

10. 连续录入学生成绩求和

题目描述

连续录入学生成绩,求和,输入 “q” 则系统退出。

代码实现

sum = 0
while 1:
    score = input('请输入成绩:')
    if str(score) == 'q':
        print('系统退出')
        break
    sum += int(score)
print(f'总成绩为:{sum}')

分析

使用while循环不断获取用户输入的成绩,当输入为 “q” 时,退出循环,否则将成绩累加到总和中,最后输出总成绩。

11. 登录验证

题目描述

登录验证, 用户名:jim   密码:123456,共3次机会
#        请输入用户名: tom
#       请输入密码: 123
#       用户名 或 密码错误,您还有 2 次机会
#       请输入用户名: mary
#       请输入密码: 123
#       用户名 或 密码错误,您还有 1 次机会
#       请输入用户名: jim
#       请输入密码: 123456
#       欢迎进入myshopping系统

代码实现

j = 3
while 0 < j <= 3:
    name = input('输入用户名:')
    password = input('输入密码:')
    j = j - 1
    if name == 'jim' and password == '123456':
        print('欢迎进入myshopping系统')
        break
    else:
        print(f'用户名 或 密码错误,您还有{j}次机会')
else:
    print('已没有可用机会')

分析

使用while循环控制登录次数,每次获取用户输入的用户名和密码,判断是否正确。如果正确则输出欢迎信息并退出循环,否则提示错误信息并减少剩余次数。当次数用完时,输出没有可用机会的信息。

12. 输出斐波那契序列前 10 个数

题目描述

循环输出斐波那契序列前 10 个数。 1、1、2、3、5、8、13、21、34、55 

斐波那契数列规则:从第三项开始,每一项等于前两项之和即 F(n)=F(n−1)+F(n−2)

代码实现

a, b = 1, 1
print("斐波那契数列前10个数:")
for s in range(1, 11):
    print(a, end=' ')
    a, b = b, a + b

分析

使用for循环和变量交换的方式生成斐波那契数列的前 10 个数并输出。

13. 求两个正整数的最大公约数和最小公倍数

题目描述

输入两个正整数 m 和 n,求其最大公约数和最小公倍数。

代码实现

m = int(input('输入一个正整数:'))
n = int(input('输入一个正整数:'))
small = min(m, n)
for i in range(small, 0, -1):
    if m % i == 0 and n % i == 0:
        print(f'最大公约数为{i}')
large = max(m, n)
j = large
while 1:
    if j % m == 0 and j % n == 0:
        print(f'最大公倍数为{j}')
        break
    j += 1

分析

先找出两个数中的较小数,从该数开始倒序遍历,找到第一个能同时整除两数的数即为最大公约数。再找出两个数中的较大数,从该数开始递增,找到第一个同时是两数倍数的数即为最小公倍数。

14. 计算 n 的阶乘和

题目描述

输入数字 n,求 n 的阶乘和,5的阶乘和 =5!+4!+3!+2!+1!

代码实现

n = int(input('输入一个正整数: '))
sum = 0
jie = 1
for i in range(1, n + 1):
    jie *= i
    sum += jie
print(f"从1到{n}的阶乘和为: {sum}")

分析

使用for循环计算从 1 到 n 的每个数的阶乘,并将其累加到总和中,最后输出总和。

15. 计算 100 元买 100 只鸡的方案数

题目描述

使用for循环实现公鸡 5 元一只、母鸡 3 元一只、小鸡一元 3 只。100 元买 100 只鸡共有多少方案。

代码实现

count = 0
for x in range(1, 100):
    for y in range(1, 100 - x):
        for z in range(1, 100 - x - y):
            if 5 * x + 3 * y + 3 * z == 100:
                count += 1
                print(f'公鸡有{x}只,母鸡有{y}只,小鸡有{z}只')
print(f'100元买100只鸡共有{count}方案')

分析

使用三层for循环遍历公鸡、母鸡和小鸡的可能数量,判断是否满足总价为 100 元的条件,如果满足则输出方案并增加方案数。

16. 计算指定数字前 5 项的和

题目描述

从键盘输入一个数字,例如 2 ,则计算 2 + 22 + 222 + 2222 + 22222 前 5 项的和。

代码实现

while 1:
    n = input('请输入一个数字(1-9):')
    if 1 <= int(n) <= 9:
        break
    print("输入无效,请输入1-9之间的数字!")
n1 = n
sum = int(n)
for s in range(1, 5):
    n1 += n
    sum += int(n1)
print(sum)

分析

使用while循环确保用户输入的是 1 到 9 之间的数字,然后使用for循环生成前 5 项并累加求和,最后输出总和。

17. 打印特定图形

题目描述

打印以下图形:

1
22
333
4444
55555

代码实现

for i in range(0, 5):
    for j in range(0, i + 1):
        print(i + 1, end='')
    for k in range(0, 4 - i):
        print(end='\t')
    print()

分析

使用两层for循环,外层循环控制行数,内层第一个循环控制每行数字的个数,内层第二个循环控制每行的空格数。

18. 打印特定图案

题目描述

打印以下图案:

*****
****
***
**
*

代码实现

for i in range(0, 5):
    for j in range(5 - i, 0, -1):
        print('*', end='')
    for k in range(0, i):
        print(end='\t')
    print()

分析

使用两层for循环,外层循环控制行数,内层第一个循环控制每行星号的个数,内层第二个循环控制每行的空格数。

19. 打印特定图形

题目描述

打印以下图形:

*****
 ***
  *
 ***
*****

代码实现

for i in range(0, 3):
    for k in range(0, i):
        print(' ', end='')
    for j in range(5 - 2 * i, 0, -1):
        print('*', end='')
    print()
for i in range(1, 3):
    for k in range(0, 3 - i - 1):
        print(' ', end='')
    for j in range(0, 2 * i + 1):
        print('*', end='')
    print()

分析

使用两层for循环分别打印上半部分和下半部分的图形,通过控制空格和星号的数量来实现所需的图形。

选做:MyShopping 管理系统

题目描述

实现一个简单的 MyShopping 管理系统,包含客户信息管理、购物结算、真情回馈和注销功能。

代码实现

print("""
欢迎使用MyShopping管理系统
**************************
1.客户信息管理系统
2.购物结算
3.真情回馈
4.注销
**************************
""")
while 1:
    num = int(input("请选择输入数字:"))
    if num == 1:
        print('客户信息管理系统')
    elif num == 2:
        print('购物结算')
    elif num == 3:
        print('真情回馈')
    elif num == 4:
        print('程序结束')
        break
    else:
        print('输入数字有误')

分析

使用while循环不断获取用户输入的选择,根据选择输出相应的信息,当用户选择注销时,退出循环,结束程序。

        通过这些作业题的练习,对 Python 的基础编程知识有了更深入的理解和掌握,包括输入输出、条件判断、循环结构等方面。在后续的学习中,还需要不断练习和巩固,提高编程能力。

你可能感兴趣的:(Python 编程基础作业总结)