• Почему код работает по-разному?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Смысл алгоритма: два указателя, которые двигаются слева направо.
    Второй всегда правее первого.
    Сравниваются два элемента массива под указателями. Меняются местами при необходимости.

    Вот визуализация сортировки:
    Ответ написан
    Комментировать
  • Как решить задачу правильно?

    @o5a
    Подобная задача проще всего решается через стэк.
    Перебираем постепенно элементы исходного списка.
    Если последний элемент стэка равен противоположному (NORTH-SOUTH и т.п.) текущего элемента списка, то удаляем (stack.pop()) этот элемент из стэка. В противном случае добавляем к стэку. В конце цикла в стэке останется только неисключенные элементы (без пар). Для соответствия пар можно задать словарь.
    Примерно так (спрячу под спойлер, на случай если захочется реализовать самостоятельно):
    spoiler
    def dirReduc(arr):
        dirs = {"NORTH": "SOUTH", "SOUTH": "NORTH", "EAST": "WEST", "WEST": "EAST"}
        stack = []
        for d in arr:
            if stack and dirs[d] == stack[-1]:
                stack.pop()
            else:
                stack.append(d)
        return stack
    Ответ написан
    1 комментарий
  • Всегда ли методу нужны скобки?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Через точечку - это атрибуты экземпляра какого-либо класса. Атрибут может быть либо параметром (как переменная или константа, только относящаяся к конкретному экземпляру, его собственный параметр), либо методом (встроенный инструмент, персональная функция экземпляра, позволяющий менять значения некоторых параметров экземпляра, либо ещё что-нибудь делать с этим экземпляром).

    Так вот - если через точечку у нас параметр, содержащий некоторое значение, то обратиться к нему нужно без скобочек. А если это метод, функция, то как всякая функция он вызывается со скобками, в скобках могут указываться обязательные и не обязательные аргументы функции.

    То, что в вашем случае вывод одинаков, ничего не говорит о том, можно ли скобки использовать или не использовать. Это лишь внешне похожие проявления довольно различных процессов. Сейчас они похожи на выходе, но никто не гарантирует без тщательного анализа, что и дальше будет так же.
    Без скобок вы получаете значение. Со скобками - результат работы функции.
    Ответ написан
    Комментировать
  • В чем именно синтаксическая ошибка?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    lst.append(int(input())
    Посчитай сколько у тебя открывающихся скобок и закрывающихся.
    Ответ написан
    Комментировать
  • В чем именно синтаксическая ошибка?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    В строке lst.append(int(input())) в конце пропущена круглая скобка.
    Ответ написан
    Комментировать
  • Почему переменная не меняет значение?

    @AVIMIR
    Сначала 2 запишется в largest, а потом идёт сравнение "если 2 меньше, чем 2 (x < largest)", что точно неверно => условие не выполняется. И так со всеми остальными числами.
    spoiler
    Я бы сделал через одно сравнение:
    if x > largest:
    largest, not_largest = x, largest
    Таким образом мы получим новый максимум, а предыдущий автоматически запишется в пред_макс.
    Ответ написан
    Комментировать
  • Функция, которая находит самое короткое слово в тексте. Как исправить, чтобы заработала?

    @dmshar
    Если, как выяснилось из коментариев "нужно, чтобы возвращалось не само слово, а его длина", и "Как можно сделать это все без сплита и min?"
    то тогда вот так:
    def find_short(text):
        num_of_let=0
        min_numb = len(text)
        for elem in text:
            if elem == ' ':
                if num_of_let <  min_numb:
                    min_numb=num_of_let
                num_of_let=0
            else:
                num_of_let+=1
        return min_numb
    
    text = 'bitcoin take over the world maybe who knows'
    find_short(text)


    Результат:
    Out[20]: 3

    Как просили - не само слово, а его длина.
    Если вы все таки передумаете и захотите иметь и самое короткое слово и его длину, но без функций, то сделать это можно вот так:

    def find_short(text):
        num_of_let=0
        word=[]
        min_numb = len(text)
        for elem in text:
            if elem == ' ':            
                if num_of_let <  min_numb:
                    min_numb=num_of_let
                    min_word=''.join(word)
                num_of_let=0
                word=[]
            else:
                word=word+list(elem)
                num_of_let+=1
        return min_numb,min_word


    Только извращение все это. Нет, в целях "познания мира" конечно можно и потренироваться, для развития алгоритмического мышления например.
    Но на то и придуманы функции, что-бы учиться их использовать там, где это целесообразно.
    Ответ написан
    1 комментарий
  • Как переписать функцию, чтобы заработала?

    mallo_c
    @mallo_c
    Зачем я изучил VBS???
    def call_twice(f,*args,**kwargs):
        first_f=f(*args,**kwargs)
        second_f=f(*args,**kwargs)
        return first_f, second_f
    Ответ написан
    3 комментария
  • Как сделать, чтобы функция начала работать с итераторами?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Может, содержимое итератора высыпать в список и потом обрабатывать?
    Ответ написан
    1 комментарий
  • Как сделать, чтобы функция начала работать с итераторами?

    @dmshar
    Ну, например, вот так:
    def all_unique(arg):
        if hasattr(arg, '__iter__'):
            arg=list(arg)
        if arg==[]:
            return True
        elif len(set(arg)) == len(list(arg)):
            return True
        return False


    Корректно (кажется :-) ) проходит тесты:
    all_unique([])
    all_unique("cat")
    all_unique([1, 2, 3])
    all_unique([1, 2, 1])
    all_unique([1])
    all_unique(iter([]))
    all_unique(iter([1]))
    all_unique(iter([1, 2, 3]))
    all_unique(iter([1, 2, 1]))
    Ответ написан
    Комментировать
  • Как сделать, чтобы функция начала работать с итераторами?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Не надо кушать лишней памяти, и лишний раз ходить по итератору тоже.
    def all_unique(iterator):
        counter = 0
        items = set()
        for item in iterator:
            items.add(item)
            counter += 1
            if len(items) != counter:
                return False
        return True

    Худший случай, конечно, всегда один для данной задачи: О(N) и по памяти, и по времени. Но в лучшем случае может хватить всего лишь 2 итерации цикла и множества из 1 элемента (это когда в итераторе 2 первых элемента уже одинаковые), а в среднем будет что-нибудь типа O(N/2).
    Ответ написан
    Комментировать
  • Как сделать корректную проверку на то, что символ не принадлежит строке?

    @Drill
    atsin4469,
    Расскажите о своем мнении, как сделать код лучше?


    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    text = "The sunset sets at twelve o'clock."
    
    def alphabet_position(text):
        text = ' '.join(char for char in text.lower() if char.isalpha())
        return text.translate({ord(c): str(i) for i,c in enumerate(alphabet,1)})


    print(alphabet_position(text))
    In [4]: 
    20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11
    Ответ написан
    Комментировать
  • Как сделать корректную проверку на то, что символ не принадлежит строке?

    @dmshar
    Сама проверка тут ни при чем - она написана правильно.

    Но вот это:

    if text_lowercase[i] not in alphabet:
                continue


    - классический бесконечный цикл.
    Вы взяли первый элемент строки, проверили, он в "alphabet" не присутствует, вы переходите к следующей итерации НЕ ИЗМЕНИВ значения i. По сути - опять проверяете тот-же символ. И так до бесконечности.

    Просто перенесите i += 1 перед if .

    Правда, у вас еще и предел цикла в while задан с ошибкой, и вообще - программа странноватая. Но это уже другой вопрос.
    Ответ написан
    3 комментария
  • Как вы научились мыслить «как программист»?

    @Filipp42
    Можно попробовать использовать Зеттелькастен метод, дабы научиться держать в голове сложные конструкции. Он представляет из себя картотеку с перекрестными ссылками, посмотрите о нем отдельно.
    Ответ написан
    Комментировать
  • Как здесь работает if not?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    command - строка, все проверки условий в if возвращают bool значение.

    По сути, проверка выглядит примерно так:
    if not bool(command):

    bool от пустой строки вернет False, если строка не пустая - True
    not - логический оператор, который возвращает True, если утверждение не True. В общем возвращает противоположное значение

    Ну то есть
    >>> not True
    False
    >>> not False
    True


    Если вводится пустая строка
    if not bool(command):
    , то условие выглядит как
    if not False:
    (потому что bool от пустой строки возвращает False). В свою очередь, not False возвращает True. В итоге конструкция превращается в
    if True:
    и условие выполняется.

    Если строка не пустая, то соответственно будет if not True и затем if False, условие не выполнилось.

    Так что, если строка пустая - цикл пропускает.
    Ответ написан
    Комментировать
  • Как работает этот код?

    @vascodogama
    tries = 3 #число попыток ввести фигню
    while tries: #пока не tires не 0 и не None
        print('>>> ', end='') #принти что-то
        command = input() # вводи текст
        if not command: # если command не обьявлен (ты ничего не ввел выше)
            continue 
            #начинай цикл заново не выполняя его нижнючасть
        if command in ('echo', 'cd', 'help'):  #если введенное равно любому элементу из списка
            break # досрочно прерви цикл
        print('Unknown command!') 
        tries -= 1 #уменьши tires на 1
    else:
        print('Too many bad tries!') # выскочит когда ты три раза введешь фигню и tries  будер равен 0
        command = None
    Ответ написан
    1 комментарий
  • Почему функция возвращает неверный результат?

    @IvanIF
    var num = 37; //Исходное число
    while (String(num).length != 1){
      var num_A = 0;
      for (var i = 0; i < String(num).length; i++){
        num_A += Number(String(num)[i]);
      }
      num = num_A;
    }
    document.write(num);
    Ответ написан
  • Почему функция возвращает неверный результат?

    @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    function addDigits(num) {
      while(num >= 10) { num = String(num).split('').reduce((p, c) => p + +c, 0); }
      return num;
    }
    Ответ написан
  • Почему функция возвращает неверный результат?

    @galaxy
    19 -> (1+9) = 10 -> (1+0) = 1
    А ты один раз только складываешь. Рекурсивно вызывай свою функцию
    Ответ написан
  • Что значит присвоить константе value||value?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Здесь хорошо объясняют: ИЛИ «||» находит первое истинное значение

    Цепочка value1 || value2 || ... || valueN в JavaScript вернёт первое ненулевое значение (которое приводится к булеву true)
    Ответ написан
    2 комментария