Python新手打印沙漏图案时遭遇
:问题分析与代码改进
本文针对Python初学者在打印沙漏图案时遇到的
错误提供详细的解决方案。 原始代码意图使用
函数打印由用户指定字符构成的沙漏图案,但由于输入处理不当导致错误。
问题根源在于原始代码的输入处理:它试图同时读取行数和字符,但如果用户输入格式不正确(例如,只输入一个数字或输入非数字字符),
函数会引发
异常。 更重要的是,即使没有
,如果用户没有提供第二个输入(字符),
变量将未定义,从而导致
。
改进后的代码通过更稳健的输入处理和变量定义解决了这个问题:
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
立即学习
“
Python免费学习笔记(深入)
”;
改进之处:
更清晰的输入提示
: 代码增加了输入提示,指导用户输入行数和字符。
单独读取输入
: 代码分别读取行数和字符,避免了
函数的潜在问题。
整数校验
:
函数简化了,使用
块更简洁地检查输入是否为整数。
奇数校验
: 增加了对输入行数是否为奇数的校验,确保沙漏图案的正确显示。
错误处理
: 使用
块捕获所有可能的异常,并打印友好的错误信息。
公式修正
: 原代码中打印沙漏图案的公式略有瑕疵,已修正,使其能够正确打印沙漏图案。
通过这些改进,代码更加健壮,能够有效地处理各种用户输入,避免
错误,并打印出正确的沙漏图案。
NameErrorNameError: name 'sym' is not definedprint_hourglassmap(int, input().split())ValueErrorValueErrorsymNameErrordef 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}")mapis_integer_stringtry-excepttry-exceptNameError