关于Pyhon键盘输入的语法总结
写在前面:
众所周知的是,在各类编程竞赛中输入是很多题目正确解答的基础。作者在前段时间练习蓝桥杯(python) 时便遇到了各种键盘输入问题,每次遇到了便百度但不久就忘了,也一直苦苦没有找到一份比较齐全的关于python输入问题的解答。
为此,作者遍爬网上所有资料,将与python键盘输入相关的各
最近练习蓝桥杯,遇到了各种输入问题。在此做一总结,方便知识储备。202004220841
本文最大优势(值得收藏)的原因在于:
- 做了关于Python键盘输入最为齐全的总结
- 对每一种方法(或函数) 由理论到实践均生动说明,并附以鲜活的实际栗子
文章目录
1. 基础知识
1.1 input 函数
python3.x 中input()函数接受一个标准输入数据,返回为sring 类型
1.2 split() 方法
1.2.(1) 描述
Python split() 通过指定分隔符对字符串进行切片,如果参数num 有定值,则分隔 num+1个字符串
1.2.(2) 语法
split()语法
str.split(str='',num=string.count(str))
1.2.(3) 参数
- str 分隔符,默认为所有的空字符,
包括空格
、换行(\n)
、制表符(\t)
等 - num 分割次数。默认为-1 即分割所有
1.2.(4) 返回值
返回分割后的字符串列表
1.2.(5) 注意!
- string.split()不带参数时,和string.split(’ ')是有很大区别的!
- string.split() 在尽可能多的空格处切断
'what are you dong?'.split()
# 输出['what', 'are', 'you', 'dong?']
'what are you dong?'.split(' ')
# 输出['what', '', '', 'are', '', 'you', '', '', '', 'dong?']
可以发现 string.split() 会先string.strip()然后再以任意长度**(尽可能长的空格数)**去切
1.3 示例
1.3.(1) 栗子1
string = "Line1-abcdef \nLine2-abc \nLine4-abcd"
print(string.split())
print(string.split(' ', 1))
#输出结果
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
1.3.(2) 一个更详细的栗子——分离字符串
string ='www.gziscas.com.cn'
1 以'.'
为分隔符
print(string.split('.'))
['www', 'gziscas', 'com', 'cn']
2 分割两次
print(string.split('.',2))
print(string.split('.',2))
3 分割两次,并去序列为1的项
print(string.split('.',2)[1])
gziscas
4 分割两次,并把分割后的三个部分保存到三个文件
u1,u2,u3=string.split('.',2)
print(u1)
print(u2)
print(u3)
www
gziscas
com.cn
1.4 os.path.split() 函数
1.4(1) 语法
os.path.split()
1.4(2) 参数说明
- path 只一个文件的全路径作为参数:
- 如果给出的是一个目录和文件名,则输出路径和文件名
- 如果给出的是一个目录名,则输出路径和空文件名
1.4(3) 分离文件名和路径
import os
print(os.path.split('/dodo/soft/python/'))
('/dodo/soft/python', '')
print(os.path.split('/dodo/soft/python'))
('/dodo/soft', 'python')
1.4(4) 实例
str = "hello boy <[www.baidu.com]>byebye"
print(str.split("[")[1].split("]")[0])
www.baidu.com
1.5 strip() 方法
1.5.1 描述
python strip() 方法用于移除字符串头尾指定的字符 (默认为空格)或字符序列
1.5.2 注意
- 该方法【只能】 删除开头或是结尾的字符,不能删除中间部分的字符。
- 如果strip()的参数为空,那么会默认删除字符串 头和尾的空白字符(包括\n \r \t这些)
1.6 lstrip()和rstrip()
这两个函数和上面的strip()函数基本是一样的,参数结构也一样,只不过一个是去掉左边的头部,一个是去掉右边的头部
- 当没有参数的时候,分别表示去掉左右两边的空白
a=" zhangkang "
print(a.lstrip(),len(a.lstrip()))
print(a.rstrip(),len(a.rstrip()))
('zhangkang ', 10)
(' zhangkang', 10)
- 当传参数的时候,分别表示去掉左右两边的字符
a="babacb111baccbb"
print(a.lstrip("abc"))
print(a.rstrip("abc"))
111baccbb
babacb111
1.6.(1) 语法
strip() 方法语法
str.strip([chars])
1.6.(2) 参数
- chars ——移除字符串头为指定的字符序列
1.6.(3) 返回值
返回 移除 字符串头尾指定的字符序列生成的新字符串
1.6.(4) 一些有趣的实例
- 示例 strip()
##这里注意字符串a的两端都有一个空白字符,字符a和n之间也有一个。
a=" \rzha ng\n\t "
print(len(a))
b=a.strip()
print(b)
print(len(b))
11
zha ng
6
- 示例 strip(‘r’)
a="rrbbrrddrr"
b=a.strip("r")
print(b)
bbrrdd
- 传入多个字符参数
a="aabcacb1111acbba"
print(a.strip("abc"))
print(a.strip("acb"))
print(a.strip("bac"))
print(a.strip("bca"))
print(a.strip("cab"))
print(a.strip("cba"))
1111
1111
1111
1111
1111
1111
由此可以看出,无论传的参数是 ”abc“还是abc的其他形式,这都不重要,重要的是函数只知道你要删除的字符是”a“,“b”,“c”。函数会把你传的参数拆解成一个个的字符,然后把这些字符去掉
1.7 Join() 方法
描述
Python join() 方法用于将==序列中的元素以指定的字符== 【连接】 生成一个新的字符串。
1.7. (1) 语法
str.join(sequence)
str
表示字符串(字符),``sequence`表示一个成员。
1.7. (2) 参数值
- sequence——要连接的元素序列
1.7. (3) 返回值
返回通过指定字符连接序列中元素后生成的新字符串
1.7. (4) 实例
str ='-'
seq=("a","b","c") #字符串序列
print(str.join(seq))
a-b-c
1.8 map 函数
1.8.(1) 描述
map() 会根据提供得函数对指定的序列做映射
第一个参数function 以序列中的每一个元素调用function 函数,返回包含每次function函数返回值的新列表
1.8. (2) 语法
map(function,iterable,...)
1.8. (3) 参数
- function——函数
- iterable——一个或多个序列
1.8. (4) 返回值
python 3.x
返回迭代器, 将所有调用的结果作为一个list
返回
注意返回的结果只能迭代一次,如果需要多次使用请提前保存结果并处理。
1.8. (5) 实例
- 栗子 1
def square(x):
return x**2
l1 = map(square,[1,2,3,4,5])
l2 = map(lamuda x:x**2,[1,2,3,4,5])
l3 = map(lamuda x,y:x+y,[1,3,5,7,9],[2,4,6,8,10])
print(lsit(l1))
print(list(l2))
print(list(l3))
[1, 4, 9, 16, 25]
[1, 4, 9, 16, 25]
[3, 7, 11, 15, 19]
- 栗子 2 类型转换
#***将元组转换成list***
print(list(map(int, (1,2,3))))
[1, 2, 3]
#***将字符串转换成list***
print(list(map(int, '1234')))
[1, 2, 3, 4]
#***提取字典的key,并将结果存放在一个list中***
print(list(map(int, {1:2,2:3,3:4})))
[1, 2, 3]
#***字符串转换成元组,并将结果以列表的形式返回***
print(list(map(tuple, 'agdf')))
[('a',), ('g',), ('d',), ('f',)]
#将小写转成大写
def u_to_l (s):
return s.upper()
print(list(map(u_to_l,'asdfd')))
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3]
[('a',), ('g',), ('d',), ('f',)]
['A', 'S', 'D', 'F', 'D']
- 栗子 3
# map函数配合匿名函数使用
x = list(map(lambda a:a*10,range(0,10))) # 序列中的每个元素乘以10
print(x)
# map函数配合匿名函数使用,匿名函数有两个参数,所以map传参数应该也是两个序列
y = list(map(lambda a,b:a+b,[1,2,3,5,6,7],[10,20,30,50,60,70])) # 两个序列相加
print(y)
# 三个及以上也是同理
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
[11, 22, 33, 55, 66, 77]
2. 处理一行输入
n,k,m = map(int,input().split())
将输入转化成列表,以空格为分隔符
str = input()
line = list(map(str,input().split()))
line = list(map(int,str.strip().split()))
将输入存入列表
L=[]
L.append(map(str,input().split()))
将每行输入读取成矩阵的形式
arr = input('') #输入一个数组,每个数之间使 空格 隔开
num = [int(n) for n in arr.split()] # 将输入每个数以空格键 隔开成数组
print(num) # 打印数组
3 处理多行(矩阵)输入
n = int(input()) # 输入二维数组的行数和列数
m = [[0]*n]*n # 初始化二维数组
for i in range(n):
m[i] = input().split() #输入二维数组,同行数字用【空格】分隔 不同行用 【回车】换行
# m[i] = list(map(str,input().split(' '))) #输入二维数组,同行数字用【空格】分隔 不同行用 【回车】换行
print(num) # 打印【二维数组】
缺点是 必须要知道【有多少行的输入】
n = int(inpput())
m = []
for i in range(n):
m.append(list(map(int,input().split(' '))))
# m.append(list(map(float,input().split(' '))))
print(m)# 输入二维数组,同行数字用【空格】分隔,不同行则用【回车】换行
print('请输入数据的行数N')
N = int(input())
print('N=',N)
print('input 输入:')
list1 =[[int(x) for x in input().split()] for y in range(N)]
print(list1)
print('sys.stdin.readline() 输入:')
import sys
list2 = [[int(x) for x in sys.stdin.readline().split()] for y in range(N)]
print(list2)
3.4 输出是 一维列表形式
import sys
s=[]
for line in iter(input, ''):
s.append(line.replace(',',''))
print(s)
3.5 不指定行数 输入 多行数据 返回【二维list】 最实用
# 不指定输入的行数, 但是必须以最后下一行只输入【空格】或者【什么
都不输入】为结束
import sys
try:
mx =[]
while True:
m = sys.stdin.readline().strip()
# 若是多输入, strip() 默认是以【空隔】分隔,返回一个包含多个字符串的 list
if m=='':
break
m = list(split())
mx.append(m)
print(mx)
excep:
pass
import sys
try:
mx = []
while True:
m = input().strip()
# m = sys.stdin.readline().strip()
# 若是多输入, strip() 默认是以【空格】分隔,返回一个包含多个字符串的list
if m=='':
break
m = list(m.split())
mx.append(m)
print(mx)
except:
pass
3.6 读取矩阵的行数
和列数
print(len(mx)) 读取列
print(len(mx[0])) 读取行
3.7 不指定行数 但是输入一行就处理一行,持续等待输入
import sys
try:
ssn =[]
while True:
sn = input().strip()
# sn = sys.stdin.readline().strip()
# 若是多行输入,strip() 默认是以【空格】分隔 返回一个包含多个字符串的list
if sn =='':
break
sn = list(sn.split())
ssn.append(sn)
print(ssn)
except:
pass
相信各位如果能坚持看到这里,那你现在必定已经对python输入问题有了系统的知识框架。若你还有关于python编程的其他问题,欢迎您能够留下你宝贵的评论或私信,期待和您的一起交流!
4.【参考资料】
https://www.jianshu.com/p/f6fa62cc0e83
https://blog.csdn.net/qq_26884501/article/details/89194211
https://blog.csdn.net/csdn15698845876/article/details/73469234
https://zhuanlan.zhihu.com/p/89637188
https://www.jb51.net/article/128315.htm