Локальная переменная не определена внутри функции, но определена снаружи и над ней - PullRequest
0 голосов
/ 20 февраля 2020

Я не сталкивался с этим раньше, если я беру код из треугольника () и помещаю его в то время как l oop, все работает отлично. если я добавлю треугольник (input_argument), он запустится, но никогда не выйдет, пока l oop, даже если вы введете строку.

...

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 () ...

EDIT:

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

1 Ответ

0 голосов
/ 20 февраля 2020

Здесь есть куча элементарных ошибок, поэтому давайте вместо этого рассмотрим фиксированную версию:

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. , затем печатаем его.

Как мы его заполняем? Мы l oop нашего ввода агрегации:

  1. получить значение от пользователя. Это будет либо число, либо False
  2. , если оно равно False, немедленно прекратите цикл.
  3. , если это не так, вызовите нашу функцию треугольника с текущим значением и списком предыдущие значения

Как получить значение от пользователя? Мы используем input(), а затем пытаемся вернуть версию для этого ввода. Если это не помогло, мы знаем, что ввод был числом номер, но в противном случае мы просто возвращаем число: именно то, что нам нужно.

Что делает наша функция треугольника? Он принимает текущее значение и список предыдущих значений, вычисляет некоторое число, добавляет текущее значение в список предыдущих значений, печатает и завершает работу.

Также не версия Python 3 отформатированных строк: don не используйте конкатенацию строк, если вам нужна строка со значениями из переменных (или даже из значений из других кодовых вызовов). Используйте отформатированные строки, они великолепны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...