python sys.stdin.readable_Python的输入读取 sys.stdin与input对比

Python中常用到的两种标准化输入方式:分别sys.stdin和input,两者使用方式大致相同,但是总的来说sys.stdin使用方式更加多样化一些,下面就例子说明两者之间的使用差别。

input/raw_input 输入

input输入很简单,就是获得用户的输入,一般是在控制台界面。

word=input('please input one or more word\n')

print (word)

运行之后就可以等待用户输入了,最终系统会认为回车键是输入的结束,接下来对输入做任何处理就是你自己的事情啦。

sys.stdin 输入

第一他也可以实现和input一样的功能,比如

import sys

print('please input one or more word\n')

word=sys.stdin.readline()

print (word)

但是,他更常见的是另外一种使用方式,可以直接使用文件作为整体的输入,可以很简洁。

import sys

print('please input one or more word\n')

word=sys.stdin.readline()

print (word)

使用方法,将文件重定向到输入中去就可以很方便的使用。

控制台中,比如:

$ python test.py < test.txt

关于raw_input( )和sys.stdin.readline( )的区别

之前一直认为用raw_input( )和sys.stdin.readline( )来获取输入的效果完全相同,但是最近在写程序时有类似这样一段代码:

import sys

line = sys.stdin.readline()

for i in range(len(line)):

print line[i]+'hello'

它的运行结果让我百思不得其解:

123

1hello

2hello

3hello

hello

请按任意键继续。。。

怎么会多输出一个空行和hello?然后特意输出了line的长度,发现是4,然后重新调试了几次,发现无论输入什么,len(line)的长度总比输入的长度大1,然后用raw_input( )试着运行了一下,运行是正常的,然后查阅了一下文档,发现sys.stdin.readline( )会将标准输入全部获取,包括末尾的’\n’,因此用len计算长度时是把换行符’\n’算进去了的,但是raw_input( )获取输入时返回的结果是不包含末尾的换行符’\n’的。

因此如果在平时使用sys.stdin.readline( )获取输入的话,不要忘了去掉末尾的换行符,可以用strip( )函数去掉 sys.stdin.readline( ).strip('\n'),这样处理一下就行了。

其他等价写法

print 与 sys.stdout()

print 'hello' 等价于 sys.stdout.write('hello' + '\n') 输出并且显示,末尾有换行

raw_input 与 sys.stdin()

s = raw_input('请输入:') 等价于 print('请输入:') (可用上式替换)

s = sys.stdin.readline()值得注意的是:

在输入的后面可用split分割输入的字符串使之成为一个列表。例:s = sys.stdin.readline().split()

在输入的后面还可用 strip 去掉末尾空格。

Python 中 read() 和 readline() readlines() 区别

read():将文件一次全部读取成一个字符串,包括特殊字符,需要较大内存

readline():将文件根据换行符一行一行读取

readlines():将文件一次性读取到内存,依行为单位读取为一个列表对象

上述主要是进行标准化输入与获取,这一部分要和参数传递分清楚,其实Python最常用的就是参数传递也就是argpares模块和sys模块。

题目oj平台实例:

案例一:

输入描述:

第一行有三个整数N, M, K

接下来N行,每行M个整数为输入的矩阵

获取输入实现: 利用stdin

import sys

list_num = sys.stdin.readline().split() #读取第一行,分割,即[ 'N', 'M', 'K' ]

N,M,K = [int(list_num[i]) for i in range(len(list_num))] #对字符列表 int() 类型转化,得到 int

... ...

for i in range(N):

line = sys.stdin.readline() #依次遍历所有行,每行存入变量line进行处理

... ...

案例二:

输入描述:

第一行一个整数N,表示数组长度

第二行N个整数,分别表示数组内的元素

获取输入实现: 利用input

length = int(input()) # 读取第一行 ['N'], int()转换得到 N

arr = list(map(int, input().split())) # 读取第二行,map()操作每个元素int()转换,得到 int列表

案例三:

输入描述:

第一行有两个整数n, k

接下来一行有n个整数表示数组内的元素

获取输入实现:

length, target = map(int, input().split())

arr = list(map(int, input().split()))

案例四:

输入描述:

第一行输入一个整数N,表示对栈进行的操作总数。

下面N行每行输入一个字符串S,表示操作的种类。

如果S为"push",则后面还有一个整数X表示向栈里压入整数X。

如果S为"pop",则表示弹出栈顶操作。

如果S为"getMin",则表示询问当前栈中的最小元素是多少。

获取输入实现:

# N = int(input()) 也可以

N = int(sys.stdin.readline().strip()) #这里的去空格 都是保险操作,没有也行

for i in range(N):

#command = sys.stdin.readline().split() 不用去空格也行

command = sys.stdin.readline().strip()

command = command.split() # 每个command即 ["push/pop/getMin", "num"]

command[0] == "push/pop/getMin"

(int)command[1] == num

... ...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值