Python新手打印沙漏图案时遭遇NameError:问题分析与代码改进
本文针对Python初学者在打印沙漏图案时遇到的NameError: name 'sym' is not defined错误提供详细的解决方案。 原始代码意图使用print_hourglass函数打印由用户指定字符构成的沙漏图案,但由于输入处理不当导致错误。
问题根源在于原始代码的输入处理:它试图同时读取行数和字符,但如果用户输入格式不正确(例如,只输入一个数字或输入非数字字符),map(int, input().split())函数会引发ValueError异常。 更重要的是,即使没有ValueError,如果用户没有提供第二个输入(字符),sym变量将未定义,从而导致NameError。
改进后的代码通过更稳健的输入处理和变量定义解决了这个问题:
立即学习“Python免费学习笔记(深入)”;
def is_integer_string(s): """检查输入字符串是否为整数""" try: int(s) return True except ValueError: return False def print_hourglass(n, sym): """打印沙漏图案""" i = 1 while n >= i * i: print(' ' * (i - 1) + sym * (i * 2 -1)) # 修正公式 print(' ' * (i - 1) + sym * ((i + 1) * 2 -1)) # 修正公式 i += 2 while i > 0: print(' ' * (i - 1) + sym * (i * 2 -1)) # 修正公式 i -= 2 try: n_str = input("请输入沙漏的行数(奇数):") if is_integer_string(n_str): n = int(n_str) if n % 2 == 0: print("请输入奇数") else: sym = input("请输入构成沙漏的字符:") print_hourglass(n, sym) else: print("无效输入,请输入整数") except Exception as e: print(f"发生错误: {e}")
改进之处:
通过这些改进,代码更加健壮,能够有效地处理各种用户输入,避免NameError错误,并打印出正确的沙漏图案。
以上就是Python新手打印沙漏图案时遇到NameError错误该如何解决?的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号