Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отобразить ход действия цикла. 
:(
    Опции темы
vvadim
Дата 19.9.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.9.2006

Репутация: 1
Всего: 1



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

import time
for i in range(10):
    print i,
    time.sleep(1)

В результате получаем нужный вывод, но весь сразу и через 10 секунд, а хотелось бы как в этом примере, но в одну строку.
Код

import time
for i in range(10):
    print i
    time.sleep(1)

В питоне начинающий, но крышу от такой простой задачи уже сносит.....
Не дайте погибнуть молодым  smile 
PM MAIL   Вверх
setq
Дата 19.9.2006, 14:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В IDLE не воспроизвелось. Но может быть вставить 
Код

import time, sys  # <-- подключить sys
for i in range(10):
    print i,
    sys.stdout.flush()  # <-- сбросить буфер
    time.sleep(1)

Хуже во всяком случае не будет)

Или будет? (Ушёл задумавшись)
  Вверх
Artemios
Дата 19.9.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



У меня вот это сработало:
Код

import sys
import time
for i in range(10):
    sys.stdout.write("%i "%i)
    time.sleep(1)


Только попробовал потом твой первоначальный пример - и он сработал точно так же...
Возможно, от ОС-и зависит (у мня линукс, проверял в idle)

Это сообщение отредактировал(а) Artemios - 19.9.2006, 14:51


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
Vach
Дата 19.9.2006, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 17.10.2003
Где: Санкт-Петербург

Репутация: 4
Всего: 18



У меня таже проблема была (в смысле с time) (это не тоже самое что в vb doevents - как я понял)
но без time попробуй так
Код
print 'start'

for a in xrange(125000):
    s = str(a)
    l = len(s)
    print s+'\r'*l,

print ''
print 'stop'

зы может кто знает аналог "doevents"?
PM MAIL ICQ   Вверх
J2A
Дата 19.9.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



Хорошь уже вопросы задавать "Как в Python сделать аналогично как я делал при помощи A в X". Чтобы ответить на такой вопрос, нужно знать и Python, и X, и A. Подробно опиши вопрос и, возможно, будет достаточно лишь знания Python.

Что касательно "проблемы":

1. stdout буферизируется Это значит, что пока не наберется одн сстрока, на экран ничего выводится не будет. Как вариант, не одна строка, а размер буфера.
2. Чтобы вывести неполную строку на экран нужно сбросить буфер. Т.е. sys.stdout.flush()
3. stderr не буферизируется
4. В idle вывод в python shell и вывод скрипта в консоль -- разные вещи (напр. pyshell в idle не понимает \r)

Это сообщение отредактировал(а) J2A - 19.9.2006, 15:18
--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
Artemios
Дата 19.9.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



Цитата(J2A @  19.9.2006,  15:17 Найти цитируемый пост)
В idle вывод в python shell и вывод скрипта в консоль -- разные вещи (напр. pyshell в idle не понимает \r)

Действительно, в консоли не прошло.


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
vvadim
Дата 19.9.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.9.2006

Репутация: 1
Всего: 1



Цитата(setq @ 19.9.2006,  14:05)
В IDLE не воспроизвелось. Но может быть вставить 
Код

import time, sys  # <-- подключить sys
for i in range(10):
    print i,
    sys.stdout.flush()  # <-- сбросить буфер
    time.sleep(1)

Хуже во всяком случае не будет)

Или будет? (Ушёл задумавшись)

Все получилось, спасибо большое!

Добавлено @ 16:55 
Цитата(J2A @ 19.9.2006,  15:17)
Хорошь уже вопросы задавать "Как в Python сделать аналогично как я делал при помощи A в X". Чтобы ответить на такой вопрос, нужно знать и Python, и X, и A. Подробно опиши вопрос и, возможно, будет достаточно лишь знания Python.

Что касательно "проблемы":

1. stdout буферизируется Это значит, что пока не наберется одн сстрока, на экран ничего выводится не будет. Как вариант, не одна строка, а размер буфера.
2. Чтобы вывести неполную строку на экран нужно сбросить буфер. Т.е. sys.stdout.flush()
3. stderr не буферизируется
4. В idle вывод в python shell и вывод скрипта в консоль -- разные вещи (напр. pyshell в idle не понимает \r)

Очень интерестная информация на счет sys.stdout, что можно покурить на эту тему еще?
Или может посоветуйте что-нибудь для начала в питоне... Из опыта программирования есть только институтский курс паскаля....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0777 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.