Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 27, 2010 14:59:11

sanchopanca
От:
Зарегистрирован: 2010-10-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

кошерный цикл с счетчиком

столкнулся с такой проблемой
нужно написать цикл, который выглядел бы на C так:
for(double a = 0.0; a < b; a += h)
как это сделать на пайтоне?
Чтоб было красиво:)



Офлайн

#2 Дек. 27, 2010 15:12:49

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

кошерный цикл с счетчиком

for a in xrange(0,b) step h:
?



Офлайн

#3 Дек. 27, 2010 15:27:19

guranvir
От:
Зарегистрирован: 2010-03-16
Сообщения: 186
Репутация: +  0  -
Профиль   Отправить e-mail  

кошерный цикл с счетчиком

Все понятно только что значит в данном случае step h?



Офлайн

#4 Дек. 27, 2010 15:34:02

Virtuos86
От:
Зарегистрирован: 2010-11-17
Сообщения: 33
Репутация: +  1  -
Профиль   Отправить e-mail  

кошерный цикл с счетчиком

Игорь, там тип “double”, аналог “float”, поэтому ни range, ни xrange не подходят.
Вот так наглядно:

>>> def circle(a, b, h):
while (a < b):
a += h
yield a
>>> for i in circle(0.0, 7.3, 0.9):
print i
0.9
1.8
2.7
3.6
4.5
5.4
6.3
7.2
8.1
>>>
Красиво ли, не знаю. Можно и генераторное выражение, написать.
########
Ну правильно-то, конечно:
for a in xrange(0, b, h)



Отредактировано (Дек. 27, 2010 17:58:52)

Офлайн

#5 Дек. 27, 2010 15:55:35

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

кошерный цикл с счетчиком

Черт, сам не знаю, откуда у меня step вырвалось О_о
На практике никогда в питоне step не нужен был. Похоже из детских воспоминаний о бейсике :)



Офлайн

#6 Дек. 27, 2010 15:58:14

sanchopanca
От:
Зарегистрирован: 2010-10-21
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

кошерный цикл с счетчиком

а можно ли использовать Сишный цикл for, как, например, можно использовать scanf?
Уж очень мне его не хватает в пайтоне



Отредактировано (Дек. 27, 2010 16:01:21)

Офлайн

#7 Дек. 27, 2010 19:14:05

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

кошерный цикл с счетчиком

igor.kaist
На практике никогда в питоне step не нужен был. Похоже из детских воспоминаний о бейсике :)
А как же классика веба, разбиение по колонкам?
def columns(ls, n):

def f():
for i in range(n):
yield ls[i::n]

for x in map(None, *f()):
yield x

for x in columns(range(100),4):
print x



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#8 Дек. 27, 2010 20:14:20

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

кошерный цикл с счетчиком

igor.kaist
for a in xrange(0,b) step h:
?
>>> print range(0,10,3)
[0, 3, 6, 9]

Офлайн

#9 Дек. 28, 2010 13:57:47

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

кошерный цикл с счетчиком

PooH
А как же классика веба, разбиение по колонкам?
Эм… и как эта штука работает?



Офлайн

#10 Дек. 28, 2010 18:37:32

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

кошерный цикл с счетчиком

Eliont
Эм… и как эта штука работает?
Ну как бы внутренняя функция f возвращает итератор по срезам от 1 до n, каждый сдвинут на один элемент и идет с шагом n. Внутренняя функция это замыкание, ls и n она получает из внешней функции.
[0, 3, 6, 9]
[1, 4, 7]
[2, 5, 8]
ну а map собирает поэлементно в кортежи
(0, 1, 2)
(3, 4, 5)
(6, 7, 8)
(9, None, None)
Используется map, а не zip, чтобы на месте отсутствующих элементов вывести пустые ячейки.
PS: в принципе внешняя функция тупо транспонирует вывод внутренней



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Дек. 28, 2010 18:42:24)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version