есть ли альтернатива использованию мода "%" в Python - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь перебрать список чисел (в основном десятичных), но я хочу вернуть и 0.0, и максимальное число.например

maxNum = 3.0 
steps = 5
increment = 0
time = 10
while increment < time:
    print increment * (maxNum / steps)% maxNum
    increment+=1
#

Я получаю это как вывод

0.0
0.6
1.2
1.8
2.4
0.0

, но я хочу 3.0 как наибольшее число и начать обратно с 0.0 IE

0.0
0.6
1.2
1.8
2.4
3.0
0.0

Обратите внимание, я должен избегать логических циклов для расчетной части.

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Вы могли бы сделать оператор if, который смотрит вперед, если следующий напечатанный номер - 0.0, затем выведите maxNum

maxNum = 3.0
steps = 5
increment = 0
time = 10

while increment < time:
    print(round(increment * (maxNum / steps)% maxNum, 2))
    increment+=1
    if (round(increment * (maxNum / steps)% maxNum, 2)) == 0.0:
        print(maxNum)
0.0
0.6
1.2
1.8
2.4
3.0
0.0
0.6
1.2
1.8
2.4
3.0
0 голосов
/ 16 октября 2018

Только небольшие изменения сделали трюк:

maxNum = 3.0
steps = 5
i = 0
times = 10
step = maxNum / steps
while (i < times):
    print(step * (i % (steps + 1)))
    i += 1

0.0
0.6
1.2
1.7999999999999998
2.4
3.0
0.0
0.6
1.2
1.7999999999999998
0 голосов
/ 16 октября 2018

Вы можете создать нужные числа, а затем использовать itertools.cycle для их циклического переключения:

import itertools
nums  = itertools.cycle(0.6*i for i in range(6))
for t in range(10):
    print(next(nums))

Вывод:

0.0
0.6
1.2
1.7999999999999998
2.4
3.0
0.0
0.6
1.2
1.7999999999999998
...