python编程题
- 给定一个年份,判断这一年是不是闰年。
def is_leap_year(year):
if year % 4 != 0:
return False
elif year % 100 != 0:
return True
elif year % 400 != 0:
return False
else:
return True
# 测试函数
year = int(input("请输入一个年份: "))
if is_leap_year(year):
print(f"{year} 是闰年")
else:
print(f"{year} 不是闰年")
- 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。 输入格式 输入仅包含两行,每行描述一个矩形。 在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。 输出格式 输出仅包含一个实数,为交的面积,保留到小数后两位。
def calculate_intersection_area(rect1, rect2):
# 提取矩形的坐标
x1, y1, x2, y2 = rect1
x3, y3, x4, y4 = rect2
# 计算交集的坐标
# 交集在x轴上的范围
x_start = max(x1, x3)
x_end = min(x2, x4)
# 交集在y轴上的范围
y_start = max(y1, y3)
y_end = min(y2, y4)
# 检查是否有交集
if x_start < x_end and y_start < y_end:
# 计算交集面积
intersection_area = (x_end - x_start) * (y_end - y_start)
return round(intersection_area, 2)
else:
# 没有交集
return 0.0
# 读取输入
rect1_input = input().split()
rect1 = (float(rect1_input[0]), float(rect1_input[1]), float(rect1_input[2]), float(rect1_input[3]))
rect2_input = input().split()
rect2 = (float(rect2_input[0]), float(rect2_input[1]), float(rect2_input[2]), float(rect2_input[3]))
# 计算并输出交集面积
intersection_area = calculate_intersection_area(rect1, rect2)
print(intersection_area)
- 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。
def solveNQueens(n):
# 初始化棋盘
board = [['.' for _ in range(n)] for _ in range(n)]
# 记录每行、每列和两个对角线上是否有皇后的集合
rows, cols, diag1, diag2 = set(), set(), set(), set()
# 记录不能放置皇后的位置
forbidden = set()
# 记录黑皇后和白皇后的数量
black_queens, white_queens = 0, 0
def can_place(row, col):
# 检查是否有皇后在同一行、同一列或对角线上
return (
row not in rows and
col not in cols and
row - col not in diag1 and
row + col not in diag2
)
def place_queen(row, color):
nonlocal black_queens, white_queens
# 尝试在当前行的每一列放置皇后
for col in range(n):
if (row, col) not in forbidden and can_place(row, col):
# 标记该位置有皇后
board[row][col] = 'B' if color == 'black' else 'W'
rows.add(row)
cols.add(col)
diag1.add(row - col)
diag2.add(row + col)
# 递归放置下一个皇后
if color == 'black':
if row < n - 1:
place_queen(row + 1, 'black')
else:
black_queens += 1
place_queen(0, 'white')
else:
if row < n - 1:
place_queen(row + 1, 'white')
else:
white_queens += 1
# 如果所有皇后都放置完毕,则增加总方案数
if black_queens == n and white_queens == n:
nonlocal total_solutions
total_solutions += 1
# 回溯,撤销放置皇后的操作
board[row][col] = '.'
rows.remove(row)
cols.remove(col)
diag1.remove(row - col)
diag2.remove(row + col)
# 记录总方案数
total_solutions = 0
# 开始放置黑皇后
place_queen(0, 'black')
# 返回总方案数
return total_solutions
# 测试代码
n = 4 # 更改 n 的值来测试不同的棋盘大小
print(f"Total solutions for {n}x{n} board: {solveNQueens(n)}")
- 某公司有一台打印机,需要将购买成本分年均摊到隔年的费用中。请编写一个程序,根据用户输入的购买金额和预计使用年限计算每年的分摊费用。要求对输入异常进行适当的处理(输入错误、被零除)。另外,当计算得到每年的分摊费用大于100时,抛出InvalidNumberError,并进行处理。
- 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4种情况之一:
1:两个字符串长度不等。比如 Beijing 和 Hebei
2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
def compare_strings(s1, s2):
# 检查两个字符串长度是否相等
if len(s1) != len(s2):
return "两个字符串长度不等"
# 检查两个字符串是否完全相同(区分大小写)
if s1 == s2:
return "两个字符串不仅长度相等,而且相应位置上的字符完全一致"
# 检查两个字符串是否在不区分大小写的情况下相同
if s1.lower() == s2.lower():
return "两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致"
# 如果以上条件都不满足,则它们既不相同也不满足不区分大小写的相同
return "两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致"
print(compare_strings(str1, str2))
- 话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。 于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。 他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上,它们就会停下来休息s秒。对于不同的兔子,t,s的数值是不同的,但是所有的乌龟却是一致——它们不到终点决不停止。 然而有些比赛相当漫长,全程观看会耗费大量时间,而小华发现只要在每场比赛开始后记录下兔子和乌龟的数据——兔子的速度v1(表示每秒兔子能跑v1米), 乌龟的速度v2,以及兔子对应的t,s值,以及赛道的长度l——就能预测出比赛的结果。但是小华很懒, 不想通过手工计算推测出比赛的结果,于是他找到了你——清华大学计算机系的高才生——请求帮助,请你写一个程序, 对于输入的一场比赛的数据v1,v2,t,s,l,预测该场比赛的结果。
程序的基本逻辑:
初始化兔子和乌龟的位置为0。
每一秒,更新兔子和乌龟的位置。
检查兔子是否领先乌龟t米或以上,如果是,则兔子休息s秒。
当任何一个参赛者到达终点时,停止模拟并输出比赛结果。
def race_simulation(v1, v2, t, s, l):
rabbit_position = 0 # 兔子的位置
tortoise_position = 0 # 乌龟的位置
time_elapsed = 0 # 经过的时间
rabbit_resting = False # 兔子是否在休息
while True:
# 如果兔子没有在休息,则更新兔子的位置
if not rabbit_resting:
rabbit_position += v1
# 更新乌龟的位置
tortoise_position += v2
# 检查兔子是否领先乌龟t米或以上,如果是,则兔子开始休息
if rabbit_position - tortoise_position >= t and not rabbit_resting:
rabbit_resting = True
print(f"兔子在第{time_elapsed+1}秒领先乌龟{t}米以上,开始休息{s}秒")
# 如果兔子已经休息完s秒,则兔子继续赛跑
if rabbit_resting and time_elapsed % s == s - 1:
rabbit_resting = False
# 检查是否有参赛者到达终点
if rabbit_position >= l:
return "兔子获胜"
elif tortoise_position >= l:
return "乌龟获胜"
# 增加时间
time_elapsed += 1
# 调用函数并打印结果
result = race_simulation(v1, v2, t, s, l)
print(f"比赛结果为:{result}")
- 实现用户输入用户名和密码,当用户名为 admin且 密码为 123 时,显示登陆成功,否则登陆失败!
# 用户预设的用户名和密码
preset_username = "admin"
preset_password = "123"
# 获取用户输入的用户名和密码
username = input("请输入用户名: ")
password = input("请输入密码: ")
# 检查用户名和密码是否匹配预设值
if username == preset_username and password == preset_password:
print("登陆成功")
el