
1. Python输入输出基础认知刚接触Python时最先需要掌握的就是如何与程序进行交互。输入(Input)和输出(Output)就像程序的耳朵和嘴巴——没有它们程序既听不懂指令也说不出结果。我在教学过程中发现很多初学者容易忽视格式化输出的重要性导致后续调试和结果展示时遇到各种麻烦。Python 3.x版本提供了多种输入输出方式从最基础的print()/input()到强大的f-string格式化每种方法都有其适用场景。举个例子当我们需要在控制台显示欢迎来到Python世界时直接print是最简单的选择print(欢迎来到Python世界)但如果我们想在字符串中插入变量值比如用户名和年龄就需要用到格式化输出了。这正是本教程要重点讲解的内容。2. 基础输入操作解析2.1 input()函数详解Python中使用input()函数获取用户输入这个函数会暂停程序执行等待用户在控制台输入内容并按回车键确认。input()总是返回字符串类型即使输入的是数字name input(请输入你的名字) print(f你好{name})注意在Python 2.x中使用的是raw_input()函数Python 3.x中已统一为input()2.2 输入类型转换技巧由于input()始终返回字符串当我们需要其他类型的数据时必须进行类型转换。常见转换方式包括# 转换为整数 age int(input(请输入你的年龄)) # 转换为浮点数 height float(input(请输入你的身高(米))) # 转换为布尔值 is_student bool(input(是否是学生(留空为否)))实操心得在实际项目中建议对用户输入进行异常处理因为非法的输入会导致程序崩溃。例如try: age int(input(请输入年龄)) except ValueError: print(请输入有效的数字)3. 输出格式化深度解析3.1 传统格式化方法对比Python历史上出现过多种字符串格式化方法各有特点%格式化源自C语言风格print(姓名%s年龄%d身高%.2f米 % (张三, 25, 1.75))str.format()方法Python 2.6print(姓名{0}年龄{1}身高{2:.2f}米.format(张三, 25, 1.75))f-stringPython 3.6推荐name 张三 age 25 height 1.75 print(f姓名{name}年龄{age}身高{height:.2f}米)3.2 f-string高级用法f-string是Python 3.6引入的格式化字符串字面量在字符串前加f前缀可以直接在字符串中嵌入表达式# 基本变量插入 name 李四 print(f欢迎{name}) # 表达式计算 a, b 5, 3 print(f{a} {b} {a b}) # 调用方法 text hello print(f{text.upper()}) # 格式化数字 pi 3.1415926 print(fπ的值约为{pi:.3f}) # 对齐和填充 print(f{标题:*^20}) # 居中并用*填充注意事项f-string中的表达式是在运行时求值的这意味着它们可以访问当前作用域中的所有变量。但要注意不要在其中放入过于复杂的逻辑以免影响可读性。4. 格式化输出实战技巧4.1 数字格式化规范处理数值输出时经常需要控制小数位数、千分位分隔等格式number 1234567.89123456 # 保留2位小数 print(f{number:.2f}) # 输出1234567.89 # 科学计数法 print(f{number:.2e}) # 输出1.23e06 # 千分位分隔 print(f{number:,.2f}) # 输出1,234,567.89 # 百分比显示 ratio 0.4567 print(f{ratio:.1%}) # 输出45.7%4.2 日期时间格式化datetime对象可以通过strftime方法或直接使用f-string格式化from datetime import datetime now datetime.now() # 传统方式 print(now.strftime(%Y-%m-%d %H:%M:%S)) # 输出2023-08-20 14:30:15 # f-string方式 print(f{now:%Y-%m-%d %H:%M:%S}) # 同样输出2023-08-20 14:30:154.3 表格数据对齐输出当需要输出整齐的表格数据时可以使用格式化控制宽度和对齐data [ (Alice, 28, 165.2), (Bob, 32, 178.5), (Charlie, 24, 172.0) ] print(f{姓名:10}{年龄:5}{身高:10}) print(- * 25) for name, age, height in data: print(f{name:10}{age:5}{height:10.1f})输出效果姓名 年龄 身高 ------------------------- Alice 28 165.2 Bob 32 178.5 Charlie 24 172.05. 文件输入输出操作5.1 基础文件读写Python使用open()函数进行文件操作基本模式包括r读取默认w写入会覆盖原有内容a追加x独占创建b二进制模式t文本模式默认# 写入文件 with open(example.txt, w, encodingutf-8) as f: f.write(这是第一行\n) f.write(这是第二行\n) # 读取文件 with open(example.txt, r, encodingutf-8) as f: content f.read() print(content)5.2 JSON格式处理JSON是常用的数据交换格式Python通过json模块轻松处理import json data { name: 张三, age: 25, courses: [Python, Java, C] } # 写入JSON文件 with open(data.json, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent4) # 读取JSON文件 with open(data.json, r, encodingutf-8) as f: loaded_data json.load(f) print(loaded_data)实操心得ensure_asciiFalse参数允许保存非ASCII字符如中文indent参数使输出的JSON有良好的缩进格式方便阅读。6. 常见问题与解决方案6.1 编码问题处理文件操作中最常见的问题是编码不一致导致的乱码# 正确的做法是指定编码通常使用utf-8 try: with open(file.txt, r, encodingutf-8) as f: content f.read() except UnicodeDecodeError: # 尝试其他编码 with open(file.txt, r, encodinggbk) as f: content f.read()6.2 格式化输出对齐问题当需要对齐不同长度的字符串时可以指定最小宽度names [Alice, Bob, Charlie, David] for name in names: print(f{name:10} | {* * len(name)})输出Alice | ***** Bob | *** Charlie | ******* David | *****6.3 输入验证模式对于关键输入应该添加验证逻辑while True: age_input input(请输入年龄(18-60)) try: age int(age_input) if 18 age 60: break print(年龄必须在18-60之间) except ValueError: print(请输入有效的数字) print(f验证通过的年龄{age})7. 性能优化建议7.1 大量字符串拼接当需要拼接大量字符串时避免使用操作符推荐方法# 不推荐性能差 result for i in range(10000): result str(i) # 推荐方法1使用join parts [] for i in range(10000): parts.append(str(i)) result .join(parts) # 推荐方法2使用io.StringIO from io import StringIO buffer StringIO() for i in range(10000): buffer.write(str(i)) result buffer.getvalue()7.2 日志输出优化在需要频繁输出的场景如日志记录可以考虑import logging # 配置日志 logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, filenameapp.log ) # 使用日志代替print logging.info(程序启动) try: 1 / 0 except Exception as e: logging.error(f发生错误{e})8. 实际应用案例8.1 简易计算器实现结合输入输出和格式化实现一个带历史记录的计算器history [] while True: try: expr input(请输入表达式(或q退出)) if expr.lower() q: break result eval(expr) # 注意实际项目中应避免直接使用eval history.append((expr, result)) print(f结果{result:.2f}) print(\n计算历史) for i, (e, r) in enumerate(history, 1): print(f{i}. {e} {r:.2f}) except Exception as e: print(f错误{e})8.2 数据报表生成生成格式化的数据报表并保存到文件def generate_report(data, filename): with open(filename, w, encodingutf-8) as f: # 表头 f.write(f{年度报告:^50}\n\n) f.write(f{日期:15}{销售额:15}{利润:15}{增长率:15}\n) f.write(- * 60 \n) # 数据行 for item in data: date item[date] sales item[sales] profit item[profit] growth item[growth] line f{date:15}{sales:15,.2f}{profit:15,.2f}{growth:15.1%} f.write(line \n) # 汇总 total_sales sum(item[sales] for item in data) avg_growth sum(item[growth] for item in data) / len(data) f.write(\n - * 60 \n) f.write(f{总计:15}{total_sales:15,.2f}{:15}{avg_growth:15.1%}\n) # 测试数据 report_data [ {date: 2023-01, sales: 1250000, profit: 325000, growth: 0.15}, {date: 2023-02, sales: 1380000, profit: 358000, growth: 0.10}, {date: 2023-03, sales: 1520000, profit: 395000, growth: 0.12} ] generate_report(report_data, sales_report.txt)