R. Сколько вешать в байтах?

Размер — важная характеристика любого файла. В нашей стране, согласно ГОСТ 8.417-2002, объём информации измеряется в следующих единицах:

  • бит (б)
  • Байт (Б) = 8 бит
  • Килобайт (КБ) = 1024 Б
  • Мегабайт (МБ) = 1024 КБ
  • Гигабайт (ГБ) = 1024 МБ

Напишите программу, которая вычисляет объём заданного файла.

Формат ввода

Вводится одно имя файла.

Формат вывода

Выведите объём файла в соответствующих единицах измерения.
При получении дробного значения, произведите округление вверх.

Примечание

Для решения данной задачи вы можете пойти двумя путями:

  • изучите чтение файлов в побайтном режиме;
  • изучите стандартную библиотеку os.

Пример

Ввод

# Пользовательский ввод
file.txt

# Содержимое файла file.txt
Этот файл весит больше чем кажется ))

Вывод

67Б

Ввод

# Пользовательский ввод
another_file.txt

# Содержимое файла another_file.txt
Хотелось бы сделать пример с файлом больше 1КБ
Не переживайте, такой обязательно будет в скрытых тестах ))

Вывод

193Б

Решение

В целом задача достаточно простая – проверяем крайние максимальные размеры (килобайт, мегабайт, гигабайт) в порядке возрастания или убывания и находим тот, в котором наша сумма будет находиться в диапазоне от 1 до 1024 (1023). После чего проверяем есть ли у числа “хвостик”, и если есть, то прибавляем единичку.
Единственный вопрос, который может внести путаницу – 1024 байта надо писать как 1КБ или 1024Б? Судя по всему, у Яндекса нет тестов связанных с этими значениями, потому что тест проходят оба варианта написания.

Посмотреть код

Решение

Python
file_name = input()

with open(file_name, 'rb') as file:
    data = file.read()
size = len(data)

scale = ['Б', 'КБ', 'МБ', 'ГБ', 'ТБ']
weight = 0

while size > 1024 and weight < len(scale):
    weight += 1
    size, overload = divmod(size, 1024)
    size += int(overload > 0)

print(f'{size}{scale[weight]}')

Решение

Python
import os

file_name = input()

size = os.path.getsize(file_name)

scale = ['Б', 'КБ', 'МБ', 'ГБ', 'ТБ']
weight = 0

while size > 1024 and weight < len(scale):
    weight += 1
    size, overload = divmod(size, 1024)
    size += int(overload > 0)

print(f'{size}{scale[weight]}')
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии