Может ли вход существовать в определенной функции в Python? - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь сократить процесс создания списков с помощью определенной функции, где переменная является именем списка.При запуске код пропускает пользовательский ввод.

Когда я запускаю свой код, кажется, что раздел пользовательского ввода полностью пропускается, и поэтому он просто печатает пустой список.Я пытался возиться с именами переменных и определять вещи в разных точках кода.Я пропускаю общее правило Python или в моем коде отсутствует очевидная ошибка?

def list_creation(list_name):
    list_name = []
    num = 0
    while num != "end":
        return(list_name)
        num = input("Input a number: ")
        print("To end, type end as number input")
        if num != "end":
            list_name.append(num)


list_creation(list_Alpha)

print("This is the first list: " + str(list_Alpha))

list_creation(list_Beta)

print("This is the second list: " + str(list_Beta))

Я хочу, чтобы два отдельных списка распечатывали числа, введенные пользователем.В настоящее время он просто печатает два пустых списка.

Ответы [ 3 ]

0 голосов
/ 23 января 2019

Вам нужно переместить оператор return в конец функции, потому что return всегда останавливает выполнение функции.

Кроме того, то, что вы пытаетесь сделать (насколько мне известно), невозможно или практически невозможно.Вы не можете присвоить переменную, сделав ее аргументом в функции, вместо этого вы должны полностью удалить параметр list_name, поскольку вы все равно немедленно переназначаете его и называете его как list_alpha = list_creation()

Как примечаниепользователь, вероятно, хочет увидеть весь бит «В конец, введите конец как ввод числа», прежде чем он начнет вводить.

0 голосов
/ 23 января 2019

Динамическое определение имен переменных не рекомендуется. С учетом вышесказанного, следующий код должен сработать. Проблема заключалась в неуместном операторе возврата и путанице имени переменной с самой переменной.

def list_creation(list_name):
    g[list_name] = []
    num = 0
    while num != "end":
        num = input("Input a number: ")
        print("To end, type end as number input")
        if num != "end":
            g[list_name].append(num)

g = globals()
list_creation('list_Alpha')
print("This is the first list: " + str(list_Alpha))

list_creation('list_Beta')
print("This is the second list: " + str(list_Beta))
0 голосов
/ 23 января 2019

В вашем коде есть несколько фундаментальных недостатков.

  1. Вы переопределяете list_name, то есть то, что списки Alpha и Beta используют в качестве возврата.
    (list_name = [] разъединяет его с Alpha и Beta, поэтому ваша функция становится бесполезной.)
  2. Вы возвращаетесь из функции сразу после запуска цикла while
    (поэтому вы никогда не достигнете ввода)

В вашей функции:

list_Alpha = []
list_Beta = []

def list_creation(list_name):
    # list_name = [] <-- is no longer Alpha or Beta, get rid of this!
    num = 0
    ...

return должно идтив конце цикла while, чтобы достичь ввода:

while num != "end":
    num = input("Input a number: ")
    print("To end, type end as number input")
    if num != "end":
        list_name.append(num)
return(list_name)
...