Python新手打印沙漏图案时遇到NameError错误该如何解决?

Python新手打印沙漏图案时遭遇NameError:问题分析与代码改进

本文针对Python初学者在打印沙漏图案时遇到的NameError: name 'sym' is not defined错误提供详细的解决方案。 原始代码意图使用print_hourglass函数打印由用户指定字符构成的沙漏图案,但由于输入处理不当导致错误。

问题根源在于原始代码的输入处理:它试图同时读取行数和字符,但如果用户输入格式不正确(例如,只输入一个数字或输入非数字字符),map(int, input().split())函数会引发ValueError异常。 更重要的是,即使没有ValueError,如果用户没有提供第二个输入(字符),sym变量将未定义,从而导致NameError。

改进后的代码通过更稳健的输入处理和变量定义解决了这个问题:

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}")

改进之处:

  1. 更清晰的输入提示: 代码增加了输入提示,指导用户输入行数和字符。
  2. 单独读取输入: 代码分别读取行数和字符,避免了map函数的潜在问题。
  3. 整数校验: is_integer_string函数简化了,使用try-except块更简洁地检查输入是否为整数。
  4. 奇数校验: 增加了对输入行数是否为奇数的校验,确保沙漏图案的正确显示。
  5. 错误处理: 使用try-except块捕获所有可能的异常,并打印友好的错误信息。
  6. 公式修正: 原代码中打印沙漏图案的公式略有瑕疵,已修正,使其能够正确打印沙漏图案。

通过这些改进,代码更加健壮,能够有效地处理各种用户输入,避免NameError错误,并打印出正确的沙漏图案。

以上就是Python新手打印沙漏图案时遇到NameError错误该如何解决?的详细内容,更多请关注骃骐网【www.myinqi.com】。

相关推荐:

Python生成艺术图案实例代码(分形、数学曲线)

这篇文章主要介绍了Python生成艺术图案(分形、数学曲线)的相关资料,主要讲解如何用Python的matplotlib和numpy库绘制分形与数学曲线,涵盖曼德勃罗集、科赫雪花、心形线等经典图形,需要的朋友可以参考下 目录前言分形:自然界的数学之美曼德勃罗集朱利亚集数学曲线:优雅的几何形状玫瑰线心形线阿基米德螺旋线完整源码总结前言 艺术与数学的融合总能带来令人惊叹的视觉体验,这种跨学科的碰撞在计...

XML属性(attribute)和子元素(element)该如何选择?

当数据是描述性、元数据性质且值简单时,应使用属性;2. 当数据为核心内容、结构复杂或需扩展时,应使用子元素;3. 避免过度使用属性或过度嵌套,保持语义清晰和层级合理;4. 明确区分数据与元数据,确保设计一致性;5. 使用命名空间防止名称冲突;6. 通过语义化命名和适当层级提升可读性;7. 面向未来设计,优先选择扩展性更强的子元素;8. 利用xml schema进行结构定义与验证以平衡可读性和扩展性...

安装系统时提示无法识别硬盘,该如何处理?

检查硬盘连接:确认sata数据线和电源线连接稳固,更换数据线尝试;2. bios/uefi设置:确认硬盘在bios中被识别,并将sata模式设为ahci(旧系统可试ide);3. 驱动问题:若bios识别而系统安装程序不识别,需从主板或硬盘厂商网站下载并加载对应驱动(如raid驱动);4. 分区表问题:在安装界面删除旧分区并新建分区以初始化硬盘(会清除数据);5. 硬盘健康状况:用hd tune等...

电脑蓝屏后重启卡在 BIOS 界面 该如何处理

先断电并移除外设,排查故障外设导致无法启动的问题;2. 重插内存、显卡、硬盘线缆,确保硬件接触良好,排除松动或氧化问题;3. 清除cmos重置bios设置,并检查启动顺序和硬盘模式(如ahci),确保主硬盘被识别且设为第一启动项;4. 若bios仍不识别硬盘或持续卡住,大概率是硬盘或内存硬件故障,需进一步用最小化启动或启动u盘辅助判断;5. 无备用硬件时,可通过单根内存轮流测试、最小系统法和u盘启...

电脑安装驱动程序时提示错误,该如何处理?

1.确认管理员权限:右键安装程序选择“以管理员身份运行”;2.暂时关闭杀毒软件等安全程序避免误拦截;3.使用ddu等工具彻底清除旧驱动残留;4.运行sfc /scannow和dism命令修复系统文件;5.尝试兼容性模式或安装官网旧版稳定驱动;6.进入安全模式安装以减少干扰。这些问题排查顺序由浅入深,能有效解决驱动安装错误并确保系统稳定,完整执行后通常可恢复正常。 电脑安装驱动程序时提示错误,通常是...

电脑蓝屏显示 IRQL_NOT_LESS_OR_EQUAL 是什么原因 该如何解决

驱动问题:回滚或更新显卡、网卡等驱动,尤其是新安装或更新后出现蓝屏;2. 内存故障:使用windows内存诊断工具检测并更换损坏内存条;3. 系统文件损坏:运行sfc /scannow修复系统文件,chkdsk检查硬盘错误;4. 软件冲突:卸载安全软件或虚拟化软件排查冲突;5. 深度排查:通过minidump日志分析定位具体驱动或进程,使用干净启动排除第三方服务干扰,最终可尝试系统还原——这几乎覆...

使用Java绘制一个520爱心图案的示例代码

520在中国网络文化中代表"我爱你",用代码绘制一个爱心图案是一种浪漫的表达方式,这篇文章小编就来和大家介绍一下如何使用Java绘制一个520爱心图案吧 目录一、实现原理二、完整代码实现三、代码解析四、运行效果五、扩展与改进六、总结一、实现原理 我们将使用数学方程来绘制爱心形状。爱心曲线的数学方程有多种,这里我们使用一种简单的心形参数方程: x = 16 * sin³...

win10电脑很卡反应很慢该如何处理? 提高电脑的运行速度的技巧

电脑用久了,经常会遇到卡顿或者反应慢的情况,这可真让人头疼,该怎么提升电脑运行速度呢?详细请看下文介绍 相信很多用户在使用Win10系统时,都会遇到各种各样的问题,最近有不少用户发现自己的电脑开机运行速度慢的情况,这是怎么回事呢?遇到这种情况具体该如何解决呢?本文就给大家带来Win10系统运行速度慢的解决方法吧! 操作方法: 1、首先,按下“Win+R”键打开设置界面,再点...

当Chrome更新后,原有的CSS样式出现异常,该如何排查?

当chrome更新后,css样式出现异常时,应按以下步骤排查:1.检查浏览器控制台,查看错误或警告信息。2.使用元素检查工具查看css规则。3.比较旧版本和新版本的表现。4.检查css前缀是否正确。5.测试不同的css属性以隔离问题。6.查看chrome更新日志了解变化。7.使用css验证工具检查代码符合性。8.考虑回退方案,如使用javascript动态调整样式。通过这些步骤,你可以有效解决ch...

当 PHP 连接数据库失败,该如何排查与修复?

php连接数据库失败的原因包括配置错误、网络问题、数据库服务未启动和权限问题。解决步骤为:1.查看错误信息;2.检查数据库服务状态;3.测试网络连接;4.验证配置文件;5.尝试手动连接。 在 PHP 中连接数据库失败是一个常见的问题,很多开发者在面对这种情况时都会感到头疼。不过别担心,解决这个问题并不难,关键是找到问题的根源并进行有效的排查和修复。今天我就来分享一下如何快速定位和解决 PHP 连接...