局部变量未在函数内定义,但在函数外部和之上定义

问题描述 投票:0回答:1

我以前没有遇到过这个问题,如果我从triangle()中取出代码并将其放在while循环下,则一切正常。如果我添加了三角形(input_argument),它将运行,但是即使您键入字符串也不会退出while循环。

...

def main():

# 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)

main()...

编辑:

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
1个回答
0
投票

这里有很多基本错误,所以让我们遍历固定版本:

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版本:如果要使用带有变量值的字符串(甚至是来自其他代码调用的值的字符串),请不要使用字符串连接。使用格式化的字符串,它们很棒。

© www.soinside.com 2019 - 2024. All rights reserved.