ГлавнаяБлогКарты Warcraft 3Гайды для первой ДотыГайды для Доты 2 [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: XOPYC, russsix  
Тема для тупого флуда
Дата: Вторник, 23.06.2020, 13:44 | Сообщение # 3811
Admin
Администраторы
Сообщений: 15097
Награды: 43
Репутация: 188
ну вот, к примеру
Код
  for (int j=0;j<4;j++) {
    for (int i=0;i<4;i++) {
      tft.setCursor(22 + (60*i), 100 + (60*j));
      tft.setTextSize(3);
      tft.setTextColor(WHITE);
      tft.println(symbol[j][i]);
    }
  }

начало и конец каждого цикла ограничивают открывающая и закрывающая скобки, все сразу понятно где начинается и где заканчивается цикл


Warcraft 3 - это уже легенда
WC3 - это мини-легенда
Дота - это альтернативный путь развития варкрафта
 
Дата: Вторник, 23.06.2020, 14:40 | Сообщение # 3812
Генералиссимус
Проверенные
Сообщений: 2234
Награды: 3
Репутация: 37
Ааа, так вот ты о чём - о скобках. Скобок в питоне таких нет, это управляется табуляцией или пробелами. По сравнению со многими языками непривычно, наверное, но вообще при грамотном устройстве кода совершенно не мешает - в чём-то даже удобнее. Никогда не возникает сложности понять, где кончается цикл - там просто другой уровень отступов начинается
 
Дата: Вторник, 23.06.2020, 16:10 | Сообщение # 3813
Admin
Администраторы
Сообщений: 15097
Награды: 43
Репутация: 188
Цитата Salamandr ()
это управляется табуляцией или пробелами

то есть лишний пробел случайно поставил, не заметил, и у тебя программа уже делает совершенно не то, что нужно?


Warcraft 3 - это уже легенда
WC3 - это мини-легенда
Дота - это альтернативный путь развития варкрафта
 
Дата: Вторник, 23.06.2020, 16:38 | Сообщение # 3814
Генералиссимус
Проверенные
Сообщений: 2234
Награды: 3
Репутация: 37
В большинстве случаев программа просто не запустится и выдаст ошибку табуляции, т.к. интерпретатор проверяет эти вещи, чтобы пробелы стояли ровно. Но если в конце цикла ты вместо того, чтобы вернуть табуляцию на предыдущий уровень, продолжишь как бы писать код на том же уровне, что и тело цикла, то все эти действия будут выполняться не после завершения цикла, а при каждой итерации. В общем это дело даже не привычки как по мне, а первоначального понимания принципа работы такого синтаксиса.

На максимально простом и абстрактном примере. В таком коде:
Код

connection = websocket.connect(uri)
for x in range(10):
    text = random_message_text()
    connection.send(text)
connection.close()

Можно допустить такую ошибку, и сообщение по вебсокету отправится только одно вместо 10, т.к. соединение закроется при первой итерации, а не после выполнения цикла:
Код

connection = websocket.connect(uri)
for x in range(10):
    text = random_message_text()
    connection.send(text)
    connection.close()

Другие вариации:
[cut=Примеры]
Код

connection = websocket.connect(uri)
for x in range(10):
   text = random_message_text()
    connection.send(text)
connection.close()

Код

connection = websocket.connect(uri)
for x in range(10):
    text = random_message_text()
  connection.send(text)
connection.close()

Код

connection = websocket.connect(uri)
for x in range(10):
    text = random_message_text()
    connection.send(text)
  connection.close()

[/cut]
Интерпретатор не пропустит и выдаст ошибку, т.к. отступы должны быть ровными. Они в этом плане ничуть не менее строгие чем скобки, просто со своими правилами

Добавлено (23.06.2020, 16:43)
---------------------------------------------
Твой пример как-то так будет выглядеть:

Код

for j in range(4):
    for i in range(4):
        tft.setCursor(22 + (60*i), 100 + (60*j))
        tft.setTextSize(3)
        tft.setTextColor(WHITE)
        tft.println(symbol[j][i])


Тут тоже шаг влево, шаг вправо - либо ошибку интерпретатор выкинет, либо неправильно отработает, если последние строки у тебя как-то так переместятся:

Код

for j in range(4):
    for i in range(4):
        tft.setCursor(22 + (60*i), 100 + (60*j))
        tft.setTextSize(3)
    tft.setTextColor(WHITE)
tft.println(symbol[j][i])


Сообщение отредактировал Salamandr - Вторник, 23.06.2020, 16:44
 
Дата: Среда, 24.06.2020, 13:54 | Сообщение # 3815
Генералиссимус
Модераторы
Сообщений: 12997
Награды: 22
Репутация: 141
Собственно не вижу проблем в подобном коде, вернее сказать, учитывая, что пишу на другом языке, да и все остальные которые изучал так же были со скобками, хотя банальный if можно записать и без скобок, если там всего одно действие, типа:
Код
if(x = 2)
   a = b
else
   a = c


Ну это я условно =)

