再见,print

学python学到的第一个函数就是print

print("hello world")

不管是新手还是老手,都会经常用来调试代码。但是对于稍微复杂的对象,打印出来就的时候可读性就没那么好了。

例如:

>>> coordinates = [
...    {
...        "name": "Location 1",
...        "gps": (29.008966, 111.573724)
...    },
...    {
...        "name": "Location 2",
...        "gps": (40.1632626, 44.2935926)
...    },
...    {
...        "name": "Location 3",
...        "gps": (29.476705, 121.869339)
...    }
... ]

>>> print(coordinates)
[{'name': 'Location 1', 'gps': (29.008966, 111.573724)}, {'name': 'Location 2', 'gps': (40.1632626, 44.2935926)}, {'name': 'Location 3', 'gps': (29.476705, 121.869339)}]
>>>

打印一个很长的列表时,全部显示在一行,两个屏幕都装不下。

于是 pprint 出现了

pprint

pprint 的全称是Pretty Printer,更美观的 printer。在打印内容很长的对象时,它能够以一种格式化的形式输出。

>>> import pprint
>>> pprint.pprint(coordinates)
[{'gps': (29.008966, 111.573724), 'name': 'Location 1'},
 {'gps': (40.1632626, 44.2935926), 'name': 'Location 2'},
 {'gps': (29.476705, 121.869339), 'name': 'Location 3'}]
>>>

当然,你还可以自定义输出格式

# 指定缩进和宽度
>>> pp = pprint.PrettyPrinter(indent=4, width=50)
>>> pp.pprint(coordinates)
[   {   'gps': (29.008966, 111.573724),
        'name': 'Location 1'},
    {   'gps': (40.1632626, 44.2935926),
        'name': 'Location 2'},
    {   'gps': (29.476705, 121.869339),
        'name': 'Location 3'}]

但是pprint还不是很优雅,因为打印自定义的类时,输出的是对象的内存地址相关的一个字符串

class Person():
    def __init__(self, age):
        self.age = age

p = Person(10)

>>> print(p)
<__main__.Person object at 0x00BCEBD0>
>>> import pprint
>>> pprint.pprint(p)
<__main__.Person object at 0x00BCEBD0>

beeprint

而用beeprint可以直接打印对象里面的属性值,省去了重写 __str__  方法的麻烦

from beeprint import pp
pp(p)
instance(Person):
  age: 10

不同的是,print和pprint是python的内置模块,而 beeprint 需要额外安装。

往期热门:

