Python沙漏图案打印:调试与改进
本文分析并解决一个Python新手在打印沙漏图案代码中遇到的“变量未定义”错误。 新手代码意图通过is_integer_string函数验证输入是否为整数,再调用print_hourglass函数打印沙漏。然而,输入处理和变量定义存在问题,导致运行时报错NameError: name 'sym' is not defined。
错误根源在于输入处理逻辑缺陷:代码尝试将输入转换为整数,但未处理潜在异常,也未正确获取沙漏图案符号。
改进后的代码:
我们对代码进行了如下改进:
-
增强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 True def 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 -= 2 try: 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沙漏图案打印代码调试:如何解决变量未定义错误?的详细内容,更多请关注知识资源分享宝库其它相关文章!
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。