LINUX.ORG.RU

Простые вопросы по Python

 ,


0

1

Начинаю изучение сего языка, столкнулся со странным поведением самой первой проги из «Dive into Python3».

SUF =  {1000: ['KB', 'MB', 'GB'], 1024: ['KiB', 'MiB', 'GiB']}
def appr_size(size, is_1024=True):
    if size<0:
        raise ValueError('Number must be non-negative')
    multiple = 1024 if is_1024 else 1000
    for suffix in SUF[multiple]:
        size /= multiple
        if size < multiple:
            return '{0:.1f}{f}'.format(size, suffix)
    raise ValueError('tldr!')
if __name__ == '__main__':
    print(appr_size(100000000, False))
    print(appr_size(100000000))
При попытке компиляции:
[yura@TP61 python]$ python3 first.py
Traceback (most recent call last):
  File "first.py", line 12, in <module>
    print(appr_size(100000000, False))
  File "first.py", line 9, in appr_size
    return '{0:.1f}{f}'.format(size, suffix)
KeyError: 'f'
[yura@TP61 python]$ 

Что не так?

★★

Последнее исправление: CYB3R (всего исправлений: 3)

В коде ошибка (не правильно перепечатал?).

multiple = 1024 if is_1024 else 1000

Поменяй на

multiple = 1024 if is_1024_bytes else 1000
lech
()

Все же написано(объяви is_1024)

deterok ★★★★★
()
Ответ на: комментарий от yura_ts

Там позиционный аргумент с индексом 1 а не кейворд аргумент f. Индексы позиционных аргументов можно опускать начиная с 3.1

zz ★★★★
()
Ответ на: комментарий от zz

Да, это понял, что тупая опечатка.
Я ещё не дошел до описания функций ввода-вывода.
Кроме этого, if __name__ == '__main__" звучит заклинанием...

yura_ts ★★
() автор топика

Программа на Питоне похожа на облако тегов. В глазах рябит.

anonymous
()

При попытке компиляции:

Перечитай ка первую главу.

Kalashnikov ★★★
()
Ответ на: комментарий от anonymous

модуль запущенный как скрипт - всегда имеет такое равенство.

Как раз совсем таки наоборот.

baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.