LINUX.ORG.RU

Чем заменить многократные elif

 , ,


2

3

Шалом.

Сабж, собственно. Изучаю python и хочу узнать, можно ли более красиво и правильно сделать сие:

if  p7 >= 12 and p7 <= 33:
    p8="ССВ"
elif  p7 >= 34 and p7 <= 56:
    p8="СВ"
elif  p7 >= 57 and p7 <= 78:
    p8="ВСВ"
elif  p7 >= 79 and p7 <= 101:
    p8="В"
elif  p7 >= 102 and p7 <= 123:
    p8="ВЮВ"
elif  p7 >= 124 and p7 <= 146:
    p8="ЮВ"
elif  p7 >= 147 and p7 <= 168:
    p8="ЮЮВ"
elif  p7 >= 169 and p7 <= 191:
    p8="Ю"
elif  p7 >= 192 and p7 <= 213:
    p8="ЮЮЗ"
elif  p7 >= 214 and p7 <= 236:
    p8="ЮЗ"
elif  p7 >= 237 and p7 <= 258:
    p8="ЗЮЗ"
elif  p7 >= 259 and p7 <= 281:
    p8="З"
elif  p7 >= 282 and p7 <= 303:
    p8="ЗСЗ"
elif  p7 >= 304 and p7 <= 326:
    p8="СЗ"
elif  p7 >= 327 and p7 <= 348:
    p8="ССЗ"
elif  p7 >= 349 and p7 <= 360:
    p8="С"
elif  p7 >= 0 and p7 <= 11:
    p8="С"
else:
    p8="???"

Заранее благодарю за ответ.
//Вышеприведенное переводит градусы в направление ветра.

★★★★★

коллеги не спорте. И pascal и fortran - отличные языки. Очень похожи. Анонимус уважает эти два языка на одинаковом уровне. Поэтому между ними не сейте срач. Лучше говносишечку и его плюсанутого бастарда помоями поливайте.

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

Я и не говорил, что, якобы, Фортран плох. Си тоже весьма неплох, хоть и не для работы с юникодом.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu
p8 = case p7
  when 12..33
    "ССВ"
  when 34..56
    "СВ"
  when 57..78
    "ВСВ"
  when 79..101
    "В"
  ...
  else
    "???"
  end

Тру руби стайл

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

Однако, Фортран, в отличие от Паскаля, давно не развивается.

Что-то мне подсказывает, что ты Фортран в жизни не видел. Недавно вышлем стандарт Фортран-2018.

В современном Фортране и продвинутая работа с массивами, и параллельное программирование и даже элементы модного ООП.

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

А в Паскале полный набор. UnicodeString, UTF8String(), {$codepage UTF8}

Не в Паскале, а в одном из диалектов. У Вирта такой фигни не было.

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

В современном Фортране и продвинутая работа с массивами, и параллельное программирование и даже элементы модного ООП.

Это всё, конечно, хорошо, но то «развитие», о котором говорил я, предполагает несколько другое.

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

Мы на ЛОРе. Какие ещё современные диалекты есть под линуксы и прочие юниксы? Всякие виндовые PascalABC.NET в этом контексте ни разу не считаются. А MS DOS'овские Turbo Pascal'и и подавно.

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

Ностальжи ...

Вспомнился случай.
Появился Pascal для СМ-2М /великолепная реализация/.
Как-то в одной программе все время происходил какой то баг в разных! местах в run-time.
Связались с разработчиком ...
Оказалось у него какая-там функция портила байт в произвольном! месте ОЗУ.

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

Сейчас тестируют по-другому и неспешно. Тот же Free Pascal 3.2.0 уже почти год тестируют - ветку сформировали ещё в прошлом году, а релиз намечается только в этом. Параллельно, да, пилят ещё следующую версию, релиз которой будет пока ещё неизвестно когда.

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

Windows - ошибка by design. А так, разумеется, куда ж без багов (особенно в ранних версиях), но они же оперативно устраняются. Особенно оперативно в свободном софте.

saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

В «свободном софте» с космической скоростью ...

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

ты шыза если что, ты в курсе да?

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

Так как шутки некоторые не понимают, то ИМХНО: Python - «наш человек».

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

Не всем нужен юникод. И это, кстати, не шутка. Не представляю себе случая, когда в задачах, для решения которых используют Фортран, может понадобиться юникод.

knovich
()

if elif нормальная практика

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

Развитие, которое ты ждёшь никому не нужно в Фортране в тех рамках для которых его развивают: параллельные вычисления и взаимодействие с С

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

Delphi позволяет писать код, исполняемый для Linux, Pascal.ABC тоже считается

grem ★★★★★
()

я так сделал

wind_dir_deg = float(tree.xpath('//wind_dir_degrees')[0].text)
wind_dir_ind = round(wind_dir_deg / 45)
win_dir_map = '↓↙←↖↑↗→↘↓'
wind_dir = win_dir_map[wind_dir_ind]
anonymous
()
Ответ на: комментарий от anonymous

Когда Вирт создавал Pascal, не было даже идеи создать юникод/утф-8. Странно, да?

Если завтра* появится язык запахов (а вдруг?!), а его поддержки «из каропки» нет ни в сишечке, ни паскале или других ЯП то — их создатели сразу станут дилетантами?!

Или сегодня параллельные вычисления «нативны» в старых* ЯП? и т.д.

anonymous
()

Это нормальный код. Самый прямолинейный способ самый лучший. Засунь это в функцию и все нормально. Вот названия переменных p7 p8 нехорошие.

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

Пора бы знать, что язык программирования Python не змеюка, а цирк.

Почему тогда на лого у них змеюка, а не цирк?

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

Почему тогда на лого у них змеюка, а не цирк?

Да кто ж их знает. Может это цирковая змеюка. Целиком весь их цирк в лого же не влезет, а клоунов на лого ставить как-то не солидно.

anonymous
()

более компактно - можно. но когда у тебя уже есть границы задачи и дальше 360 градусов ты не уйдёшь - зачем портить работающий и отлично читаемый код?

SevikL ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Угу, скорее для for - break - else. Условие в else выполняется, если выход был не посредством break.

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