input只能输入数字_编程竞赛的Python输入方法

781b796263df8aa24365a6d4ae51c573.png

Python是一种非常人性化的语言,唯一的缺点就是速度慢。与C,C++和Java相比,它要慢得多。在在线编码平台上,如果提供的C/C++时间为X。通常,在Java中提供的时间为2X,而Python的时间为5X。

为了提高输入/输出密集型问题的代码执行速度,语言具有各种输入和输出过程。

一个示例问题

考虑一个寻找从用户输入的N个数字之和的问题。

输入数字N。

输入N个数字,并在一行中用一个空格隔开。

例如:

Input : 51 2 3 4 5Output :15

针对上述问题的不同Python解决方案

普通方法Python:(Python 2.7)

1)raw_input()采用可选的提示参数。它还将从返回的字符串中删除结尾的换行符。

2)print只是一个很薄的包装器,它格式化输入(结尾是args和newline之间的空格)并调用给定对象的write函数。

# basic method of input output # input N n = int(raw_input())   # input the array arr = [int(x) for x in raw_input().split()]   # initialize variable summation = 0  # calculate sum for x in arr:     summation += x       # print answer print(summation) 

使用内置的stdin,stdout的方法快一点:(Python 2.7)

1)sys.stdin是一个文件对象。就像创建可以创建的其他文件对象以读取文件的输入一样。在这种情况下,文件将是标准输入缓冲区。

2)stdout.write('D n')比print‘D’更快。

3)更快的方法是通过stdout.write(“”.join(list-comprehension))一次写入所有内容,但这使内存使用量取决于输入的大小。

# import inbuilt standard input output  from sys import stdin, stdout    # suppose a function called main() and # all the operations are performed def main():       # input via readline method     n = stdin.readline()       # array input similar method     arr = [int(x) for x in stdin.readline().split()]       #initialize variable     summation = 0          # calculate sum     for x in arr:         summation += x       # could use inbuilt summation = sum(arr)       # print answer via write     # write method writes only     # string operations     # so we need to convert any     # data into string for input     stdout.write(str(summation))   # call the main method if __name__ == "__main__":     main()     

时间差

Timing summary (100k lines each)——————————–Print : 6.040 sWrite to file : 0.122 sPrint with Stdout : 0.121 s

添加缓冲管道io:(Python 2.7)

1)只需在提交代码之前添加缓冲的IO代码,以加快输出速度。

2)io.BytesIO对象的好处是它们实现了一个通用的接口(通常称为“类文件”对象)。BytesIO对象具有内部指针,并且每次调用read(n)时指针都会前进。

3)atexit模块提供了一个简单的接口来注册程序正常关闭时要调用的功能。sys模块还提供了一个挂钩sys.exitfunc,但是只能在其中注册一个功能。atexit注册表可以同时由多个模块和库使用。

# template begins #####################################   # import libraries for input/ output handling # on generic level import atexit, io, sys   # A stream implementation using an in-memory bytes  # buffer. It inherits BufferedIOBase. buffer = io.BytesIO() sys.stdout = buffer  # print via here @atexit.register def write():     sys.__stdout__.write(buffer.getvalue())   ##################################### # template ends   # normal method followed # input N n = int(raw_input())   # input the array arr = [int(x) for x in raw_input().split()]   # initialize variable summation = 0  # calculate sum for x in arr:     summation += x   # print answer print(summation) 

通常,在处理大量数据时,普通方法无法在时限内执行。方法2帮助维护大量的I/O数据。方法3是最快的。通常,通过方法2和3帮助处理大于2、3MB的输入数据文件。

注意:上面提到的代码适用于Python 2.7,要在Python 3.X版本中使用,只需使用Python 3.X的input()语法替换raw_input()即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值