Не тратьте время на моё нытьё и сразу читайте последний абзац.)
Изучаю питон уже третий день
Думал что упрощать код - это проще, чем его писать, но вот задачка:
"Дано натуральное число. Напишите программу, которая определяет, является ли последовательность его цифр при просмотре справа налево упорядоченной по неубыванию."
Думал минут 30, и вот моё решение:
a = int(input())
count = 0
x = len(str(a))
z = 0
while a != 0:
if count == 0:
z = a % 10
a = a // 10
count += 1
elif count != 0:
if z <= a % 10:
count += 1
z = a % 10
a = a // 10
else:
a = a // 10
if x == count:
print('YES')
else:
print('NO')
Ну понимаете, выглядит, конечно, красиво, и я так тоже думал, когда похвастался своей сестре...
Перед демонстрацией своего "феноменального" ответа, предложил ей решить эту задачу. В течении минуты она на листе бумаги написала мне это:
num = input()
print('YES' if sorted(num, reverse=True) == list(num) else 'NO')
Такое решение меня подтолкнуло не просто изучать этот язык усерднее, но и понять его. На мою просьбу "НАУЧИ" она дала мне книгу Марка Лутца, которая весит больше Карана...
Конечно я буду это читать, но прошу, добрые люди, может, кто-то знает источник, или объяснение этим двум адским строчкам, на которые у меня ушли 30 минут, а у сестры меньше 60 секунд. Например, функция sorted - чем она отличается от sort()? Я искал в инете, но понятно было мало.
Python
Объясните этот адский код. python
Выполните по отдельности каждую часть и поймете
n = '321'
Превращает в посимвольный список
print(list(n))
['3', '2', '1']
В алфавитном порядке
print(sorted(n))
['1', '2', '3']
В обратном
print(sorted(n, reverse=True))
['3', '2', '1']
Соответственно, если оба списка равны, значит число при сортировке не преобразовано, значит YES
n = '321'
Превращает в посимвольный список
print(list(n))
['3', '2', '1']
В алфавитном порядке
print(sorted(n))
['1', '2', '3']
В обратном
print(sorted(n, reverse=True))
['3', '2', '1']
Соответственно, если оба списка равны, значит число при сортировке не преобразовано, значит YES
Максим Лукьянчиков
Большое спасибо, разжевали)
https://docs.python.org/3/library/functions.html#sorted
суть решения в том, что в числе цифры идут в нужном порядке тогда и только тогда, когда последовательности цифр не меняется, если её отсортить
sort - это не функция, а метод list-а, он делает сортировку in-place, без создания нового списка, что должно быть быстрее
суть решения в том, что в числе цифры идут в нужном порядке тогда и только тогда, когда последовательности цифр не меняется, если её отсортить
sort - это не функция, а метод list-а, он делает сортировку in-place, без создания нового списка, что должно быть быстрее
М Ахмадали Салимов
сортировка - слишком дорого для этой задачи, нет?
М Ахмадали Салимов
вопрос снят, ибо не прочел текст автора до конца
Максим Лукьянчиков
Спасибо!
Суть такая:
num = input(), также как и у Вас получает строку с клавиатуры.
Затем, с помощью функции sorted() делается сортировка, первый параметр введённая строка, а второй говорит, что нужно отсортировать её в порядке убывания (т. е. если число 213, то надо отсортировать как 321), функция sorted() возвращает массив (если брать пример, то будет [3,2,1])
После этого берётся функция list(), которая просто разбивает строку num на массив.
И после этого == сравнивает одинаковые ли они (тобишь была ли строка 321 изначально или же 213 и т. д.)
Разница в том, что sort() метод, который сортирует и меняет сам объект, а sorted() функция, которая возвращает новый. (также, метод sort() имеют не все классы, например у строк его нету)
num = input(), также как и у Вас получает строку с клавиатуры.
Затем, с помощью функции sorted() делается сортировка, первый параметр введённая строка, а второй говорит, что нужно отсортировать её в порядке убывания (т. е. если число 213, то надо отсортировать как 321), функция sorted() возвращает массив (если брать пример, то будет [3,2,1])
После этого берётся функция list(), которая просто разбивает строку num на массив.
И после этого == сравнивает одинаковые ли они (тобишь была ли строка 321 изначально или же 213 и т. д.)
Разница в том, что sort() метод, который сортирует и меняет сам объект, а sorted() функция, которая возвращает новый. (также, метод sort() имеют не все классы, например у строк его нету)
Максим Лукьянчиков
От души, просто всё по полочкам
О! придумал -
num = input()
count = 0
for i in range(len(num) - 1):
if int(num[i]) > int(num[i + 1]):
count += 1
if count > 0:
print('NO')
else:
print('YES')
num = input()
count = 0
for i in range(len(num) - 1):
if int(num[i]) > int(num[i + 1]):
count += 1
if count > 0:
print('NO')
else:
print('YES')
Максим Лукьянчиков
Всё равно мало понял, но обязательно подучу, чтобы понять ваш код - спасибо)
Валерий Стаховский
num = input()
count = 0
for i in range(len(num) - 1):
if int(num[i]) < int(num[i + 1]):
count += 1
if count > 0:
print('NO')
else:
print('YES')
Извините, ошибся
count = 0
for i in range(len(num) - 1):
if int(num[i]) < int(num[i + 1]):
count += 1
if count > 0:
print('NO')
else:
print('YES')
Извините, ошибся
Похожие вопросы
- Не понимаю как выявить у кода (алгоритма ) сложность кто поможет с решением и объяснит как получил (выявил) Python
- Где ошибка в коде? (Python)
- Объясните код python пожалуйста
- Здравствуйте, объясните, пожалуйста данный код на python
- Переделайте код python
- Помогите исправить ошибку в коде. Python
- Как ускорить код Python?
- Ошибка в коде python discord.py
- Задача 10. Игра «Компьютер угадывает число» язык кода Python помогите пожалуйста
- Является ли грамотным такой код python?