当前位置: 首页 > news >正文

【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)

输入输出示例

输入(多行,每行两个整数)

输出(每行对应两数之和)

1 5

6

10 20

30

100 200

300

关键逻辑解析

  1. 逐行读取到 EOFfor line in sys.stdin 会自动逐行读取 “标准输入”,直到没有更多输入(遇到文件末尾时循环自动结束)。

  2. 自动处理换行符line 会包含每行末尾的换行符,但 split() 方法会忽略所有 “空白符”(包括换行、空格),因此能正确分割出数字字符串。

  3. 类型转换与计算map(int, line.split()) 将分割得到的字符串列表(如 ["1", "5"])转为整数列表,再通过 “解包赋值” 给 a 和 b,最后计算并打印 a + b

这种写法简洁且高效,是算法竞赛中处理 “不定量输入直到 EOF” 场景的常用方式。

http://www.dtcms.com/a/406679.html

相关文章:

  • 整站排名服务手机p2p网站开发
  • Flex布局完全指南:从容器到项目的全方位解析
  • 网站开发搜索功能怎么实现装潢公司设计效果图
  • 营销网站建设都是专业技术人员广西玉林网站建设
  • AI论文写作工作流:从输入到输出的五步模型
  • 《从0到1搭建客户画像系统:AI工具矩阵如何解决开发困局》
  • 阿里云云效将本地的maven相关文件批量推送到阿里云仓库以及使用
  • Docker Swarm主机编排
  • [论文阅读] 人工智能+ | 突破LLM情报分析瓶颈!MAKR多Agent框架让长文本因果推理更精准
  • apifox对一批文件批量请求一个接口
  • 情绪识别论文阅读——Eyemotion
  • 帝国建站软件全栈网站开发工程师
  • 嵌入式单线程编程模型的整理
  • 永磁同步电机无速度算法--改进滑模观测器(幂次指数趋近律)
  • 综合案例2:爬取某客栈的漫画
  • C++笔记(基础)初始化输入输出 const
  • 成都网站设计培训有了网址可以建网站吗
  • 【Redis】分布式集群
  • 人工智能大模型是怎样喂数据的?
  • 其他 | 把 csdn 博客的内容导出成 pdf 文件
  • h5网站开发定制网站如何做优化排名
  • 宁夏网站建设报价网站开发全栈工程师技能图
  • AI“驯服”光伏云:卫星+深度学习预测沙尘遮蔽,发电量提升7%
  • Y3入门(1、创建一个项目)
  • Ubuntu 20.04下安装Miniconda、配置conda环境,安装PyTorch,安装YOLO等相关库(二)
  • go语言学习记录9.23
  • 驻马店网站建设价格爱站工具维护
  • 酒店网站建设流程图建立网站花钱吗
  • hive的安装
  • LeetCode 3105.最长的严格递增或递减子数组