Так вот я к тому, что подобные записи на Питоне не кажутся мне сложными или не понятными. По сути нормально оформленный код на других языках будет выглядеть абсолютно так же, только ещё будут скобки, вот и всё =)


это Ксопик!
 
Дата: Среда, 24.06.2020, 14:04 | Сообщение # 3816
Admin
Администраторы
Сообщений: 15097
Награды: 43
Репутация: 188
Просто если несколько уровней вложений (до 4-5 у меня бывало) мне кажется с этими отступами замучаешься их отслеживать. А в более менее прямолинейных программах может быть это жизнеспособный подход

Warcraft 3 - это уже легенда
WC3 - это мини-легенда
Дота - это альтернативный путь развития варкрафта
 
Дата: Среда, 24.06.2020, 14:13 | Сообщение # 3817
Генералиссимус
Проверенные
Сообщений: 2234
Награды: 3
Репутация: 37
На самом деле считается хорошим тоном в стиле программирования не делать множество вложенных отступов и циклов. Если появляется много вложенных циклов, то обычно код можно переписать в таком стиле, чтобы смотрелось это человекопонятно - разбить код по функциям, например, и т.д.

Добавлено (24.06.2020, 14:15)
---------------------------------------------
Так-то ты и в коде со скобками делаешь разные отступы. Так же есть опасность не в том месте поставить скобку, и всё, код работает не так, как надо))

 
Дата: Среда, 24.06.2020, 20:50 | Сообщение # 3818
Admin
Администраторы
Сообщений: 15097
Награды: 43
Репутация: 188
Цитата Salamandr ()
чтобы смотрелось это человекопонятно - разбить код по функциям, например, и т.д.

это не всегда удобно, когда пишешь функцию для какого-нибудь редкого уникального расчета его обычно лучше объединить в одну функцию

Цитата Salamandr ()
Так же есть опасность не в том месте поставить скобку, и всё, код работает не так, как надо))

не, скобки у программистов "в крови", а вот отступы вместо них - это чужеродный искусственный элемент ))


Warcraft 3 - это уже легенда
WC3 - это мини-легенда
Дота - это альтернативный путь развития варкрафта
 
Дата: Четверг, 25.06.2020, 14:41 | Сообщение # 3819
Генералиссимус
Модераторы
Сообщений: 12997
Награды: 22
Репутация: 141
Цитата Admin ()
не, скобки у программистов "в крови", а вот отступы вместо них - это чужеродный искусственный элемент ))

Если не будет отступов, то код будет не читаемый, даже со скобками. Ещё когда у меня была книжка по Делфи, да и что-то постарее где-то находил, в любом листинге кода были отступы.
Вот войну про то, что отступы должны быть либо из 4ёх пробелов либо из одного таба, это знаю. А что отступы не нужны вообще, какая-то наркомания =)
Либо ещё одно, это когда открывающая фигурная скобка тела if'а ставится на той же строке, что и условия, либо переносится на следующую =) Это ещё один вечный спор =)

Цитата Admin ()
это не всегда удобно, когда пишешь функцию для какого-нибудь редкого уникального расчета его обычно лучше объединить в одну функцию

Есть такая штука, как обращение к базе, и можно этот вызов закинуть в какой нибудь while, потом в foreach, потом ещё куда-то и всё это новая и новая вложенность.
Ну и нагрузка на базу соответственно. Вместо 1кк обращений к базе, нужно собрать инфу в один массив и нормально составленным запросом один раз обратиться к базе, получив всё нужное. В случаях, когда структура базы идиотская и такое не прокатывает... ну тут уже ничего не попишешь.
Ну и думаю Саламандр говорит не про 3-5 вложенностей, а про 10-20, а то и больше. Если такая матрёшка получается, то явно что-то не правильно продуманно. И да, это не про 10 ифов, которые стоят друг за другом, т.к. находятся на одном уровне вложенности =)

Цитата Salamandr ()
Так же есть опасность не в том месте поставить скобку, и всё, код работает не так, как надо))

Вот кстати да =) Но тут что так, что эдак, везде можно накосячит. Глупые ошибки перестаёшь делать со временем =) А если и возникают, то чаще из-за усталости, когда над одной задачей просидел уже 12 часов =) Я так в js вместо alert("Текст"); писал alarm("Текст"); и не понимал, почему такой функции типа нет =) Если что первая выводит окошко в браузере с сообщением, а второй не существует =)


это Ксопик!
 
Дата: Четверг, 25.06.2020, 16:31 | Сообщение # 3820
Admin
Администраторы
Сообщений: 15097
Награды: 43
Репутация: 188
Цитата XOPYC ()
Если не будет отступов, то код будет не читаемый, даже со скобками

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

Цитата XOPYC ()
нужно собрать инфу в один массив и нормально составленным запросом один раз обратиться к базе

в той программе, которую я 5 лет писал на работе, это все не нужно. Она узко специализированная расчетная, аналогов нет


Warcraft 3 - это уже легенда
WC3 - это мини-легенда
Дота - это альтернативный путь развития варкрафта
 
Поиск: