Форум сайта python.su
Я новичок в изучении Python
Имею трудность в понимании нижеописанного кода. Я знаю, что в конечном результате он делает,(ищет самую длинную упорядоченную подстроку из букв в введенной строке) но я хочу понимать, КАК он это делает, и понимать. какую роль в этом процессе играет каждая строка.
Пока понимаю только до строчки, которая начинается if len(final_out)<len(output) - то есть я понимаю, что здесь сравнение длины этих списков, но зачем?
И зачем и что делает каждая последующая строка? Объясните, пожалуйста…
s = input("Enter a string: ") final_out = "" output = "" prev = "" for cur in s: if cur >= prev: output += cur if len(final_out) < len(output): final_out = output else: output = cur prev = cur print(final_out)
Отредактировано Jetactiv (Июль 28, 2017 20:23:24)
Офлайн
код нужно оборачивать в теги code.
Офлайн
JetactivТам есть не только строки, но и невидимые логические связи, заложенные в этот код. Половину дела делают эти строки кода, а половину дела делают эти логические связи невидимые.
но я хочу понимать, КАК он это делает, и понимать. какую роль в этом процессе играет каждая строка.
>>> def f(s): ... final_out = "" ... output = "" ... prev = "" ... for cur in s: ... if cur >= prev: ... output += cur ... if len(final_out) < len(output): ... final_out = output ... else: ... output = cur ... prev = cur ... return final_out ... >>> f('') '' >>> f('a') 'a' >>> f('ab') 'ab' >>> f('ba') 'b' >>>
Отредактировано py.user.next (Июль 29, 2017 00:59:23)
Офлайн
Jetactiv, еще вопрос - какая более упорядоченней последовательность в этой строке: abxzaabbc? Как по мне, задание не совсем корректное.
Что код с недоработками py.user.next - уже намекнул.
Что касается понимания кода - как вариант можно добавить принт переменной после интересующего шага и смотреть что там получается.
Например print (cur) после начала цикла - увидим чему она равна на каждом этапе прохождении этого цикла.
Что происходит в каждой строке:
s = input("Enter a string: ") # Ввод строки final_out = "" # задание переменной конечного результата output = "" # задание промежуточной переменной prev = "" # задание промежуточной переменной for cur in s: # начало цикла, в котором будет перебираться по очереди каждая буква строки и заноситься в переменную [i] cur[/i] if cur >= prev: # текущая буква сравнивается с предыдущей output += cur # если текущая 'больше' предыдущей, то она прибавляется к промежуточной переменной [i]output[/i] if len(final_out) < len(output): # сравнивается длина переменной конечного результата и длина полученной упорядоченной строки в [i]output[/i] final_out = output # если конечный результат [i]final_out[/i] меньше новой переменной [i]output[/i], он ей приравнивается else: output = cur # если текущая меньше предыдущей, то переменная промежуточного результата задается равной текущей переменной prev = cur # предыдущую переменную хранящую букве приравнивают к текущей (сдвигают последовательность). Конец цикла. print(final_out) # выводят результат
Отредактировано unza (Июль 29, 2017 22:55:59)
Офлайн
unza, Спасибо огромное!!!
Я просто только три дня учу питон, и это вообще мой первый язык программирования. Очень сложно подстроить женские мозги к такой логике
Офлайн