首页 > 解决方案 > 局部变量不在函数内部定义,而是在函数外部和之上定义

问题描述

我以前没有遇到过这个问题,如果我将代码从 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()

标签: python-3.7

解决方案


这里有一堆基本错误,所以让我们来看看一个固定的版本:

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,这在概念上非常简单:

  1. 我们建立了一个清单,
  2. 然后我们填充它,
  3. 然后我们打印它。

我们如何填充它?我们循环输入聚合:

  1. 从用户那里获得价值。那要么是一个数字,要么False
  2. 如果为 False,则立即停止循环。
  3. 如果不是,请使用当前值和先前值的列表调用我们的三角形函数

我们如何从用户那里获得价值?我们使用input(), 然后尝试返回该输入的 int-cast 版本。如果失败,我们知道输入是数字,否则我们只返回一个数字:正是我们需要的。

我们的三角形函数是做什么的?它获取当前值和先前值列表,计算一些数字,将当前值添加到先前值列表中,打印并退出。

也不是 Python 3 版本的格式化字符串:如果您想要一个带有来自变量的值(甚至来自其他代码调用的值)的字符串,请不要使用字符串连接。使用格式化的字符串,它们很棒。


推荐阅读