Почему мой оператор по модулю возвращает удвоенный размер блока для ввода в 1 байт? - PullRequest
0 голосов
/ 17 февраля 2020

Идея состоит в том, чтобы создать функцию с именем calculator, которая принимает входные данные и сравнивает их с переменной. Сравните размер файла с размером блока, и, если есть остаток, удвойте размер блока, чтобы приспособить использование. Моя проблема в том, что при вводе 1 я все еще получаю 8192? Все же другие вычисления оказываются правильными. Я знаю, что разделение по этажам дает только целое число, а не число с плавающей точкой (что, как мне показалось, может быть лучшим способом сделать это, потому что я хотел получить действительное число), но когда я пытаюсь сгенерировать его, я получаю те же результаты. Я также пробовал использовать плавающие в другом месте, либо с неправильными, либо с теми же результатами, что и выше. Когда я поменял порядок по модулю, ответ кажется правильным, но меня проинформировали, что это неправильно, и мне сказали делать это больше как то, что вы видите здесь, с делением по этажам и по модулю в этом порядке.

Итак, мой вопрос почему я получаю 8192 со входом 1, а остальные правы?

def calculator(somedata):                 # calculator function, 'somedata' is the input
    blocksize = 4096                      # what block size on the partition
                                          # calculate how many blocks are fully occupied
    fullblock = somedata // blocksize     # floor division will give back only the integer yes?
                                          # modulo to check whether there's any remainder
    bytesremain = somedata % blocksize    # which will say 1 or None unless I float yes?
                                          # return the block usage based on byte count?
    if bytesremain > 0:                   # if there's anything left over in the bytesremain
      return(blocksize * 2)               # double the block usage to 2
    return blocksize                      # otherwise return the block usage

print(calculator(1))                      # Should be 4096 
print(calculator(4096))                   # Should be 4096 
print(calculator(4097))                   # Should be 8192 
print(calculator(6000))                   # Should be 8192

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вы, вероятно, ищете:

def calculator(somedata):
    blocksize = 4096
    fullblock = (somedata-1) // blocksize 
    return blocksize*(fullblock+1)
0 голосов
/ 11 марта 2020
<code><pre><code>
def cstorage(fsize):
    bsize = 4096
    fblocks = fsize // bsize

    pbremainder = fsize % bsize

    if pbremainder > 0:
        return bsize*(fblocks+1)
    return bsize*fblocks

print(cstorage(1))  
print(cstorage(4096))
print(cstorage(4097)) 
print(cstorage(6000))
...