在Python编程中,处理用户输入是不可或缺的一部分。在做一些简单的OJ题时,分别是在处理数值计算或需要读取多个数据的情况下,想着如何高效、准确地获取用户输入显得尤为重要。分别为以下两种,本文会详细解释分析每种情况输入使用的方法和区别:
'''
第一种,接受一行数据,数据间以空格分格,分别赋值给两个变量
输入:3 7
把3的值赋值给a,把7赋值给b
'''
a,b = list(map(int,input().split()))
'''
第二种,接受两行数据,第一行数据赋值给a,第二行数据赋值给b
输入:
3
7
把3的值赋值给a,把7赋值给b
'''
a,b = list(int(input().strip()) for _ in range(2))
【第一种方法】输入一行数据,分别取出里面的数据
'''
第一种,接受一行数据,数据间以空格分格,分别赋值给两个变量
输入:3 7
把3的值赋值给a,把7赋值给b
'''
a,b = list(map(int,input().split()))
1.input()——首先要说明input()方法会接受用户输入的数据,默认保存为字符串,所以我们如果要接受数据一般都是进行强制类型转换,以接受一个整数为例:
#a = input()
#a = int(a)
a = int(input())
#input()内还可以接受字符串参数,用于在控制台输出的提示信息
a = int(input('请输入一个数字:'))
#运行后控制台会显示:请输入一个数字:(用户在此后输入)
2.split()——split()方法用于将字符串按照指定的分隔符(默认为空格)分割成一个列表。
words = "a b c"
words.split()
#会返回 ['a', 'b', 'c']
3.map()——会根据提供的函数对制定序列做映射
我们本次输入样例中的map(int,...)即是上述eg5.
4.list()——用于将可迭代对象(如迭代器、元组等)转换为列表。
list_numbers = list(map(int, ["1", "2", "3"]))
#会返回 [1, 2, 3]
整合以上代码:
a, b = list(map(int, input().split()))
'''
这行代码首先通过 input() 获取用户输入
然后通过 split() 将输入字符串按空格分割成列表
接着使用 map(int, ...) 将每个字符串元素转换为整数
最后通过 list() 将结果转换为列表
并通过元组解包直接赋值给 a 和 b
'''
【第二种方法】接受两行数据,第一行数据赋值给a,第二行数据赋值给b
'''
第二种,接受两行数据,第一行数据赋值给a,第二行数据赋值给b
输入:
3
7
把3的值赋值给a,把7赋值给b
'''
a,b = list(int(input().strip()) for _ in range(2))
1.strip()——默认用于移除字符串两端的空白字符(包括空格、换行符\n
等),是一个有些特殊的方法,接受参数的话只会移除两端的指定字符,被处理数据中间的指定字符无法被去除
words='###shdvdesha###djwdqwdqu###'
words.strip('###')
#输入:'shdvdesha###djwdqwdqu'
2.[ ... for _ in range(2)]:列表推导式
- 列表推导式是Python中一种简洁的构建列表的方式。
for _ in range(2)
表示循环两次,_
是占位符,表示循环变量在循环体中不会被使用。- 每次循环都会执行
list(input().strip())
,从而读取并处理两行输入。
整合以上代码:
a,b = list(int(input().strip()) for _ in range(2))
'''
这行代码通过列表推导式读取两行输入
每行输入都经过 strip() 去除首尾空白字符
然后通过 split() 分割成列表
最终,列表推导式生成一个包含两个列表的列表
并通过元组解包分别赋值给 a 和 b。
'''
总结:
- 第一种方式简洁高效,适合一次性读取并转换多个数值输入。
- 第二种方式灵活性强,适合需要逐行读取和处理输入的情况。