Форум сайта python.su
столкнулся с такой проблемой
нужно написать цикл, который выглядел бы на C так:
for(double a = 0.0; a < b; a += h)
как это сделать на пайтоне?
Чтоб было красиво:)
Офлайн
for a in xrange(0,b) step h:
Офлайн
Все понятно только что значит в данном случае step h?
Офлайн
Игорь, там тип “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
>>>
Отредактировано (Дек. 27, 2010 17:58:52)
Офлайн
Черт, сам не знаю, откуда у меня step вырвалось О_о
На практике никогда в питоне step не нужен был. Похоже из детских воспоминаний о бейсике :)
Офлайн
а можно ли использовать Сишный цикл for, как, например, можно использовать scanf?
Уж очень мне его не хватает в пайтоне
Отредактировано (Дек. 27, 2010 16:01:21)
Офлайн
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
Офлайн
igor.kaist?for a in xrange(0,b) step h:
>>> print range(0,10,3)
[0, 3, 6, 9]
Офлайн
PooHЭм… и как эта штука работает?
А как же классика веба, разбиение по колонкам?
Офлайн
EliontНу как бы внутренняя функция f возвращает итератор по срезам от 1 до n, каждый сдвинут на один элемент и идет с шагом n. Внутренняя функция это замыкание, ls и n она получает из внешней функции.
Эм… и как эта штука работает?
[0, 3, 6, 9]
[1, 4, 7]
[2, 5, 8]
(0, 1, 2)
(3, 4, 5)
(6, 7, 8)
(9, None, None)
Отредактировано (Дек. 28, 2010 18:42:24)
Офлайн