关于Pyhon键盘输入的语法总结(解决所有python输入问题)

关于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. 处理一行输入

  • 2.1 对于多元输入

n,k,m = map(int,input().split())
  • 2.2 方法一

将输入转化成列表,以空格为分隔符

str = input()
line = list(map(str,input().split()))
line = list(map(int,str.strip().split()))
  • 2.3 方法二

将输入存入列表

L=[]
L.append(map(str,input().split()))
  • 2.4方法三

将每行输入读取成矩阵的形式

arr = input('')   #输入一个数组,每个数之间使 空格 隔开
num = [int(n) for n in arr.split()]   # 将输入每个数以空格键 隔开成数组
print(num)    						  # 打印数组

3 处理多行(矩阵)输入

  • 3.1 读入二维矩阵 适用 n*n矩阵

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)  # 打印【二维数组】
  • 3.2 读入二维矩阵 适用n*任意列矩阵

缺点是 必须要知道【有多少行的输入】

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.3 读取多行输入,不知道行 以【换行符结束】

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

猜你喜欢

转载自blog.csdn.net/GODSuner/article/details/107413560