Добрый день! Вот у меня есть строка, допустим
1 1 1 1 1
Можно ли как то читать по одному числу из данной строки, не считываю полностью?
То есть следующее решение не подходит: arr = list(map(int, input().split()))
GoshkaLPне полностью считывая что?
не считываю полностью?
GoshkaLPЧто ты имеешь в виду конкретно? Там дофига способов считывания чисел по одному.
поэтому хотелось бы считывать их по одному, как допустим это работает в С++
GoshkaLPЕсли тебе подают числа друг за другом “бесконечно” (хотя там нет бесконечности, но похожее на бесконечность понятие может быть - получение данных с датчиков, которые работают непрерывно сутками), то читать их можно в конечном автомате, который берёт по символу и копит из них числа, а потом при разрыве числа передаёт число на ожидающий число алгоритм.
Вот у меня есть строка, допустим
1 1 1 1 1
Можно ли как то читать по одному числу из данной строки, не считываю полностью?
То есть следующее решение не подходит:arr = list(map(int, input().split()))
>>> import sys >>> >>> s = sys.stdin.read(2) 12345 >>> s '12' >>>
>>> import sys >>> >>> def f(count): ... out = [] ... n = 0 ... state = 'wait_digit' ... accumulator = '' ... while True: ... ch = sys.stdin.read(1) ... if state == 'wait_digit': ... if ch.isdigit(): ... accumulator += ch ... state = 'wait_nondigit' ... elif state == 'wait_nondigit': ... if ch.isdigit(): ... accumulator += ch ... else: ... number = int(accumulator) ... accumulator = '' ... out.append(number) ... n += 1 ... state = 'wait_digit' ... if n >= count: ... break ... return out ... >>> f(3) 111 222 333 444 555 666 777 888 x [111, 222, 333] >>> >>> f(1) [444] >>> >>> f(1) [555] >>> >>> f(2) [666, 777] >>> >>> f(2) 999 [888, 999] >>>
py.user.next
for (size_t i = 0; i < n; ++i) {
cin >> x;
}
GoshkaLPВот этот конечный автомат бери и при обнаружении числа обрабатывай его.
То есть хочется сразу обрабатывать числа на лету, не сохраняя их в какой-нибудь массив.
>>> import sys >>> >>> def g(): ... state = 'wait_digit' ... accumulator = '' ... while True: ... ch = sys.stdin.read(1) ... if state == 'wait_digit': ... if ch.isdigit(): ... accumulator += ch ... state = 'wait_nondigit' ... elif state == 'wait_nondigit': ... if ch.isdigit(): ... accumulator += ch ... else: ... number = int(accumulator) ... accumulator = '' ... yield number ... state = 'wait_digit' ... >>> numbers = g() >>> >>> next(numbers) 111 222 333 444 x 555 666 y 777 z 888 x 111 >>> next(numbers) 222 >>> next(numbers) 333 >>> next(numbers) 444 >>> next(numbers) 555 >>> next(numbers) 666 >>> next(numbers) 777 >>> next(numbers) 888 >>> next(numbers) 999 999 >>>
py.user.nextСпасибо!