Python ACM模式处理多行输入

可以用IDLE尝试,按Ctrl + D结束多行输入。

1. input:读入一行,字符串格式,结尾不带\n

2. sys.stdin.readline:读入一行,字符串格式,结尾带\n

注意1,2两种方式都读取的是一行数据,一行里如果有多个值记得分割split()

3. 不确定行数的多行读取

● 方式一:

"""
链接:https://ac.nowcoder.com/acm/contest/5657/K
来源:牛客网

输入描述:
输入有多组测试用例,每组空格隔开两个整数

输出描述:
对于每组数据输出一行两个整数的和

示例1
输入
1 1
输出
2
"""

import sys

for line in sys.stdin:
    a = line.split()
    print(int(a[0]) + int(a[1]))

高鲁棒性的版本:

while True:
    try:
        line = input()
        if not line:
            break
            
        a, b = map(int, line.split())
        print(a + b)
        
    except EOFError:
        break

● 方式二:

import sys

for line in sys.stdin.readlines():
    nums = list(map(int, line.split()))
    print(nums[0] + nums[1])

IDLE中敲完最后一行的输入后,回车,然后以Ctrl + D结束多行输入。

4. 确定行数的多行输入:

import sys

t = int(input())  # 输入的函数
for _ in range(t):
    line = sys.stdin.readline().split()
    line = list(map(int, line))
    # a, b = map(int, input().split())
    print(line[0] + line[1])

5. 多行输入,按特定符号结束输入:

import sys

for line in sys.stdin:
    line_  = list(map(int, line.split()))
    if line_[0] == 0 and line_[1] == 0: # 如果输入是0 0就结束输入
        break
    else:
        print(line_[0] + line_[1])
# 解法二
while True:
    a, b = map(int, input().split()) # 确定只有两个数才能这么写,如果有多个数要用list(map())
    if a == 0 and b == 0:
        break
    # 输出结果
    print(a + b)

6. 多行输入,特定数字结束输入

"""
链接:https://ac.nowcoder.com/acm/contest/5657/D
来源:牛客网

输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。

输出描述:
每组数据输出求和的结果

示例1
输入
4 1 2 3 4
5 1 2 3 4 5
0
输出
10
15
"""

import sys

for line in sys.stdin.readlines():
    if line[0] == '0':
        break
    else:
        line_ = list(map(int, line.split()))
        print(sum(line_[1:]))

7. 多行字符串输入:

"""
链接:https://ac.nowcoder.com/acm/contest/5657/I
来源:牛客网

输入描述:
多个测试用例,每个测试用例一行。

每行通过空格隔开,有n个字符,n<100
输出描述:
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开

链接:https://ac.nowcoder.com/acm/contest/5657/I
来源:牛客网

示例1
输入
a c bb
f dddd
nowcoder

输出
a bb c
dddd f
nowcoder

"""

import sys

for line  in sys.stdin:
    s = sorted(line.split())
    print(' '.join(s))

8. 多行字符串输入,以,隔开

"""
链接:https://ac.nowcoder.com/acm/contest/5657/J
来源:牛客网

输入描述:
多个测试用例,每个测试用例一行。
每行通过,隔开,有n个字符,n<100

输出描述:
对于每组用例输出一行排序后的字符串,用','隔开,无结尾空格

示例1
输入
a,c,bb
f,dddd
nowcoder
输出
a,bb,c
dddd,f
nowcoder
"""

import sys

for line in sys.stdin:
    s = sorted(line.strip().split(','))  # 注意line最后有个`\n`要去掉!
    print(','.join(s))
# 解法二
while True:
    try:
        line = input()
        if not line:
            break
        
        words = line.split(',')
        sorted_words = sorted(words)
        
        output = ','.join(sorted_words)
        print(output)
    
    except EOFError:
        break

Tips

  • 字符串的strip()函数可以去除\n\t等特殊符号。
  • 运用list(map(int, a))类型的函数可以快速地转换格式。

list排序的两种方法

a = [2, 3, 1, 6],可以用如下方式对该列表进行排序:

  1. sorted(a)返回一个排序后的结果,不会改变原始列表,对字符串也同样适用;
  2. a.sort()无返回值,此时原始列表a已经排序好。注意这种方式会改变原始列表,对字符串也适用。

参考资料:

【牛客】ACM输入输出练习
LeetCode刷题误区以及python的ACM编程(对这段时间做公司笔试题的一个反思)

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin Davis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值