如果您在 python 中为变量赋值,它不会自动使用global 作用域变量,而是将它们分配给局部作用域变量。请注意,对于只读函数,global 会自动使用变量。
要解决您的问题,您可以在分配给全局变量之前使用 global 关键字。
foot = inch = 0
foot_to_meter = foot_to_centimeter = inch_to_meter = inch_to_centimeter =0
def read():
global foot, inch
foot = int(input('foot?'))
inch = int(input('inch?'))
def calculater():
global foot_to_meter, foot_to_centimeter, inch_to_meter, inch_to_centimeter
foot_to_meter = 0.3048 * foot
foot_to_centimeter = 100 * foot_to_meter
# inch_to_meter = 12 * foot
inch_to_meter = (1.0/12) * 0.3048* inch
inch_to_centimeter = 100 * inch_to_meter
def write():
print(f'foot is {foot_to_centimeter} centimeter and {foot_to_meter} meter')
print(f'inch is {inch_to_centimeter} centimeter and {inch_to_centimeter} meter')
# print('the' foot 'is' meter 'meter' 'and' 'foot is' foot_to_centimeter)
# print('the' inch 'is' meter 'meter' "and" 'icnh is' inch_to_centimeter )
def main():
read()
calculater()
write()
main()
我想指出,在处理更大的代码库和导入模块时,全局变量通常会导致麻烦,这就是为什么我建议在非绝对必要时不要使用它们的原因。
你可以像这样重写你的程序:
def read():
foot = int(input('foot?'))
inch = int(input('inch?'))
return foot, inch
def calculater(foot, inch):
foot_to_meter = 0.3048 * foot
foot_to_centimeter = 100 * foot_to_meter
# inch_to_meter = 12 * foot
inch_to_meter = (1.0/12) * 0.3048* inch
inch_to_centimeter = 100 * inch_to_meter
return foot_to_meter, foot_to_centimeter, inch_to_meter, inch_to_centimeter
def write(foot_to_meter, foot_to_centimeter, inch_to_meter, inch_to_centimeter):
print(f'foot is {foot_to_centimeter} centimeter and {foot_to_meter} meter')
print(f'inch is {inch_to_centimeter} centimeter and {inch_to_centimeter} meter')
# print('the' foot 'is' meter 'meter' 'and' 'foot is' foot_to_centimeter)
# print('the' inch 'is' meter 'meter' "and" 'icnh is' inch_to_centimeter )
def main():
foot, inch = read()
foot_to_meter, foot_to_centimeter, inch_to_meter, inch_to_centimeter = calculater(foot, inch)
write(foot_to_meter, foot_to_centimeter, inch_to_meter, inch_to_centimeter)
main()