编程机试输入输出模板-python3为例

Description:python3.x版
Date:2020.4.17
Author:zhww
本文档记录一些机试的输入输出常用模板,旨在经验记录,也希望给还不熟悉编程笔试平台的Coders一点帮助,从而在各大公司的笔试招聘中无需烦恼于输入输出。
因为作者目前经验不足,有不对的地方还请大家多多指正,我也会根据代码练习及笔试经验,积极补充完善。

在线笔试须知

常用刷题平台:leetcode、newcoder、acmcode

  • 力扣网:提供了输入输出接口,练习中无需考虑用例输入输出;
  • 牛客网: 需要包含完整的输入输出,但不需要连续输入(更正:有时需要连续的输出,除了while 1,还需要加try...except... 总感觉牛客编程系统对python不够友好,试了几次都不容易通过,或者是耗时太长,so sad);
  • 赛码网:需要包含完整的输入输出,且需要while 1来循环输入;

目录

  • 主要函数
  • IO模板示例
    • 单输入
    • 单行输入
    • 多行输入
    • 输出
  • 实战
    • 题目
    • 牛客网写法
    • 赛码网写法
    • Leetcode写法
  • 参考博客

主要函数

input() Python3.x 中 input() 函数接受一个标准输入数据,返回为 string 类型。

print() 用于打印输出,常用参数sep、end
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)

  • objects – 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
  • sep – 用来间隔多个对象,默认值是一个空格。
  • end – 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。

map() 根据提供的函数对指定序列做映射。返回列表或迭代器。
list() 用于将元组或字符串转换为列表。
split() 通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串,返回分割后的字符串列表。
str.split(str="", num=string.count(str))

  • str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
  • num – 分割次数。默认为 -1, 即分隔所有。

IO模板示例

单输入

输入形式

16

AC

输入模板

# 输入一个数字,int: 16
a = int(input())

# 输入一个字符/字符串,str: AC
c = input()

单行输入

输入形式

2 8 1

ABC CSA

输入模板

# 输入多位数字,直接得到 list[int]:[2,8,1]
line = list(map(int,input().split(' ')))

# 输入一行字符/字符串list[str]:['ABC','CSA']
c = [i for i in input().split()]
# c = input().split()

多行输入

形式

输入:第一行m,n分别代表人数和科目,接下来的是某人n科成绩;
2 3
15 32 23
58 20 69

输入:多行数字序列,每个序列占一行且由N(2 3 63 72 72 1
1 52 62 5 1
2 4 7
5 8 9 3 53 12 74

输入模板

# 行数已知,list[[int]]:[[15, 32, 23], [58, 20, 69]]
m,n = list(map(int,input().split()))
lines = []
for _ in range(m):
    lines.append(list(map(int, input().split(' '))))
    # lines.append([int(x) for x in input().split()])

# 行数未知
res = []
while True:
    try:
        s = input()
        res.append(list(map(int, s.split(' '))))
        # res.append(s.split(' '))
    except:
        break
#算法主体#
...

输出

形式

每行输出一个结果
5

每行输出多个结果,单行输出,空格隔开
a b c s g

输出模板

# 单行单输出
print(res)

# 单行多输出,空格隔开
for i in range(len(res)):
    print(res[i], end=' ')

实战

题目

  1. 题目描述:
    • 连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
    • 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
  2. 输入输出描述:
    • 连续输入字符串(输入2次,每个字符串长度小于100)
    • 输出到长度为8的新字符串数组
  3. 示例:
    • 输入:
      abc
      123456789

    • 输出:
      abc00000
      12345678
      90000000

牛客网写法

平台支持: 华为机试、腾讯、阿里

代码示例

# 牛客网版本1:不带循环
s = []
res = []
# input
for _ in range(2):
    s.append(input())
# solve
for i in range(2):
    if len(s[i]) == 0:
        continue
    zero = len(s[i])%8
    s[i] += '0'*(8-zero) if zero>0 else ""
    for j in range(len(s[i])//8):
        res.append(s[i][j*8:j*8+8])
# output
for i in range(len(res)):
    print(res[i])
# 牛客网版本2:带循环
while True:
	try:
		s = []
		res = []
		# input
		for _ in range(2):
    		s.append(input())
		# solve
		for i in range(2):
    		if len(s[i]) == 0:
        		continue
    		zero = len(s[i])%8
    		s[i] += '0'*(8-zero) if zero>0 else ""
    		for j in range(len(s[i])//8):
        		res.append(s[i][j*8:j*8+8])
		# output
		for i in range(len(res)):
    		print(res[i])
	except:
		break

赛码网写法

笔试平台支持: 美团点评笔试
注意 测试用例是连续输入的,故算法前需要加上 while 1:

代码示例

#赛码网版本#
def main():
    s = []
    res = []
    # input
    for _ in range(2):
        s.append(input())
    # solve
    for i in range(2):
        if len(s[i]) == 0:
            continue
        zero = len(s[i])%8
        s[i] += '0'*(8-zero) if zero>0 else ""
        for j in range(len(s[i])//8):
            res.append(s[i][j*8:j*8+8])
    # output
    for i in range(len(res)):
        print(res[i])

while 1:
    main()

Leetcode写法

笔试平台支持: 暂无
适合刷题,主要以面向对象的方式编写,无需编写输入输出。
好处:专注算法,且锻炼面向对象的思维方式;
坏处:算法不能直接本地运行,且容易忽视输入输出的表达。

代码示例

#leetcode版本#
class Solution(object):
    def str8Split(self, s):
        '''
        type List[str]
        rtype List[str]
        '''
        res = []
        for i in range(2):
            if len(s[i]) == 0:
                continue
            zero = len(s[i]) % 8
            s[i] += '0' * (8 - zero) if zero > 0 else ""
            for j in range(len(s[i]) // 8):
                res.append(s[i][j * 8:j * 8 + 8])
        return res

## 本地运行需要以下输入输出的补充
s = []
# input
for _ in range(2):
    s.append(input())
# solve
solution = Solution()
res = solution.str8Split(s)
# output
for i in range(len(res)):
    print(res[i])

参考博客

[1] https://blog.csdn.net/qq_39938666/java/article/details/101004633
[2] https://www.runoob.com/python3/python3-built-in-functions.html

你可能感兴趣的:(笔记)