Использование генератора для сопоставления пользовательского ввода в нескольких строках - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь сэкономить здесь немного памяти - я создаю программу, в которой пользователь может ввести (составленный) список целых чисел, например:

1
2
3
4
5
.
.
.

Приведенный ниже код работает хорошо!

input_list = []

while True:
    try:
        line = input()
    except EOFError:
        break
    input_list.append(int(line))

print(input_list)

Но Теперь я хотел бы использовать какое-то выражение генератора для оценки списка только тогда, когда мне нужно, и я почти (ах!) Получил там.

Этот код работает:

def prompt_user():

    while True:
        try:
            line = input()

        except EOFError:
            print(line)
            break

        yield line

input_list = (int(line) for line in prompt_user())

print(list(input_list))

с одним только шарлатаном: последнее целое число, введенное пользователем, всегда опускается. Так, например (^D - это я набираю CTRL + D на консоли из отладчика pycharm):

1
2
3
4^D  
3   # ==> seems like after the EOF was detected the integer on the same 
    #     line got completely discarded
[1, 2, 3]

Я действительно не знаю, как go дальше.

1 Ответ

0 голосов
/ 06 мая 2020

Благодаря @chepner и этому другому потоку я уменьшил весь этот logi c до:

import sys

N = input()  # input returns the first element in our stacked input. 
input_list = map(int, [N] + sys.stdin.readlines())
print(list(input_list))

, используя тот факт, что sys.stdin уже является повторяемым!

...