Python 为什么会出现局部变量';尺寸';在调用形状函数中?

Python 为什么会出现局部变量';尺寸';在调用形状函数中?,python,while-loop,variable-assignment,Python,While Loop,Variable Assignment,我不知道为什么会出现这个错误: 代码如下“形状程序,乔丹·汉普森” def main(): “”“主凸台功能”“” shape=“” 而形状!=“q”: shape=“” shape=input(“输入要绘制的形状(q要退出):”)。lower() 如果形状=“q”: 打印(“再见”) elif获取有效形状(形状): 调用形状(shape) 其他: 打印(“未知形状。请重试”) def调用形状(形状): “”“调用形状”“” 如果形状=“矩形”: 高度=整数(输入(“输入高度:”) 获取有效大小

我不知道为什么会出现这个错误:

代码如下“形状程序,乔丹·汉普森”

def main():
“”“主凸台功能”“”
shape=“”
而形状!=“q”:
shape=“”
shape=input(“输入要绘制的形状(q要退出):”)。lower()
如果形状=“q”:
打印(“再见”)
elif获取有效形状(形状):
调用形状(shape)
其他:
打印(“未知形状。请重试”)
def调用形状(形状):
“”“调用形状”“”
如果形状=“矩形”:
高度=整数(输入(“输入高度:”)
获取有效大小矩形高度(高度)时:
高度=整数(输入(“输入高度:”)
宽度=整数(输入(“输入宽度:”)
获取有效大小矩形宽度(宽度)时:
宽度=整数(输入(“输入宽度:”)
打印矩形(高度、宽度)
其他:
size=int(输入(“输入大小:”)
获取有效大小时(大小):
size=int(输入(“输入大小:”)
如果形状=“正方形”:
返回打印方格(大小)
elif形状==“三角形”:
返回打印三角形(大小)
def get_有效大小_矩形_宽度(高度):
“”“检查矩形大小是否有效”“”
如果高度<1:
打印(“值必须至少为1”)
返回真值
其他:
返回错误
def get_有效_大小_矩形_高度(宽度):
“”“检查矩形大小是否有效”“”
如果宽度小于1:
打印(“值必须至少为1”)
返回真值
其他:
返回错误
def get_有效_大小(大小):
“”“检查大小是否有效”“”

如果形状==“三角形”或“正方形”且大小请查看此处的简化代码:

if shape == "rectangle":
    # size not declared here...
else:
   size = int(input("Enter size: "))

while get_valid_size(size): 
如果
形状
确实是一个
“矩形”
,则不会声明
大小
,并且不能在
while
循环中使用它。解决此问题的一种方法是使用无效值预先声明它:

size = -1
if shape == "rectangle":
    # size not declared here...
else:
   size = int(input("Enter size: "))

while get_valid_size(size): 

这似乎是一个缩进错误。从
while get\u valid\u size(size):
到该函数末尾的所有内容都应该向右移动一个缩进,以便它包含在
else
块中。

我刚刚尝试了这个方法,现在出现了一个新错误“输入要绘制的形状(q要退出):矩形输入高度:5回溯(上次调用):文件“C:\Program Files(x86)\Wing IDE 101 5.1\src\debug\tserver\u sandbox.py”,第109行,在文件“C:\Program Files(x86)\Wing IDE 101 5.1\src\debug\tserver\u sandbox.py”中,在主文件“C:\Program Files(x86)\Wing IDE 101 5.1\src\debug\tserver\u sandbox.py”中,第44行,在调用形状文件“C:\Program Files(x86)”中\Wing IDE 101 5.1\src\debug\tserver\u sandbox.py”,第72行,在get\u valid\u size builtins.NameError中:未定义名称“shape”
size = -1
if shape == "rectangle":
    # size not declared here...
else:
   size = int(input("Enter size: "))

while get_valid_size(size):