
Python入门:绘制沙漏图形并进行输入验证
本文将讲解如何修正一个Python新手在编写沙漏图形绘制程序时遇到的变量未定义错误。程序的目标是根据用户输入的整数n和字符sym,绘制一个由sym字符组成的沙漏图案。原始代码中存在NameError错误,提示sym变量未定义。让我们分析并解决这个问题。
原始代码主要包含两个函数:is_integer_string用于验证输入是否为整数,print_hourglass用于绘制沙漏图案。然而,在处理用户输入时出现问题,导致print_hourglass函数调用时sym变量未定义。
原始代码试图使用map(int, input().split())同时读取n和sym。这假设用户输入的是两个用空格分隔的整数。但实际上,sym应该是一个字符或字符串,而不是整数。因此,map(int, input().split())会抛出ValueError异常,并且sym没有正确赋值。
立即学习“Python免费学习笔记(深入)”;
改进后的代码如下:
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)) # 修正公式,使沙漏更对称 print(' ' * (i - 1) + sym * ((i + 1) * 2 -1)) # 修正公式,使沙漏更对称 i += 2 while i > 0: print(' ' * (i - 1) + sym * (i * 2 -1)) # 修正公式,使沙漏更对称 i -= 2try: n_input = input("请输入整数n:") if is_integer_string(n_input): n = int(n_input) sym = input("请输入字符sym:") print_hourglass(n, sym) else: print("输入的n不是整数")except ValueError: print("输入错误,请重新输入")except Exception as e: print(f"发生错误: {e}")
改进后的代码首先修正了is_integer_string函数,使其能够正确处理负数。更重要的是,它将n和sym的输入分开处理。先读取n,验证其是否为整数,然后读取sym,避免了map函数造成的错误。这样,sym变量在print_hourglass函数调用前得到了正确的赋值,从而解决了NameError错误。代码还对输入进行了更健壮的错误处理,并增加了更友好的用户提示。 同时,也修正了print_hourglass函数中计算字符数量的公式,使沙漏图形更对称。 最后添加了一个更通用的except块来捕获其他可能的异常。
以上就是Python沙漏图形绘制:如何避免变量未定义错误?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1360114.html
微信扫一扫
支付宝扫一扫