sys.stdin对象——实现标准输入

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

语法参考

sys.stdin是一个标准化输入对象,可以连续输入或读入文件所有内容,不结束,不能直接使用。输入完成后,再对输入数据进行处理,这是sys.stdin的强大之处。sys.stdin.readline()方法和sys.stdin.readlines()方法是经常用到的方法,sys.stdin.readline()方法输入一行,输完成后自动添加’\n’。sys.stdin.readlines()可以连续输入数据,此时可以将输入的数据作为一个整体进行使用。sys.stdin.readline()的基本用法如下:

sys.stdin.readline()

使用sys.stdin.readline()与input()方法都可以实现标准化输入,但两者有以下区别:

l  sys.stdin.readline()方法不能填写提示输入信息的说明文字,但input()方法在括号内可以直接填写输入信息相关的说明文字,如input('请输入您的名字:')。

l  sys.stdin.readline()方法会在输入新后加“\n”换行符,而input()方法在输入完成后不会添加任何内容。要想取消sys.stdin.readline()方法添加的换行符“\n”,可以使用strip('\n') 去除换行符。

下面代码获取用户输入内容的长度,可以比较一下sys.stdin.readline()和input()输入内容的区别。代码如下:

import sys

line1 = sys.stdin.readline()  # 包含换行符"\n"

line2 = sys.stdin.readline().strip('\n')    # 去掉换行符"\n"

line3 = input("")                 # 不包含换行符"\n"

print(len(line1), len(line2), len(line3))

输出结果如下:

要输入多行数据,使用sys.stdin.readlines()方法是最有效的,该方法可以连续输入多行,输入完成时,需要回车到空行,然后按ctrl+D输出结果。应用参见锦囊2。简单实现多行输入的代码如下:

import sys

message = sys.stdin.readlines()

print(message)

用户连续输入多行信息,如图1所示,输入完成后,回车到空行,然后按ctrl+D输出结果如图2所示:

图1  输入多行数据

图2  输出显示

    快用锦囊

锦囊1:常规输入相关内容

sys.stdin.readline()方法不能添加输入提示说明文字,如果要添加提示说明文字,需要使用print()方法进行输入信息提示,代码如下:

import sys

print('请输入您的名字: ')

name = sys.stdin.readline()

print('您输入的名字为: ', name)

程序运行结果如下:

锦囊2:将输入作为整体进行处理

在批量输入数据的时候,经常需要输完数据后在对数据做统一处理,如对数据统一编号、格式处理等,sys.stdin.readlines可以直接将输入的数据作为整体,输入完成后再做数据处理,如将用户输入的姓名前统一加上3位数字编号,输入完成时一定要回车,然后按“ctrl +D”输出程序运行结果。程序代码如下:

import sys

index=0     #  初始化编号

for line in sys.stdin.readlines():            #  按行读取输入的数据

      line = line.strip()                       #  去掉空格和换行符
      index=index+1                             #  编号递进加1
      if line:                                  #  如果行输入不为空
          txt=str(index).zfill(3)+"  "+ line    # 将输入的数据前加上3位编号
      print (txt)

运行程序,输入数据,如图3所示,结束输入时需要先回车到空行,然后按“ctrl +D”输出程序运行结果,如图4所示。

锦囊3:根据两点坐标计算直线的斜率

在勘探、地理探测工作中,有时需要根据输入空间的位置计算两点(x1,y1)(x2,y2)形成直线的斜率,斜率的计算公式为:(y2 - y1) / (x2 - x1),下面编写一个程序,根据用户输入的两点坐标计算直线斜率k。代码如下:

import sys
print('请输入两点的4个坐标值,形式为x1 y1 x2 y2,用空格间隔!!')
while True:
      line = sys.stdin.readline()
      if line == '\n': break
      
x1, y1, x2, y2 = (float(x) for in line.split())
      k = abs(y2 - y1) / abs(x2 - x1)
      print('两点坐标的斜率为:',format(k,'.2f'))

运行程序,输出结果如图5所示。

图5  两点坐标斜率

也可以直接使用sys.stdin对象输入数据,然后循环读取sys.stdin对象的数据。下面使用sys.stdin对象根据两点坐标计算直线的斜率,代码如下:

import sys

print('请输入两点的4个坐标值,形式为x1 y1 x2 y2,用空格间隔!!')

for line in sys.stdin:
      if line == '\n': break
      
x1, y1, x2, y2 = (float(x) for in line.split())
      k = abs(y2 - y1) / abs(x2 - x1)
      print( format(k,'.2f'))

锦囊4:利用sys.stdin读取文件信息

sys.stdin是一个普通文件对象,除了从标准输入读取内容以外,也可以使用sys.stdin调用读取文件信息。如读取文件”gjqh.txt”的所有国家区号,然后调用readlines函数将前3位为“* 8”的区号输出出来,实现代码如下:

import sys
   fileName='gjqh.txt'
   def readfile(file,ord):                     #  定义查询电话区号的函数readfile
       with open(file) as txt:                 #  将国际区号信息文件赋值给变量txt
           sys.stdin = txt                     #  将变量txt的数据赋值给sys.stdin对象
           for line in  sys.stdin.readlines():       #  按行读取sys.stdin对象的数据
                line=line.strip()                   #  去除空格
                if line [0:3]==ord:                 #  按每行数据的前3个字符查询
                    print(line)                     #  输出查询结果
    readfile(fileName,'* 8')   #  调用readfile(),查询国际区号前三个字符是 '* 8'的国家或地区

运行程序,输出效果如图6所示。

图6  读取文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

橙子味冰可乐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值