牛客网Python笔试技巧、单行多行输入方法以及代码调试技巧
目录
一、笔试技巧
二、单行、多行输入
三 、代码调试技巧
一、笔试技巧
提高通过率大原则:
1.本地IDE调代码的速度更快
2.修改已>0%的代码比新做一道题更快
3.一定要看清题意!!!
提高通过率的技巧:
1.时间复杂度问题:增加条件break或continue出循环,能break尽量break;
减少不必要的判断条件(比如在不在字典中);
做一些排序来减少后期的工作量
2.空间复杂度问题:
3.边界条件:某些数据是不是始终存在
测试用例通过但0%的原因:
1.没有理解题意
输入
第一行说明nmp这种数据量,最后一个参数一般为第二行开始有几行,且是字符型的数据输入,可以按下面的方法进行输入处理。
第一行:
a,b,c=[int(i) for i in input(0.solit()]
第二行:
info=[]
for i in range(c):
info.append([int(i) for i in input().split()])
不用input()的话也可以用sys.stdin.readline().strip()
输出
一般逐行打印
for i in result:
print(i)
常用数据结构
list和dict比较好用,不能导入numpy库
list:做整体的排序
dict:做局部的排序,要在单个条件下xxx
常用函数
list
min() max() sum() .index()
.remove(具体内容) .pop(索引号) del a[索引号]
.sort(key=lambda x: x[0])
.sort(key=lambda x:(-x[1],x[0],x[2]))#默认是升序,加个符号变降序,可做多级排序。
sorted()#不在本地做排序
元素 in list名称
变量
float('inf')无穷大
字典
.keys()
.values()
.items()#返回的是元组
字符串
.strip() 去除首位空格
.strip().strip(‘-a’)去除首位空格和字符
S[:3]+S[5:] 拼接字符串,去除某个字符
.replace(‘a’,’b’) 替换字符
re.sub(‘a’,’b’,s) 替换字符
浮点数输入:
a = eval(input())
# eval()对输入的字符转换对算式并计算
二、单行、多行输入
python的读取方法包括如下方法readline、readlines和read。
python
import sys
try:while True:line = sys.stdin.readline().strip()if line == '':breaklines = line.split()print int(lines[0]) + int(lines[1])
except:pass
python3
import sys
for line in sys.stdin:a = line.split()print(int(a[0]) + int(a[1]))
代码多行读取
import sys
lines = []
while True:line = sys.stdin.readline().strip()if line == "":breaklines.append(line)
print(lines)
2. 单行输入:注意要通过强制转换,将字符串转为数字
import sys
line = sys.stdin.readline().strip()
print(line)
3.
Python中的Input()函数在输入时,遇到回车符,那么一次输入就结束了。这不能满足输入多行文本并且行数也不确定的情形,当然输入空行也是允许的。
方法1:利用异常处理机制实现
lines=[]
while True:
try:
lines.append(input())
except:
break
print(lines)
实际运行时,可以输入多行,当输入最后一行并回车后,按组合键ctrl+D,表示EOF,即End of File、文件尾的意思。此时,input()函数会遇到EOF的异常。Python的异常处理机制将捕获到此异常,执行except部分的语句,此语句为break,因此,立即跳出while循环。这正好满足了我们的需要。
例如,输入:
12 345 3.14159回车
I am a student.回车
Hello, world!回车
在集成开发环境中运行时,请按ctrl+D组合键结束多行输入。如果在Windows命令行下用"python 源代码文件名.py”方式运行时,请按ctrl+Z组合键结束多行输入。
输出结果如下:
['12 345 3.14159', 'I am a student.', 'Hello, world!']
方法二:利用标准输入文件对象sys.stdin的readlines()函数实现
因为键盘是标准输入设备,计算机操作系统将键盘也是当做文件来对待的,其实计算机操作系统将包括键盘显示器鼠标打印机等在内的各种外围设备都当做文件来对待。Python中与键盘对应的文件对象是sys.stdin,因此可以利用sys.stdin.readlines()函数来实现读取多行文本,一直到遇到文件尾即EOF为止。
import sys
lines=sys.stdin.readlines()
print(lines)
输入同上,
输出如下:
['12 345 3.14159\n', 'I am a student.\n', 'Hello, world!\n']
可以看出,这种方式2与方式1的输出结果有细微差别,每行末尾有'\n'字符(即回车符)。
————————————————
===============================================================================================
转自:https://www.cnblogs.com/BigFishFly/p/6622784.html
python之sys.stdout、sys.stdin
转自:http://www.cnblogs.com/turtle-fly/p/3280519.html
本文环境:Python 2.7
使用 print obj 而非 print(obj)
sys.stdin,sys.stdout,sys.stderr: stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向(script.py < file.txt>)输出和输入到其它设备( device ), 或者以非标准的方式处理它们
1.1 sys.stdout 与 print
当我们在 Python 中打印对象调用 print obj 时候,事实上是调用了 sys.stdout.write(obj+'\n')
print 将你需要的内容打印到了控制台,然后追加了一个换行符
print 会调用 sys.stdout 的 write 方法
以下两行在事实上等价:
sys.stdout.write('hello'+'\n')
print 'hello'
1.2sys.stdin 与 raw_input
当我们用 raw_input('Input promption: ') 时,事实上是先把提示信息输出,然后捕获输入
以下两组在事实上等价:
hi=raw_input('hello? ')
print 'hello? ', #comma to stay in the same line
hi=sys.stdin.readline()[:-1] # -1 to discard the '\n' in input stream
1.3从控制台重定向到文件
原始的 sys.stdout 指向控制台
如果把文件的对象的引用赋给 sys.stdout,那么 print 调用的就是文件对象的 write 方法
f_handler=open('out.log', 'w')
sys.stdout=f_handler
print 'hello'
# this hello can't be viewed on concole
# this hello is in file out.log
记住,如果你还想在控制台打印一些东西的话,最好先将原始的控制台对象引用保存下来,向文件中打印之后再恢复 sys.stdout
__console__=sys.stdout
# redirection start #
...
# redirection end
sys.stdout=__console__
1.4同时重定向到控制台和文件
如果我们希望打印的内容一方面输出到控制台,另一方面输出到文件作为日志保存,那么该怎么办?
将打印的内容保留在内存中,而不是一打印就将 buffer 释放刷新,那么放到一个字符串区域中会怎样?
a=''
sys.stdout=a
print 'hello'
OK,上述代码是无法正常运行的
Traceback (most recent call last): File
".\hello.py", line xx, in print 'hello'
AttributeError: 'str'
object has no attribute 'write'
错误很明显,就是上面强调过的,在尝试调用 sys.stdout.write() 的时候,发现没有 write 方法
另外,这里之所以提示 attribute error 而不是找不到函数等等,我猜想是因为python 将对象/类的函数指针记录作为对象/类的一个属性来对待,只是保留了函数的入口地址
既然这样,那么我们必须给重定向到的对象实现一个 write 方法:
import sysclass __redirection__:def __init__(self):self.buff=''self.__console__=sys.stdoutdef write(self, output_stream):self.buff+=output_streamdef to_console(self):sys.stdout=self.__console__print self.buffdef to_file(self, file_path):f=open(file_path,'w')sys.stdout=fprint self.bufff.close()def flush(self):self.buff=''def reset(self):sys.stdout=self.__console__if __name__=="__main__":# redirectionr_obj=__redirection__()sys.stdout=r_obj# get output streamprint 'hello'print 'there'# redirect to consoler_obj.to_console()# redirect to filer_obj.to_file('out.log')# flush bufferr_obj.flush()# resetr_obj.reset()
同样的,sys.stderr, sys.stdin 也都可以被重定向到多个地址
三 、代码调试技巧
deals = [lambda x, y: (x + 1, y), # 向下lambda x, y: (x, y + 1), # 向右lambda x, y: (x - 1, y), # 向上lambda x, y: (x, y - 1), # 向左]
def deal_maze(start, end, maze):path = [] # 走过的路径path.append(start)maze[0][0] = 2 # 走过的路径记为2while len(path) > 0:curnode = path[-1]if curnode[0] == end[0] and curnode[1] == end[1]:print('到达终点')for i in path:print(i)return Truefor deal in deals:nextnode = deal(curnode[0], curnode[1])if 0 <= nextnode[0] <= end[0] and 0 <= nextnode[1] <= end[1]:# 判断没有出迷宫if maze[nextnode[0]][nextnode[1]] == 0:path.append(nextnode)maze[nextnode[0]][nextnode[1]] = 2breakelse:path.pop()else:print('没有路')return Falsewhile True:[a, b] = list(map(int, input().split())) # a为行,b为列maze = [] # 迷宫本身for i in range(a):maze.append([int(j) for j in input().split()])deal_maze((0, 0), (a - 1, b - 1), maze)
输出:
5 5
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
到达终点
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
开始调试:
点击按钮1,然后点击按钮2”自测“。(注意,不是点击按钮3)
弹出如下图:
先后在1和2处填写测试用例的输入和输出,然后点击”自测调试”,测试完毕,点击按钮3
自测调试输出如下:
自测结果不通过如果使用c/c++要保证int main函数最终 return 0;如果使用其余语言请检查代码\"是否有数组越界等异常\"或者\"是否有语法错误\"点击对比用例标准输出与你的输出
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)你的输出为:(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
然后点击“点击对比用例标准输出与你的输出”,弹出标号4,进行对比即可
修改:
for i in path:#print(i)print("(%d,%d)" % (i[0], i[1]))
注意:上面的代码,在本地运行OK,但是在牛客网上会失败。
需要添加try:
except:
while True:try: [a,b]=list(map(int,input().split())) #a为行,b为列maze=[] #迷宫本身for i in range(a):maze.append([int(j) for j in input().split()])deal_maze((0,0),(a-1,b-1),maze)except:break
牛客网Python笔试技巧、单行多行输入方法以及代码调试技巧相关推荐
- 牛客网Python笔试技巧
提高通过率大原则: 1.本地IDE调代码的速度更快 2.修改已>0%的代码比新做一道题更快 3.一定要看清题意!!! 提高通过率的技巧: 1.时间复杂度问题:增加条件break或continue ...
- 手把手带你学python—牛客网python 机器学习 信息熵的计算
牛客是一款不论是面试 还是刷题 都是非常有用的 还等什么,传送门- 牛客网python基础
- 手把手带你学python—牛客网python基础 pandas读取文件查看用户数据集的大小
牛客是一款不论是面试 还是刷题 都是非常有用的 还等什么,传送门- 牛客网python基础
- 手把手带你学python—牛客网python基础 鸢尾花分类
牛客是一款不论是面试 还是刷题 都是非常有用的 还等什么,传送门- 牛客网python基础
- 手把手带你学python—牛客网python基础 牛牛的逻辑运算
牛客是一款不论是面试 还是刷题 都是非常有用的 还等什么,传送门- 牛客网python基础
- 赛码网和牛客网python输入输出要求
1. 牛客网推荐使用sys.stdin.readline()形式输入,输出用print() ''' 输入: 2 3 分别赋给n, m并且转换为int类型 ''' import sysn, m = ma ...
- 【赛码网 牛客网】笔试 --> 输入输出写法 python版本
2020秋招陆续开始了... 找研发岗工作的学生党也陆续开始做各大公司的笔试题了... 然而曾经在力扣牛客等网站刷题时,我从未考虑过代码的输入与输出问题... 在首次笔试遇到白板题,代码写对了,但是输 ...
- 牛客网 python 判断停止输入
python2.7 import sys try:while True:line = sys.stdin.readline().strip()if line == '':breaklines = li ...
- 牛客网 刷题前的准备工作(输入 输出 如何接收?)
牛客网 刷题前的准备工作 牛客网 刷题前的准备工作 1. 数据读取接受问题 2.牛客刷题前的准备: 2.1. 弄清楚输入输出的行数关系 3.代码怎么写 3.1. 在牛客上测试自己的模板代码,是否能正确 ...
- 牛客网-数据结构笔试题目(一)-猫咪特征提取思路解析(附源码)
题意 小明是一名算法工程师,同时也是一名铲屎官.某天,他突发奇想,想从猫咪的视频里挖掘一些猫咪的运动信息.为了提取运动信息,他需要从视频的每一帧提取"猫咪特征".一个猫咪特征是一个 ...
最新文章
- 机器学习算法(3:决策树算法)
- mysql秒级平滑_DDM实践:数据库秒级平滑扩容方案
- VS2008创建dll,并使用dll
- 语音识别学习日志 2019-7-13 语音识别基础知识准备 1{语音基础知识}
- Web 安全与 Rational AppScan 入门
- 正找工作的同学看过来——Java项目经验篇
- 计算机信息安全攻防大赛,计算机学院举办校第六届网络攻防大赛
- MySQL的两种登录方式
- JavaWeb 注解
- Adobe Photoshop CS6 仅需要两个步骤快速去除图片中的文字
- 王者荣耀以鸿蒙起网名,王者荣耀
- 面试算法高频压轴题——灯泡开关问题
- 腾讯优图实验室日常实习生招聘
- 一张图解释什么是遗传算法_如何通俗易懂地解释遗传算法?有什么例子?
- php微信jssdk获取位置,微信公众号获取用户地理位置
- vue3 全局注册app.config.globalProperties, 如何处理getCurrentInstance 上下文线上环境报错
- 垂直水平居中的几种实现方式
- c语言去掉文件中重复单词,awk脚本 使用awk去掉重复的单词
- 邀请函|欢迎参加2019云创大数据实验平台金融类/电子商务类/数学统计类院校各省总代理招募大会!...
- 专科计算机毕业论文范文 致谢,专科论文致谢范文(精选3篇)