Python沙漏图案打印代码调试:如何解决变量未定义错误?(沙漏.如何解决.变量.调试.图案...)

wufei123 发布于 2025-03-14 阅读(8)

python沙漏图案打印代码调试:如何解决变量未定义错误?

Python沙漏图案打印:调试与改进

本文分析并解决一个Python新手在打印沙漏图案代码中遇到的“变量未定义”错误。 新手代码意图通过is_integer_string函数验证输入是否为整数,再调用print_hourglass函数打印沙漏。然而,输入处理和变量定义存在问题,导致运行时报错NameError: name 'sym' is not defined。

错误根源在于输入处理逻辑缺陷:代码尝试将输入转换为整数,但未处理潜在异常,也未正确获取沙漏图案符号。

改进后的代码:

我们对代码进行了如下改进:

  1. 增强is_integer_string函数健壮性: 该函数现在不仅检查字符串是否仅包含数字,还考虑了负数的情况,避免了不必要的类型转换,只判断字符串格式是否符合整数要求。

  2. 重构输入处理: 代码接收整数输入n,使用is_integer_string验证。若有效,则提示用户输入沙漏符号sym,再调用print_hourglass;若无效,则打印错误信息。

  3. 完善错误处理: 使用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沙漏图案打印代码调试:如何解决变量未定义错误?的详细内容,更多请关注知识资源分享宝库其它相关文章!

标签:  沙漏 如何解决 变量 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。