关于HackerRank的Day 8 的思考——input

Day 8 主要是对字典的一些基本用法做操作。

题干大概是:给定一个 n ,建立一个包含 n 个人的电话簿,然后有一个查询功能。当然,很简单,但是在我对搜索词的输入时,它提示我:EOF when reading a line

查了资料之后,我发现大概是因为参数的输入的问题(其实我觉得应该是字符串输入的问题),网上基本上是在sublime测试中出现的问题,所以方法也是对sublime适用的,我就不再赘述了。

我讲讲通过代码的方法来解决这个问题,顺便讲讲input的用法

import sys 
# Read input and assemble Phone Book
n = int(input())
phoneBook = {}
for i in range(n):
    contact = input().split(' ')
    phoneBook[contact[0]] = contact[1]
# Process Queries
lines = sys.stdin.readlines()
for i in lines:
    name = i.strip()
    if name in phoneBook:
        print(name + '=' + str( phoneBook[name] ))
    else:
        print('Not found')
View Code

我们通过引入sys库的.stdin.readlines方法。(sys模块提供了一系列有关Python运行环境的变量和函数。)

首先,在IDLE方法下:
关于HackerRank的Day 8 的思考——input_第1张图片

 至于为什么没有改变message,我相信大家都知道(我一开始还以为是因为字符串不可变),但是并不是,如下图:

关于HackerRank的Day 8 的思考——input_第2张图片

其实很简单,因为这里是 readline ,也就是只会读取一行,那怎么读取多行输入呢,是的,用 readlines 就可以了

但是在IDLE中用的时候我们会发现,输入无法停止,因为 enter 不再是输入结束的标志了,查资料之后,

只需要一个 Ctrl + D 就OK了,实在不行,可以试试 Ctrl + z (+ enter)。

讲完了问题,我们再来看一看这个函数,sys.stdin是一个标准化输入的方法,其中默认输入的格式是字符串,如果是int,float类型则需要强制转换。

 还有就是,sys.stdin.readline( )会将输入全部获取,包括末尾的'\n',因此用len计算长度时是把换行符'\n'算进去了的,但是input( )获取输入时返回的结果是不包含末尾的换行符'\n'的。

二. input 的方法:

 因为 python 3 和 python 2 的变化,就导致了 input 的不同,在 python 3 中,input 可以接受一个标准输入,但是在 python 2 中,input只能用来获取输入。具体的不同大概是输入字符串时 python 2 要加引号,而 3 不用,2 的 input 就相当于 eval(raw_input()),在 3 中,input 就相当于整合了 2 的 input 和 raw_ input。

1.首先讲讲限制输入,也就是只能输入数字,字符串等等:

import re
num=input("请输入鸡的数量:")
while not re.findall('[0-9]',num):
    num=input("数量只能为数字,请重新输入:")
print(num)

通过 re.findall 就可以实现限制输入的功能了,如果想改成限制小写字母,可以把 [ 0 - 9 ] 改成 [a - z] ,除此之外,还可以设置字母和数字混合型之类的( [0 - 9] [a - z] )

2.其次,讲讲input可调用的方法:

还记得我们上面讲过的 2 和 3 的区别吗,因为 input 是返回的是一个 str 型的数据,所以只要是字符串能用的方法,input 基本上都能用,例如:strip,rstrip,split等等

关于HackerRank的Day 8 的思考——input_第3张图片

 

 差不多到此结束了,如有疑问欢迎留言,我也还是个小白!

附:限制输入:https://blog.csdn.net/qq_24726509/article/details/80464713

你可能感兴趣的:(关于HackerRank的Day 8 的思考——input)