如何使用sys模块处理多行输入,实现指定数字规则的求和程序?
解决多行输入的行分割与目标逻辑实现问题
要把每行数值存入独立列表,直接迭代sys.stdin即可——它会自动按行分割输入内容。每一行读取后,先清理空白、拆分字符串,再转成整数列表,就能实现每行数据独立存储。
结合你的需求,完整代码如下:
import sys for line in sys.stdin: # 处理单行:去除首尾空白、拆分字符串、转换为整数列表 num_list = list(map(int, line.strip().split())) # 统计当前行中以3结尾的元素数量 end_with_3_count = 0 for num in num_list: if num % 10 == 3: end_with_3_count += 1 # 判断是否满足"偶数个以3结尾元素"的条件 if end_with_3_count % 2 == 0 and end_with_3_count > 0: # 输出该行元素和并终止程序,确保只返回第一个符合条件的行 print(sum(num_list)) sys.exit() # 遍历所有行后未找到符合条件的,输出-1 print(-1)
关键说明:
- 行分割处理:
sys.stdin作为可迭代对象,每次循环返回一行输入(包含换行符),strip()会移除首尾的换行、空格等空白字符,避免拆分出无效空字符串。split()默认按任意空白(空格、制表符等)拆分,适配常见的整数序列输入格式。 - 统计逻辑:用
num % 10 == 3判断非负整数是否以3结尾,这是最直接的方式——一个数的最后一位等于它对10取模的结果。 - 终止逻辑:找到第一个符合条件的行后,立即输出和并调用
sys.exit()终止程序,保证不会继续处理后续行,符合"第一个"的要求。 - 特殊情况处理:如果需求中"偶数个"包含0个(即一行中没有以3结尾的元素也算符合条件),只需去掉判断条件里的
end_with_3_count > 0即可;如果要求必须至少有2个(比如示例中的情况),则保留该条件。
内容的提问来源于stack exchange,提问作者Alba
相关产品推荐
相关产品推荐

