python-3.7 - 局部变量不在函数内部定义,而是在函数外部和之上定义
问题描述
我以前没有遇到过这个问题,如果我将代码从 triangle() 中取出并将其放在 while 循环下,一切都很好。如果我添加 triangle(input_argument) 它然后运行但永远不会退出 while 循环,即使你输入一个字符串。
...
定义主():
# Defining initial conditions.
input_argument = input("Enter a number or done: ")
triangle_list = []
def triangle():
input_argument = int(input_argument)
triangle_number = (input_argument*(input_argument+1)//2)
triangle_list.append(triangle_number)
print("Your number of", input_argument, "has a triangle number of",
str(triangle_number) + ".")
input_argument = input("Enter a new number or done: ")
# Test function for input between int or anything else.
def num_test():
try:
int(input_argument)
return True
except ValueError:
return False
while num_test() is True:
triangle()
num_test()
print(triangle_list)
主要的() ...
编辑:
def num_test(input_argument):
try:
int(input_argument)
return True
except ValueError:
return False
def triangle(input_argument, triangle_list):
input_argument = int(input_argument)
triangle_number = (input_argument*(input_argument+1)//2)
triangle_list.append(triangle_number)
print("Your number of", input_argument, "has a triangle number of",
str(triangle_number) + ".")
input_argument = input("Enter a new number or done: ")
return
def main():
input_argument = input("Enter a number or done: ")
triangle_list = []
while num_test(input_argument) is True:
triangle(input_argument, triangle_list)
num_test(input_argument)
print(triangle_list)
main()
解决方案
这里有一堆基本错误,所以让我们来看看一个固定的版本:
def get_input():
try:
value = input('Enter a number or done:')
return int(value)
except ValueError:
return False
def triangle(input, list):
triangle_number = (input*(input+1)//2)
list.append(triangle_number)
print(f"Your number of {input} has a triangle number of {str(triangle_number)}.")
def main():
triangle_list = []
while True:
value = get_input()
if value is False:
break
triangle(value, triangle_list)
print(triangle_list)
main()
让我们从 开始main
,这在概念上非常简单:
- 我们建立了一个清单,
- 然后我们填充它,
- 然后我们打印它。
我们如何填充它?我们循环输入聚合:
- 从用户那里获得价值。那要么是一个数字,要么
False
- 如果为 False,则立即停止循环。
- 如果不是,请使用当前值和先前值的列表调用我们的三角形函数
我们如何从用户那里获得价值?我们使用input()
, 然后尝试返回该输入的 int-cast 版本。如果失败,我们知道输入是数字,否则我们只返回一个数字:正是我们需要的。
我们的三角形函数是做什么的?它获取当前值和先前值列表,计算一些数字,将当前值添加到先前值列表中,打印并退出。
也不是 Python 3 版本的格式化字符串:如果您想要一个带有来自变量的值(甚至来自其他代码调用的值)的字符串,请不要使用字符串连接。使用格式化的字符串,它们很棒。