修正一下#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 人形机器人仿真快速演示脚本 Quick Demo Script for Humanoid Robot Simulation 提供简单的启动方式,快速体验人形机器人仿真功能 作者:AI Assistant 日期:2024 """ import sys import os import time import argparse def check_dependencies(): """检查依赖是否安装""" try: import mujoco import mujoco_viewer import numpy as np import matplotlib.pyplot as plt print("✅ 所有依赖已安装") return True except ImportError as e: print(f"❌ 缺少依赖: {e}") print("请运行: pip install -r requirements.txt") return False def run_simple_demo(): """运行简单演示""" print("🚀 启动简单人形机器人演示...") try: from humanoid_simulation import HumanoidRobot # 创建机器人实例 robot = HumanoidRobot() # 运行简单仿真 robot.run_simulation(duration=10.0, task_sequence=["walking"]) except Exception as e: print(f"❌ 运行失败: {e}") return False return True def run_advanced_demo(): """运行高级演示""" print("🚀 启动高级人形机器人演示...") try: from humanoid_demo import HumanoidDemo # 创建演示实例 demo = HumanoidDemo() # 设置综合场景 demo.setup_demo_scenario("comprehensive") # 运行演示 demo.run_demo() except Exception as e: print(f"❌ 运行失败: {e}") return False return True def run_test_demo(): """运行测试演示""" print("🧪 运行测试演示...") try: from advanced_control import ( IntelligentDecisionSystem, PathPlanner, EnergyOptimizer, AdaptiveController ) # 测试各个模块 print("测试智能决策系统...") decision_system = IntelligentDecisionSystem() print("测试路径规划器...") path_planner = PathPlanner() print("测试能耗优化器...") energy_optimizer = EnergyOptimizer() print("测试自适应控制器...") adaptive_controller = AdaptiveController() print("✅ 所有模块测试通过") except Exception as e: print(f"❌ 测试失败: {e}") return False return True def show_menu(): """显示菜单""" print("\n" + "=" * 50) print("🤖 人形机器人仿真快速演示") print("=" * 50) print("请选择演示类型:") print("1. 简单演示 (基础行走)") print("2. 高级演示 (完整功能)") print("3. 测试演示 (模块测试)") print("4. 查看帮助") print("5. 退出") print("=" * 50) def show_help(): """显示帮助信息""" print("\n" + "=" * 50) print("📖 帮助信息") print("=" * 50) print("简单演示:") print(" - 基础双足行走") print(" - 实时3D可视化") print(" - 持续时间: 10秒") print() print("高级演示:") print(" - 完整功能演示") print(" - 智能决策系统") print(" - 路径规划和避障") print(" - 能耗优化") print(" - 自适应控制") print(" - 数据记录和分析") print(" - 持续时间: 30秒") print() print("测试演示:") print(" - 模块功能测试") print(" - 算法验证") print(" - 性能检查") print() print("命令行参数:") print(" --simple 运行简单演示") print(" --advanced 运行高级演示") print(" --test 运行测试演示") print(" --help 显示帮助信息") print("=" * 50) def main(): """主函数""" parser = argparse.ArgumentParser(description='人形机器人仿真快速演示') parser.add_argument('--simple', action='store_true', help='运行简单演示') parser.add_argument('--advanced', action='store_true', help='运行高级演示') parser.add_argument('--test', action='store_true', help='运行测试演示') parser.add_argument('--help', action='store_true', help='显示帮助信息') args = parser.parse_args() # 检查依赖 if not check_dependencies(): return # 命令行模式 if args.simple: run_simple_demo() return elif args.advanced: run_advanced_demo() return elif args.test: run_test_demo() return elif args.help: show_help() return # 交互模式 while True: show_menu() try: choice = input("请输入选择 (1-5): ").strip() if choice == '1': print("\n🎬 启动简单演示...") if run_simple_demo(): print("✅ 简单演示完成") else: print("❌ 简单演示失败") elif choice == '2': print("\n🎬 启动高级演示...") if run_advanced_demo(): print("✅ 高级演示完成") else: print("❌ 高级演示失败") elif choice == '3': print("\n🧪 启动测试演示...") if run_test_demo(): print("✅ 测试演示完成") else: print("❌ 测试演示失败") elif choice == '4': show_help() elif choice == '5': print("👋 再见!") break else: print("❌ 无效选择,请输入1-5") except KeyboardInterrupt: print("\n👋 用户中断,再见!") break except Exception as e: print(f"❌ 发生错误: {e}") if __name__ == "__main__": main()
07-29
# 初始化用户信息 user_name = "张三" user_balance = 5000 user_password = "123456" is_logged_in = False # 登陆功能 def login(): global is_logged_in input_name = input("请输入用户名: ") input_password = input("请输入密码: ") if input_name == user_name and input_password == user_password: is_logged_in = True print("登陆成功!") else: print("用户名或密码错误,请重试。") # 查询余额功能 def check_balance(): if is_logged_in: print(f"您的当前余额为: {user_balance} 元") else: print("请先登陆。") # 取款功能 def withdraw(): global user_balance if is_logged_in: amount = float(input("请输入取款金额: ")) if amount > 0 and amount <= user_balance: user_balance -= amount print(f"取款成功,当前余额为: {user_balance} 元") else: print("取款金额无效或余额不足。") else: print("请先登陆。") # 存款功能 def deposit(): global user_balance if is_logged_in: amount = float(input("请输入存款金额: ")) if amount > 0: user_balance += amount print(f"存款成功,当前余额为: {user_balance} 元") else: print("存款金额必须大于0。") else: print("请先登陆。") # 退出功能 def exit_atm(): print("感谢使用,再见!") # 主程序 while True: if not is_logged_in: login() else: print("\n请选择操作类型:") print("1. 查询余额") print("2. 取款") print("3. 存款") print("4. 退出") choice = input("请输入选项编号: ") if choice == "1": check_balance() elif choice == "2": withdraw() elif choice == "3": deposit() elif choice == "4": exit_atm() break else: print("无效的选项,请重新输入。") 简化代码
11-13
import mysql.connector # 尝试连接MySQL数据库 try: db = mysql.connector.connect( host="localhost", user="root", # 请替换为你的MySQL用户名 password="root", # 请替换为你的MySQL密码 database="tt" # 需提前创建此数据库和表 ) cursor = db.cursor() except Exception as e: print("数据库连接失败:", e) exit() # 用户登录 name = input("请输入用户名:") paw = input("请输入密码:") cursor.execute("SELECT balance FROM atm WHERE name = %s AND paw = %s", (name, paw)) result = cursor.fetchone() if not result: print("用户名或密码错误!") exit() else: print("登录成功!") balance = result[0] # 获取当前余额 # ATM 主循环 while True: print("\n--- ATM 主菜单 ---") print("1. 查询余额") print("2. 存款") print("3. 取款") print("5. 退出") print("4. 转账") choice = input("请选择操作:") if choice == "1": print(f"您的当前余额为:${balance}") elif choice == "2": amount = float(input("请输入存款金额:")) if amount > 0: balance += amount cursor.execute("UPDATE accounts SET balance = %s WHERE username = %s", (balance, name)) db.commit() print(f"存款成功,当前余额为:${balance}") else: print("存款金额必须大于0!") elif choice == "3": amount = float(input("请输入取款金额:")) if amount > 0: if amount <= balance: balance -= amount cursor.execute("UPDATE accounts SET balance = %s WHERE username = %s", (balance, name)) db.commit() print(f"取款成功,当前余额为:${balance}") else: print("余额不足!") else: print("取款金额必须大于0!") elif choice == "4": target_account = input("请输入目标账户名:") amount = float(input("请输入转账金额:")) if amount <= 0: print("转账金额必须大于0!") elif amount > balance: print("余额不足,无法完成转账!") else: # 检查目标账户是否存在 cursor.execute("SELECT balance FROM accounts WHERE username = %s", (target_account,)) target = cursor.fetchone() if not target: print("目标账户不存在!") else: # 执行转账:扣自己 + 加对方 balance -= amount target_balance = target[0] + amount cursor.execute("UPDATE accounts SET balance = %s WHERE username = %s", (balance, name)) cursor.execute("UPDATE accounts SET balance = %s WHERE username = %s", (target_balance, target_account)) db.commit() print(f"向 {target_account} 转账 ${amount} 成功!") print(f"当前余额为:${balance}") elif choice == "5": print("感谢使用,再见!") break else: print("无效选择,请重新输入!") # 关闭数据库连接 db.close() 如何修改
最新发布
11-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值