本周主要围绕 Python 基础编程展开了学习,通过一系列的作业题来巩固所学知识。这些题目涵盖了输入输出、条件判断、循环结构等多个基础知识点,下面将对每道作业题进行详细分析。
编写一个程序,接受用户输入的一个年份和一个月份,输出该月份的第一天是星期几。使用蔡乐公式计算星期。
提示: 使用蔡乐公式计算星期。 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 月的处理需要对年份进行调整。
在控制台上输出 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 的和是 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,最后输出计数器的值。
最多输入 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,则停止输入。最后根据记录的个数计算平均值。
编写一个程序,使用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 整除,如果满足条件则将其累加到总和中,最后输出总和。
编写一段程序,计算 5!。
a = 5 * 4 * 3 * 2 * 1
print(f'5!={a}')
直接使用乘法计算 5 的阶乘并输出结果。
要求用户输入一个正整数,如果用户输入的数字小于等于 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
循环计算该正整数的阶乘并输出结果。
输出 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 之间的数,将每个数的每一位分离出来,判断第一位和第五位是否相同,第二位和第四位是否相同,如果相同则输出该数。
一个数如果恰好等于它的因子之和,这个数就称为完数,例如 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 之间的数,内层循环找出每个数的所有因子并求和。如果该数等于其因子之和,则输出该数。
连续录入学生成绩,求和,输入 “q” 则系统退出。
sum = 0
while 1:
score = input('请输入成绩:')
if str(score) == 'q':
print('系统退出')
break
sum += int(score)
print(f'总成绩为:{sum}')
使用while
循环不断获取用户输入的成绩,当输入为 “q” 时,退出循环,否则将成绩累加到总和中,最后输出总成绩。
登录验证, 用户名: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
循环控制登录次数,每次获取用户输入的用户名和密码,判断是否正确。如果正确则输出欢迎信息并退出循环,否则提示错误信息并减少剩余次数。当次数用完时,输出没有可用机会的信息。
循环输出斐波那契序列前 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 个数并输出。
输入两个正整数 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
先找出两个数中的较小数,从该数开始倒序遍历,找到第一个能同时整除两数的数即为最大公约数。再找出两个数中的较大数,从该数开始递增,找到第一个同时是两数倍数的数即为最小公倍数。
输入数字 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 的每个数的阶乘,并将其累加到总和中,最后输出总和。
使用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 元的条件,如果满足则输出方案并增加方案数。
从键盘输入一个数字,例如 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 项并累加求和,最后输出总和。
打印以下图形:
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
循环,外层循环控制行数,内层第一个循环控制每行数字的个数,内层第二个循环控制每行的空格数。
打印以下图案:
*****
****
***
**
*
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
循环,外层循环控制行数,内层第一个循环控制每行星号的个数,内层第二个循环控制每行的空格数。
打印以下图形:
*****
***
*
***
*****
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 管理系统,包含客户信息管理、购物结算、真情回馈和注销功能。
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 的基础编程知识有了更深入的理解和掌握,包括输入输出、条件判断、循环结构等方面。在后续的学习中,还需要不断练习和巩固,提高编程能力。