
Python沙漏图案打印:调试与改进
本文分析并解决一个Python新手在打印沙漏图案代码中遇到的“变量未定义”错误。 新手代码意图通过is_integer_string函数验证输入是否为整数,再调用print_hourglass函数打印沙漏。然而,输入处理和变量定义存在问题,导致运行时报错NameError: name 'sym' is not defined。
错误根源在于输入处理逻辑缺陷:代码尝试将输入转换为整数,但未处理潜在异常,也未正确获取沙漏图案符号。
改进后的代码:
立即学习“Python免费学习笔记(深入)”;
我们对代码进行了如下改进:
增强is_integer_string函数健壮性: 该函数现在不仅检查字符串是否仅包含数字,还考虑了负数的情况,避免了不必要的类型转换,只判断字符串格式是否符合整数要求。
重构输入处理: 代码接收整数输入n,使用is_integer_string验证。若有效,则提示用户输入沙漏符号sym,再调用print_hourglass;若无效,则打印错误信息。
完善错误处理: 使用try-except块捕获ValueError异常,处理非整数输入。
修改后的代码如下:
def is_integer_string(s): """检查字符串是否表示整数 (包括负数)""" if not s.isdigit() and (s[0] != '-' or not s[1:].isdigit()): return False return Truedef print_hourglass(n, sym): """打印沙漏图案""" i = 1 while n >= i * i: print(' ' * (i - 1) + sym * (i * 2 -1)) #修正:减少一个sym,使图案对称 print(' ' * (i - 1) + sym * ((i + 1) * 2 -1)) #修正:减少一个sym,使图案对称 i += 2 while i > 0: print(' ' * (i - 1) + sym * (i * 2 -1)) #修正:减少一个sym,使图案对称 i -= 2try: n_str = input("请输入沙漏层数(整数): ") if is_integer_string(n_str): n = int(n_str) sym = input("请输入沙漏符号: ") print_hourglass(n, sym) else: print("无效输入:请输入整数")except ValueError: print("无效输入:请输入整数")
通过这些改进,代码能够正确处理输入,避免sym变量未定义错误,成功打印沙漏图案。 同时,也修正了原代码中沙漏图案不对称的问题。
以上就是Python沙漏图案打印代码调试:如何解决变量未定义错误?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1359210.html
微信扫一扫
支付宝扫一扫