疑问
在acm格式里有两种方法读取用户输入:
- import sys 然后使用 sys.stdin
- input()
但隐隐约约感觉这两个方法读到的数据在最后一行有些问题
导致我在使用stdin时候,需要使用正则表达式:re.split(‘[,\n]’,textline)来把一个以逗号分割的字符串彻底分开
stdin和input的区别
在 Python 中,input()
和 sys.stdin
都用于从用户获取输入,但它们之间有一些重要的区别:
-
input() 函数:
input()
函数是内置函数,用于从标准输入(通常是键盘)读取用户输入的一行文本。- 它会提示用户输入,并且等待用户输入完成后,返回用户输入的字符串。
input()
函数始终返回一个字符串对象。
示例:
name = input("Enter your name: ") print("Hello, " + name)
-
sys.stdin:
sys.stdin
是 Python 中的标准输入流对象,它来自于 sys 模块。- 与
input()
不同,sys.stdin
不会自动提示用户输入,而是直接从标准输入中读取数据。 - 通常需要使用
sys.stdin.readline()
方法来读取用户输入的一行文本。 sys.stdin.readline()
返回的是一个包含用户输入的字符串的行,包括结尾的换行符\n
,需要根据需要进行处理。
示例:
import sys name = sys.stdin.readline().strip() # 使用 strip() 方法去除结尾的换行符 print("Hello, " + name)
主要区别:
input()
提供了更简单的方式来获取用户输入,因为它自动提示用户输入并返回一个字符串,但它只能从标准输入(通常是键盘)读取。sys.stdin
则更加灵活,可以从任何文件对象中读取输入,而不仅仅是标准输入。但它需要手动处理用户输入以及可能出现的换行符等情况。
常用函数:
-
map
(函数名,迭代对象:一般是数组):
作用是把后面迭代对象通过前面的函数,转化成另外一个数组
但是在print(这个返回结果)时需要注意:py3中会返回一个object对象
如果想得到数组,需要外加一层list()
map函数可以使匿名函数lambda
map(lambda x:x**2,[1,2,3,4,5]) -
try:…except:…
用于在没有给定组数的时候,except后面经常跟的是break -
join(可迭代对象:一般是已经排好序的数组)
在需要输出用逗号
分隔的字符串print(','.join(['a','bb','c']))
-
strip()用于处理掉字符串开始和结束的空白格
-
split()用于处理掉字符串中间的空格,第一个参数是你需要指定的分割符,第二个参数可以设定分割次数