Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 7, 2015 21:24:09

bairamov-azaT@mail.ru
Зарегистрирован: 2015-10-07
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

считывание до пробела

В общем такое дело , вводим в строку n чисел .
Как считать до нажатия пробела ?
т.е во время ввода строки (1 2 3 4 5 6 7 8 9 ) сначала мы считываем 1 и при нажатии пробела мы переключаемся со строки , программа записывает это число в переменную и с ней что то делает( допустим считаем сумму всех чисел ) . Далее уже начинает с 2 и после нажатия пробела снова переключается и прибавляет. И так далее . Просто Список вводимых чисел большой и не хочется весь в памяти держать . Помогите , кто может ) заранее спасибо))
P.s. Извиняюсь за корявое объяснение задачи .

Офлайн

#2 Окт. 7, 2015 22:55:44

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

считывание до пробела

bairamov-azaT@mail.ru
большой и не хочется весь в памяти держать
1. Не смешите. Вы будете до посинения нажимать пробел а потребление памяти даже заметить будет трудно.
2. Общепринятый способ ввода данных нажатие Enter и все под это приспособлено.
while 1:
  i=raw_input()
  some actions....
  if some_condition:
      break

p.s.
мог что-то неправильно написать. Реально с консоли в питоне практически нет никакого смысла данные вводить. У вас есть интерактивный режим, можно и так задать все что хочется. Если данных много то они вводятся из файла и модифицируются текстовым редактором. За все время использования питона ни в одном проекте ни разу не использовал raw_input.



Отредактировано doza_and (Окт. 7, 2015 23:02:00)

Офлайн

#3 Окт. 7, 2015 23:39:46

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

считывание до пробела

bairamov-azaT@mail.ru
в общем случае никак - так как этим занимается не питон, а терминал/консоль. А его принципы работы другие.В специализированном слуае вам надо перехватывать нажатия клавиш, но опять же, делается совсем не так как вы себе представляете.
Краткий вывод - вы по не знанию пытаетесь обойти общепринятые стандарты поведения ПО.

Список большой? вы собрались в ручную вводить хотя бы тысячу элементов? Если так, то я вас успокою, это не большой размер. Смело храните в памяти.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Окт. 8, 2015 02:32:24

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

считывание до пробела

bairamov-azaT@mail.ru
Просто Список вводимых чисел большой и не хочется весь в памяти держать .
Если у тебя миллиард чисел, идущих через пробел, то надо считывать текст в буфер подходящего размера.
Если считанный текст не заканчивается на пробел, то дописывать в буфер до пробела.
Когда в буфер считан текст, ты его обрабатываешь, проводя вычисления.
После вычислений повторяешь.



Отредактировано py.user.next (Окт. 8, 2015 02:33:26)

Офлайн

#5 Окт. 8, 2015 14:04:48

pr0cess0r
Зарегистрирован: 2013-06-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

считывание до пробела

можно как то так (используя py-getch: pip install py-getch):

from __future__ import print_function
import sys
from getch import getch
a = 0
s = ''
while True:
    
    c = getch()
    
    if ord(c) == 32:
        print(' ', end='')
        try:
            a += int(s)
        except:
            print(u'умер')
            sys.exit()
        s = ''
    
    elif ord(c) >= 49 and ord(c) <= 57:
        s += c
        print(c, end='')
        
    else:
        break
print()
print(a)

Отредактировано pr0cess0r (Окт. 8, 2015 14:13:08)

Офлайн

#6 Окт. 9, 2015 10:25:01

bairamov-azaT@mail.ru
Зарегистрирован: 2015-10-07
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

считывание до пробела

Просто готовлюсь к Егэ и учитель сказал оптимирировать по памяти , сказал как примерно сделать , теперь вот сижу , думаю как делать … Знания в питоне мягко говоря не очень большие ….

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version