不得不说我的代码能力太弱了,只能先从简单的开始了。

1.A+B问题I

题目描述

你的任务是计算a+b。
输入描述
输入包含一系列的a和b对,通过空格隔开。一对a和b占一行。
输出描述
如对于输入中的第二对a和b,
在输出中它们的和应该也在第二行。
输入示例
1 2
3 4
输出示例
3
7

我的解法

1
2
3
4
5
6
while True:
try:
a,b = map(int,input().split())
print(a+b)
except:
break

好吧我承认我的代码能力是极差的。
第一个问题如何保证一直接受用户输入,首先就要用一个一直循环的while语句,直到没有输入后跳出循环。可以用if判断啥时候输入为空,也可以用try except保证输入的合法性。
然后就是map函数,这个函数的核心是对序列里面的每一个元素批量应用同一个处理规则,这里是将输入的字符串转换为整数。
这里的.split()函数是将输入的字符串按照空格隔开,返回一个列表。
哦,补充一下input函数输入的内容是字符串。

2.A+B问题II

题目描述

计算a+b,但输入方式有所改变。
输入描述
第一行是一个整数N,表示后面会有N行a和b,通过空格隔开。
输出描述
对于输入的每对a和b,你需要在相应的行输出a、b的和。
如第二对a和b,对应的和也输出在第二行。
输入示例
2
2 4
9 21
输出示例
6
30
提示信息
注意,测试数据不仅仅一组。也就是说,会持续输入N以及后面的a和b

解法1

这道题和上一道题的区别在于,上一道题是一直接受用户输入,直到没有输入为止。
这道题是先接受一个整数N,然后接受N行a和b,输出N行a+b。而且分组输入导致每一块都有组数N,就不能像上一道题一样无脑接收输入了。
补充知识:
.strip()函数是去掉字符串首尾的空格,包括换行符、制表符等。

1
2
3
4
5
6
7
8
while True:
try:
N = int(input().strip())
for i in range(N):
a,b = map(int,input().split())
print(a+b)
except:
break

解法2

1
2
3
4
5
6
import sys
for line in sys.stdin:
N=int(line.strip())
for i in range(N):
a,b=map(int,sys.stdin.readline().strip().split())
print(a+b)

导入sys模块后,通过for line in sys.stdin启动外层循环——这个循环的作用是逐个读取输入中“每组数据的开头行(即N所在的行)”。每次外层循环执行时:

  1. 首先处理当前读取到的line:这行内容是当前组的分组信息(整数N),通过int(line.strip())转成整数后,明确“这一组需要处理N对a和b”。

  2. 接着启动内层循环for _ in range(N):这个循环的作用是主动读取当前组内的N行a和b数据
    每次内层循环会通过sys.stdin.readline()读取一行新的输入(这行是a和b,用空格分隔),经过strip()清理空白、split()拆分、map(int, ...)转整数后,得到a和b的值,计算并输出它们的和。
    内层循环会严格执行N次,确保当前组的N对a和b全部被处理。

  3. 内层循环结束后,外层循环才会继续执行:此时外层循环会自动读取下一行输入,而这一行恰好是“下一组数据的N”(因为内层循环已经主动读完了上一组的N行a和b,不会让外层循环误读这些行)。

整个过程中,外层循环负责“按组拆分输入”(找到每一组的N),内层循环负责“按组内数量处理数据”(读完N对a和b),两层循环分工配合,既不会漏读数据,也不会错把a和b的行当成N处理,最终完美实现“持续处理多组N及对应a+b”的题目要求。
sys.stdin():内置的标准输入流对象,用于从控制台或其他输入源读取数据。
sys.stdin.readline():读取输入的一行,从stdin中读取一行数据,包括换行符。