Урожай номер на части меньше, чем порог в Python - PullRequest
0 голосов
/ 08 июня 2018

Предполагая, что у меня есть число n=22500 и порог t=10000, я хочу иметь функцию, которая выдает: 10000, 10000, 2500.

Как мне это сделать?Моя нерабочая попытка, потому что, когда вы наберете 20000, он вернет числа больше 10000.

def chunk(number):
    steps = 10000
    if number > steps:
        yield steps
        yield number - steps
    else:
        yield number

for i in chunk(35000):
   print(i)

# prints (wrongly):
# 10000
# 25000

Или для этого есть встроенная библиотека?

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Использование операторов деления (этаж) и модуля:

def chunk(number, step):
    for i in range(number // step):
        yield step
    rem = number % step
    if rem:
        yield rem

for i in chunk(22500, step=10000):
    print(i)

10000
10000
2500
0 голосов
/ 08 июня 2018

Вам нужен цикл, чтобы убедиться, что он работает с любым количеством:

def chunk(number):
    steps = 10000
    while number > 0:
        yield min(number, steps)
        number -= steps

for i in chunk(35000):
   print(i)

# prints:
# 10000
# 10000
# 10000
# 5000
0 голосов
/ 08 июня 2018

Я думаю, что это можно немного исправить, поэтому проверьте следующие изменения в течение следующих нескольких минут, но как насчет:

def chunk(num, thresh):
    while True:
        if num > thresh:
            num -= thresh
            yield thresh
        else:
            yield num
            break

for x in chunk(22500, 10000):
    print(x)

Вывод

10000
10000
2500

Редактировать:

Учитывать:

def chunk(num, thresh):
    while num:
        to_yield = min(num, thresh)
        yield to_yield
        num -= to_yield

for x in chunk(22500, 10000):
    print(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...