【Python语法基础学习笔记】输入输出进阶
前言
本文为个人学习的算法学习笔记,学习笔记,学习笔记,不是经验分享与教学,不是经验分享与教学,不是经验分享与教学,若有错误各位大佬轻喷(T^T)。主要使用编程语言为Python3,各类资料题目源于网络,主要自学途径为蓝桥云课,侵权即删。
一、print()
函数详解
print()
是 Python 中最常用的输出函数,完整定义为:
print(*objects, sep=' ', end='\n', file=None, flush=False)
关键参数说明
*objects
:可接收任意数量的打印对象(多个对象用逗号分隔)。sep
:多个对象间的分隔符,默认是空格' '
。示例:print("Hello", "World", sep='-') # 输出:Hello-World
end
:输出结束后添加的字符,默认是换行符'\n'
(所以每次print
后会自动换行)。示例:print("Hello", end='! ') print("World") # 输出:Hello! World
file
/flush
:较高级参数,初学者暂用默认值即可。
二、f-string:更简洁的字符串格式化(Python 3.6+)
格式化字符串字面量,让字符串拼接 / 格式化更直观。
基本用法
- 在字符串前加
f
或F
。 - 用
{}
直接嵌入变量或表达式。
对比传统拼接(更简洁)
传统方式(繁琐,需手动转类型):
name = "Alice"
age = 20
print("Hello, " + name + ". You are " + str(age) + ".")
f-string 方式(简洁易读):
name = "Alice"
age = 20
print(f"Hello, {name}. You are {age}.") # 输出:Hello, Alice. You are 20.
强大功能:表达式与格式控制
在 {}
内可执行表达式,或通过 :
控制格式。
1. 执行表达式
a, b = 10, 5
print(f"{a} + {b} = {a + b}") # 输出:10 + 5 = 15
2. 控制格式(变量后加 :
指定规则)
- 浮点数保留小数:
pi = 3.1415926 print(f"PI is approx {pi:.2f}") # 输出:PI is approx 3.14
- 整数补零(固定宽度):
num = 7 print(f"Number is {num:02d}") # 输出:Number is 07
通用格式语法(进阶)
格式为 {变量名: [格式选项]}
,格式选项
可细分为多个部分:[[fill]align][sign][#][0][width][grouping][.precision][type]
1. 对齐与填充:[[fill]align][width]
fill
:填充字符(默认是空格)。align
:对齐方式(<
左对齐、>
右对齐、^
居中、=
符号后填充(仅数字))。width
:输出的最小宽度。
示例:
text = "Hi"
print(f"{text:^10}") # 居中,总宽度10 → " Hi "
print(f"{text:*<10}") # 左对齐,用`*`填充 → "Hi********"num = 123
print(f"{num:>10}") # 右对齐,总宽度10 → " 123"
2. 数字专属选项
为数字格式化提供精细控制:
sign
:符号显示(+
显示正负、-
仅负号、space
正数前留空)。grouping
:千位分隔符(,
用逗号、_
用下划线)。.precision
:精度(浮点数小数位数、字符串最大长度)。#
:为进制加前缀(如二进制0b
、十六进制0x
)。0
:零填充(等价于fill='0', align='='
)。
示例:
num = 1234567
print(f"{num:,}") # 千位逗号分隔 → "1,234,567"num = 3.14159
print(f"{num:.3f}") # 保留3位小数 → "3.142"num = 255
print(f"{num:#x}") # 十六进制加`0x` → "0xff"
3. 类型(type
):决定数据呈现形式
- 字符串:
s
(默认)。 - 整数:
d
(十进制,默认)、b
(二进制)、o
(八进制)、x/X
(十六进制小 / 大写)、c
(转 Unicode 字符)。 - 浮点数:
f/F
(定点)、e/E
(科学计数法)、g/G
(自动切换f/e
)、%
(百分比)。
示例:
num = 65
print(f"{num:c}") # 转 Unicode → "A"num = 3.14
print(f"{num:%}") # 百分比(自动乘100)→ "314.000000%"num = 10
print(f"{num:b}") # 二进制 → "1010"
三、更快的输入:sys.stdin.readline()
当需要快速读取输入(如算法竞赛),sys.stdin.readline()
比 input()
更高效(更接近底层)。
基本用法
- 需先导入
sys
模块:import sys
。 - 会读取一整行(包括末尾的换行符
\n
)。 - 通常用
.strip()
或.rstrip()
去除换行符。
示例:
import sys# 假设输入为 "hello"(输入后按回车)
s1 = input() # s1 = "hello"(input() 自动去掉换行符)
s2 = sys.stdin.readline() # s2 = "hello\n"(包含换行符)
s3 = sys.stdin.readline().rstrip() # s3 = "hello"(去掉换行符)
四、竞赛中的快读模板
为了保持 input()
的使用习惯,同时获得更快的读取速度,可自定义 input
函数:
import sys
input = lambda: sys.stdin.readline().rstrip()# 现在可像原来一样用 input(),但速度更快
s = input()
n = int(input())
建议:算法竞赛题目开头可加这两行,避免输入性能导致的 “超时” 错误。
五、读取直到文件末尾(EOF)
有些题目不指定输入行数,需读到 “文件末尾(End of File, EOF)” 为止。
sys.stdin
是可迭代对象,用 for
循环遍历即可(读完所有输入后自动结束)。
示例:
import sysfor line in sys.stdin:# line 包含末尾的换行符(如输入 "1 5" → line = "1 5\n")parts = line.split() # split() 自动处理空白符(包括换行)print(parts) # 若输入 "1 5",输出:['1', '5']
细节:line.split()
能正确分割包含换行符的内容,因为默认分割所有空白符。
EOF 模式示例 —— A+B 问题
在算法题目中,“A+B 问题” 是入门经典案例,而 **“不定量输入(读到文件末尾 EOF 为止)”** 是常见考察形式。下面通过示例学习这类场景的处理方法。
示例需求
-
输入:多行数据,每行包含两个整数
a
和b
(行数未知,需持续读取直到没有输入)。 -
输出:每行输入对应的
a + b
计算结果。
代码实现与解释
import sys# for 循环遍历 sys.stdin,逐行读取输入,直到“文件末尾(EOF)”
for line in sys.stdin:# line 包含末尾的换行符(例如输入“1 5”时,line 的值是 "1 5\n")# split() 方法默认分割“所有空白符”(包括换行、空格),得到列表 ["1", "5"]a, b = map(int, line.split()) # 用 map 将字符串转整数,分别赋值给 a、bprint(a + b)
输入输出示例
输入(多行,每行两个整数) | 输出(每行对应两数之和) |
---|---|
|
|
|
|
|
|
关键逻辑解析
-
逐行读取到 EOF:
for line in sys.stdin
会自动逐行读取 “标准输入”,直到没有更多输入(遇到文件末尾时循环自动结束)。 -
自动处理换行符:
line
会包含每行末尾的换行符,但split()
方法会忽略所有 “空白符”(包括换行、空格),因此能正确分割出数字字符串。 -
类型转换与计算:
map(int, line.split())
将分割得到的字符串列表(如["1", "5"]
)转为整数列表,再通过 “解包赋值” 给a
和b
,最后计算并打印a + b
。
这种写法简洁且高效,是算法竞赛中处理 “不定量输入直到 EOF” 场景的常用方式。