#P14073. 【循环1】塔子哥的天平
-
ID: 1841
Tried: 1026
Accepted: 408
Difficulty: 1
【循环1】塔子哥的天平
【循环1】塔子哥的天平
前言
本篇作为第一题,先对 Python 语法做一些基础性的讲解。如果基础语法过关的同学可以直接跳过这一段,主要包括以下方面:
- Python 列表与动态数组
- Python
for
循环使用
1. Python 列表与动态数组
由于本题要计算天平左边所有数是否等于右边天平所有数,那么我们肯定要存入左边所有天平的数据和右边所有天平的数据。那么问题来了,在 Python 中我们该如何存入数据呢?
这里介绍两种常用方式,一种是用列表(List)存储,另一种是使用动态数组(array
模块),但在大多数情况下,列表已经足够使用。
-
列表存储:
列表是 Python 中最常用的动态数组类型,可以存储任意类型的元素,并且支持动态扩展。
示例:
# 定义一个空列表 a = [] # 定义一个包含元素的列表 b = [1, 2, 3, 4, 5] # 使用列表推导式创建列表 c = [i for i in range(10)] print(a) # 输出: [] print(b) # 输出: [1, 2, 3, 4, 5] print(c) # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
注意事项:
-
索引从0开始:列表的第一个元素索引为0,最后一个元素的索引为
len(list) - 1
。print(b[0]) # 输出: 1 print(b[-1]) # 输出: 5
-
动态扩展:列表的大小可以动态改变,可以随时添加或删除元素。
b.append(6) # 在列表末尾添加元素6 b.insert(0, 0) # 在索引0的位置插入元素0 print(b) # 输出: [0, 1, 2, 3, 4, 5, 6] b.pop() # 删除并返回最后一个元素 print(b) # 输出: [0, 1, 2, 3, 4, 5] del b[0] # 删除索引0的元素 print(b) # 输出: [1, 2, 3, 4, 5]
-
-
动态数组(
array
模块):如果需要存储大量的数值数据,并且希望节省内存,可以使用
array
模块。但对于大多数竞赛题目,使用列表已经足够。示例:
import array # 创建一个整数类型的数组 a = array.array('i', [1, 2, 3, 4, 5]) print(a) # 输出: array('i', [1, 2, 3, 4, 5]) # 添加元素 a.append(6) print(a) # 输出: array('i', [1, 2, 3, 4, 5, 6])
注意事项:
array
需要指定元素的类型码,例如'i'
表示整数,'f'
表示浮点数等。array
的操作方式与列表类似,但功能相对有限。
2. Python for
循环使用
Python 中的 for
循环用于遍历序列(如列表、字符串、元组等)中的元素。其基本语法结构如下:
for 变量 in 序列:
# 循环体
示例:
# 遍历列表
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(fruit)
输出:
apple
banana
cherry
代码解析:
- 变量:在每次循环中,
fruit
会依次取序列fruits
中的每个元素。 - 序列:可以是列表、元组、字符串等可迭代对象。
- 循环体:执行与变量相关的操作。
使用 range()
函数进行数值遍历
range()
函数生成一个整数序列,常用于需要循环固定次数的情况。
for i in range(5):
print(f"当前i的值: {i}")
输出:
当前i的值: 0
当前i的值: 1
当前i的值: 2
当前i的值: 3
当前i的值: 4
变种:
-
指定起始和结束:
for i in range(1, 6): print(i)
输出:
1 2 3 4 5
-
指定步长:
for i in range(0, 10, 2): print(i)
输出:
0 2 4 6 8
-
反向遍历:
for i in range(5, 0, -1): print(i)
输出:
5 4 3 2 1
本题题解
接下来就要正式讲解这道题了。
题面描述
塔子哥正在进行一项有趣的实验,他有两个装满不同物品的天平。左边的天平有 n
个物品,右边的天平有 m
个物品。塔子哥想知道,在这两个天平上物品的重量是否相等。如果相等,他将返回“Equal”,否则返回“Not Equal”。
输入描述
- 第一行输入两个整数
n
和m
(1 ≤ n, m ≤ 1000
),分别表示左边和右边天平上的物品数量。 - 接下来一行输入
n
个整数,表示左边天平上每个物品的重量,重量范围为1 ≤ weight ≤ 100
。 - 接着一行输入
m
个整数,表示右边天平上每个物品的重量,重量范围为1 ≤ weight ≤ 100
。
输出描述
- 输出一行,如果两个天平的总重量相等,则输出“Equal”;否则输出“Not Equal”。
样例1
输入
5 5
1 2 3 4 5
5 4 3 2 1
输出
Equal
思路
本题的意思本质上是给定两个数组,让我们判断两个数组的和是否相等。那么我们首先就要想办法对每个数组进行“求和”。
对于 Python 代码,我们可以利用列表的内置函数 sum()
来简化求和操作。同时,Python 的输入处理也非常简洁,可以通过 input().split()
直接读取并转换为整数列表。
代码解释
-
读取输入
n, m = map(int, input().split())
input()
函数用于从标准输入(通常是键盘)读取一行输入。split()
方法将输入的字符串按空格分割成多个部分,返回一个列表。例如,输入"5 5"
会被分割成["5", "5"]
。map(int, ...)
将列表中的每个元素转换为整数类型。n, m = ...
将转换后的整数分别赋值给变量n
和m
,分别表示左边和右边天平上的物品数量。
-
读取天平物品重量
left_weights = list(map(int, input().split())) right_weights = list(map(int, input().split()))
input().split()
读取下一行输入,并按空格分割成多个部分。map(int, ...)
将分割后的字符串转换为整数。list(...)
将map
对象转换为列表。left_weights
和right_weights
分别存储左边和右边天平上的物品重量列表。
-
计算总重量
left_total = sum(left_weights) right_total = sum(right_weights)
- 使用内置的
sum()
函数计算列表中所有元素的和。 left_total
和right_total
分别存储左边和右边天平的总重量。
- 使用内置的
-
比较并输出结果
if left_total == right_total: print("Equal") else: print("Not Equal")
- 使用
if
语句比较两个总重量是否相等。 - 如果相等,输出
"Equal"
;否则,输出"Not Equal"
。
- 使用
完整示例
# 读取天平物品数量
n, m = map(int, input().split())
# 读取左边天平的物品重量
left_weights = list(map(int, input().split()))
# 读取右边天平的物品重量
right_weights = list(map(int, input().split()))
# 计算左边天平的总重量
left_total = sum(left_weights)
# 计算右边天平的总重量
right_total = sum(right_weights)
# 比较两个天平的总重量并输出结果
if left_total == right_total:
print("Equal")
else:
print("Not Equal")
总结
- 输入处理:使用
input().split()
和map(int, ...)
可以高效地读取并转换输入数据。 - 列表操作:Python 的列表非常灵活,支持动态扩展和多种内置操作。
- 求和:内置的
sum()
函数简化了求和操作,无需手动使用循环累加。 - 条件判断:使用
if-else
语句根据条件执行不同的操作。
题目描述:
塔子哥正在进行一项有趣的实验,他有两个装满不同物品的天平。左边的天平有 n 个物品,右边的天平有 m 个物品。塔子哥想知道,在这两个天平上物品的重量是否相等。如果相等,他将返回“Equal”,否则返回“Not Equal”。
请你帮助塔子哥,给出判断的结果。
输入:
- 第一行输入两个整数 n 和 m (1≤n,m≤1000),分别表示左边和右边天平上的物品数量。
- 接下来一行输入 n 个整数,表示左边天平上每个物品的重量,重量范围为 1≤weight≤100。
- 接着一行输入 m 个整数,表示右边天平上每个物品的重量,重量范围为 1≤weight≤100。
输出:
- 输出一行,如果两个天平的总重量相等,则输出“Equal”;否则输出“Not Equal”。
数据范围:
- 1≤n,m≤1000
- 1≤weight≤100
示例:
输入:
3 3
10 20 30
30 20 10
输出:
Equal
输入:
2 3
15 25
10 20 20
输出:
Not Equal