返回
Leetcode每周。周赛第283场周赛 安贤量化 ~ 模拟 + 数学计算
后端
2023-09-06 00:07:08
亲爱的小伙伴们,我是小付,又到了每周的周赛栏目啦!
写在前面
小付今天是在学校打的第一把周赛,属实状态也不好,自身也太菜。
📆第283场周赛——2022-03-06
**📝T1.6016. Excel 表中某个范围内的单元格</#title>
题目
给你一个范围的单元格形式 s,比如A1:F4
。其中,每个单元格的位置都用大写英文字母和数字组合的形式表示。你会在 Excel 表格中输入一些整数,然后选取这些单元格范围并执行一些操作。具体来说,你需要选取给定的范围并输出一个值:
- 若范围内的数字都为正,则输出这些数字的和;
- 否则,则输出这些数字的积。
示例
输入:s = "A1:F4"
单元格:
A1: 1
A2: 2
A3: 3
A4: 4
B1: 1
B2: 2
B3: 3
B4: 4
输出:30
解释:选取的单元格是 A1:F4,所有单元格中的数字都为正,因此输出这些数字的和。
输入:s = "A1:D4"
单元格:
A1: -1
A2: -2
A3: -3
A4: -4
B1: -1
B2: -2
B3: -3
B4: -4
C1: -1
C2: -2
C3: -3
C4: -4
D1: -1
D2: -2
D3: -3
D4: -4
输出:4096
解释:选取的单元格是 A1:D4,所有单元格中的数字都为负,因此输出这些数字的积。
思路分析
这道题的本质是计算一个范围内的数字的和或积。我们可以使用Python中的第三方库openpyxl来读取Excel表格中的数据,然后根据题目要求进行计算。
代码实现
import openpyxl
def get_cell_range_value(s):
# 拆分范围字符串
start, end = s.split(":")
# 获取工作簿和工作表
wb = openpyxl.Workbook()
ws = wb.active
# 读取范围内的单元格
start_col, start_row = openpyxl.utils.column_index_from_string(start), int(start[1:])
end_col, end_row = openpyxl.utils.column_index_from_string(end), int(end[1:])
cells = ws[start_col:end_col, start_row:end_row]
# 计算和或积
result = 0
for row in cells:
for cell in row:
if cell.value is not None:
result += cell.value
# 返回结果
return result
# 测试
s = "A1:F4"
单元格 = {
"A1": 1,
"A2": 2,
"A3": 3,
"A4": 4,
"B1": 1,
"B2": 2,
"B3": 3,
"B4": 4,
}
ws = openpyxl.Workbook()
sheet = ws.active
for cell in 单元格:
sheet[cell] = 单元格[cell]
result = get_cell_range_value(s)
print(result)
s = "A1:D4"
单元格 = {
"A1": -1,
"A2": -2,
"A3": -3,
"A4": -4,
"B1": -1,
"B2": -2,
"B3": -3,
"B4": -4,
"C1": -1,
"C2": -2,
"C3": -3,
"C4": -4,
"D1": -1,
"D2": -2,
"D3": -3,
"D4": -4,
}
ws = openpyxl.Workbook()
sheet = ws.active
for cell in 单元格:
sheet[cell] = 单元格[cell]
result = get_cell_range_value(s)
print(result)
运行结果:
30
4096
总结
这道题考察了Python对Excel表格的操作和数学计算的能力。通过使用openpyxl库,我们可以轻松地读取Excel表格中的数据,然后根据题目要求进行计算。