С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
12 / 10 / 2
Регистрация: 25.01.2023
Сообщений: 56

Оптимизация кода

27.01.2023, 17:02. Показов 6955. Ответов 9
Метки нет (Все метки)

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

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

Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Красота спасёт мир
Одно из древних поверий гласит, что трёхзначное число красиво, если сумма его минимальной и максимальной цифр равна оставшейся цифре умноженной на 2.
 
Напишите систему определяющую красоту числа.
 
Формат ввода
Одно трёхзначное число
 
Формат вывода
YES — если число красивое, иначе — NO
 
Пример 1
Ввод
123
Вывод
YES
Пример 2
Ввод
748
Вывод
NO
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
number = input()
 
x = list(number)
 
a = x[0]
b = x[1]
c = x[2]
 
y = (a, b, c)
z = sorted(y)
 
if int(z[0]) + int(z[2]) == int(z[1]) * 2:
    print('YES')
else:
    print('NO')


Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Кто быстрее на этот раз?
Вновь велогонщики собрались узнать, кто из них быстрее. Им предстоит пройти трассу длиной 43872м, и нам нужно вновь определить победителя.
 
На этот раз нам известны средние скорости трёх фаворитов — Пети, Васи и Толи. Кто из них пришёл к финишу первым?
 
Формат ввода
В первой строке записана средняя скорость Пети.
Во второй — Васи.
В третьей — Толи.
 
Формат вывода
Имя победителя гонки.
 
Примечание
Гарантируется, что победителем стал только один.
 
Пример 1
Ввод
10
5
7
Вывод
Петя
Пример 2
Ввод
5
7
10
Вывод
Толя
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
speed_petya = int(input())
speed_vasya = int(input())
speed_tolya = int(input())
 
if speed_petya > speed_vasya > speed_tolya:
    print('Петя')
elif speed_petya > speed_tolya > speed_vasya:
    print('Петя')
elif speed_petya > speed_tolya == speed_vasya:
    print('Петя')    
elif speed_tolya > speed_petya > speed_vasya:
    print('Толя') 
elif speed_tolya > speed_vasya > speed_petya:
    print('Толя') 
elif speed_tolya > speed_vasya == speed_petya:
    print('Толя')     
elif speed_vasya > speed_tolya > speed_petya:
    print('Вася') 
elif speed_vasya > speed_petya > speed_tolya:
    print('Вася') 
elif speed_vasya > speed_petya == speed_tolya:
    print('Вася') 
elif speed_petya == speed_vasya == speed_tolya:
    print('Ничья')
else:
    print('Error')


Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Первому игроку приготовиться
Во многих играх порядок определяется броском кубика или монетки, — а в нашей первым ходит тот, чьё имя лексикографически меньше.
 
Определите, кто из игроков будет ходить первым.
 
Формат ввода
Три имени игроков, каждое из которых записано с новой строки.
 
Формат вывода
Имя игрока, который будет ходить первым.
 
Пример 1
Ввод
Вова
Аня
Боря
Вывод
Аня
Пример 2
Ввод
Толя
Коля
Вася
Вывод
Вася
Python
1
2
3
4
5
6
7
name_1 = input()
name_2 = input()
name_3 = input()
 
name = (name_1, name_2, name_3)
n = sorted(name)
print(n[0])


Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Автоматизация игры
Всё в том же детском саду ребята очень любят играть с цифрами.
Одна из таких игр — перестановка цифр четырёхзначного числа.
Напишите программу для робота-няни, которая из числа вида abcd составляет число badc.
 
Формат ввода
Одно четырёхзначное число.
 
Формат вывода
Одно четырёхзначное число — результат перестановки.
 
Пример 1
Ввод
1234
Вывод
2143
Пример 2
Ввод
1412
Вывод
4121
Python
1
2
a = input()
print(a[1], a[0], a[3], a[2], sep='')
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.01.2023, 17:02
Ответы с готовыми решениями:

Оптимизация кода
это код, который ищет в тексте пользователя самое большое расстояние между двумя одинаковыми символами, как его можно оптимизировать? ...

Оптимизация кода
Мы будем работать с набором слов. Ваша задача — выписать все слова, которые являются анаграммами друг для друга, например «замок» и...

Оптимизация кода
Добрый день! Я только учусь и столкнулся с такой проблемой: Задание на кодварсе следующее: есть целые числа от m до n включительно. Нужно...

9
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
27.01.2023, 17:23
Sergey013, тут ускорять то нечего. задачи простые, все решаются в одну строчку.
1
12 / 10 / 2
Регистрация: 25.01.2023
Сообщений: 56
27.01.2023, 17:30  [ТС]
Цитата Сообщение от eaa Посмотреть сообщение
Sergey013, тут ускорять то нечего. задачи простые, все решаются в одну строчку.
Ну, если по простому, то собственно в этом и вопрос, как подобное записать одной строчкой. Решил задать его сейчас, чтобы применять при дальнейших решениях. Просто на этом этапе и данной программе не описываются методы минимизации кода.
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
28.01.2023, 00:06
Лучший ответ Сообщение было отмечено Sergey013 как решение

Решение

Цитата Сообщение от Sergey013 Посмотреть сообщение
Ниже я приведу пару задач, условие и моё решение, прошу на этих примерах показать как можно было бы упростить и ускорить решение
Как было уже замечено, задачи очень простые, и ускорять или упрощать тут особо нечего.
Цитата Сообщение от Sergey013 Посмотреть сообщение
как подобное записать одной строчкой
Задача 1.
Python
1
2
d = sorted(map(int, input()))
print('YES' if d[0] + d[2] == d[1] + d[1] else 'NO')
Добавлено через 6 минут
Задача 2.
Python
1
print(sorted([(int(input()), 'Петя'), (int(input()), 'Вася'), (int(input()), 'Толя')])[-1][1])
Добавлено через 2 минуты
Задача 3.
Python
1
print(sorted([input(), input(), input()])[0])
Добавлено через 3 минуты
Задача 4. Тут у вас свое решение в две строки. Но можно просто для разнообразия добавить вариант.
Python
1
2
a = input()
print(a[1] + a[0] + a[3] + a[2])
Добавлено через 2 минуты
А вообще Дзен Python говорит:
- Явное лучше, чем неявное.
- Простое лучше, чем сложное.
- Сложное лучше, чем запутанное.
- Плоское лучше, чем вложенное.
- Читаемость имеет значение.

Пишите лучше так, чтобы код легко читался, и не приходилось долго разбираться, что там происходит.
2
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
28.01.2023, 07:14
Лучший ответ Сообщение было отмечено Sergey013 как решение

Решение

Цитата Сообщение от Sergey013 Посмотреть сообщение
как можно было бы упростить и ускорить решение.
Ну только замерять производительность

Python
1
2
3
4
5
6
7
8
9
10
11
>>> def f1(n):
...     x = list(n)
...     a = x[0]
...     b = x[1]
...     c = x[2]
...     y = (a, b, c)
...     z = sorted(y)
...     return int(z[0]) + int(z[2]) == int(z[1]) * 2
... 
>>> timeit.timeit('f1("432")', setup='from __main__ import f1')
0.6630577530013397
Python
1
2
3
4
5
6
7
>>> def f2(n):
...     l = [int(n[0]), int(n[1]), int(n[2])]
...     l.sort()
...     return (l[0] + l[2]) == (l[1] * 2)
... 
>>> timeit.timeit('f2("432")', setup='from __main__ import f2')
0.46060427199699916
Добавлено через 2 минуты
Python
1
2
3
4
5
6
7
>>> def f3(n):
...     l = list(map(int, n))
...     l.sort()
...     return (l[0] + l[2]) == (l[1] * 2)
... 
>>> timeit.timeit('f3("432")', setup='from __main__ import f3')
0.5719040780022624
Добавлено через 13 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
>>> def f4(n):
...     a, b, c = int(n[0]), int(n[1]), int(n[2])
...     # for a, b, c in itertools.permutations('abc'): print(f'    if {a} <= {b} <= {c}: return ({a} + {b}) == ({c} * 2)')
...     if a <= b <= c: return (a + b) == (c * 2)
...     if a <= c <= b: return (a + c) == (b * 2)
...     if b <= a <= c: return (b + a) == (c * 2)
...     if b <= c <= a: return (b + c) == (a * 2)
...     if c <= a <= b: return (c + a) == (b * 2)
...     return (c + b) == (a * 2)
... 
>>> timeit.timeit('f4("432")', setup='from __main__ import f4')
0.5064462379959878
Добавлено через 3 минуты
Python
1
2
3
4
5
6
7
8
9
10
>>> l = [
...     (3, 'Петя'),
...     (1, 'Толя'),
...     (1, 'Вася'),
... ]
>>> l.sort()
>>> l
[(1, 'Вася'), (1, 'Толя'), (3, 'Петя')]
>>> l[-1][1]
'Петя'
1
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
28.01.2023, 10:39
Задачи 2 и 3 - min или max вместо sorted
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
28.01.2023, 10:43
задача 1 тоже решается через min и max, тоже сортировка не нужна.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
28.01.2023, 10:47
Угу:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> def f1():
...     l = [(3, 'Петя'), (1, 'Толя'), (1, 'Толя')]
...     l.sort()
...     return l[-1][1]
... 
>>> timeit.timeit('f1()', setup='from __main__ import f1')
0.20915203799995652
 
>>> def f2():
...     return max(((3, 'Петя'), (1, 'Толя'), (1, 'Толя')), key=lambda x: x[0])
... 
>>> timeit.timeit('f2()', setup='from __main__ import f2')
0.46842705000017304
 
>>> def f3():
...     return max(((3, 'Петя'), (1, 'Толя'), (1, 'Толя')))
... 
>>> timeit.timeit('f3()', setup='from __main__ import f3')
0.19634352700040836
1
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
28.01.2023, 10:47
задача 1:
Python
1
2
3
4
5
6
7
8
9
def f(n):
    a = n // 100
    b = n // 10 % 10
    c = n % 10
    return 3 * (max(a, b, c) + min(a, b, c)) == 2 * (a + b + c)
 
 
print(f(123))
print(f(748))
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
29.01.2023, 10:09
Цитата Сообщение от Sergey013 Посмотреть сообщение
Ниже я приведу пару задач,
- больше так не делайте! Один вопрос - одна тема!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.01.2023, 10:09
Помогаю со студенческими работами здесь

Оптимизация кода
Оптимизируйте пожалуйста эти коды: s = input() res = set() for i in range(len(s)): for j in range(i, len(s)): if sum(...

Оптимизация кода
Коллеги, здравствуйте! Как можно оптимизировать код, долго что-то выполняется import math from collections import Counter ...

Python. Оптимизация кода
Здравствуйте всем! Я недавно начал заниматься питоном и во время решения одной из моих задач, столкнулся с проблемой. Код, слишком...

Оптимизация скорости кода
a=2 b=3 c=5 d=50 your=int(input(&quot;Введите ваш баланс:&quot;)) def proga(x): for i in range(0,x+1): for w in range(0,x+1): ...

Оптимизация кода по времени
Есть задача. Всем известно, что со временем клавиатура изнашивается, и клавиши на ней начинают залипать. Конечно, некоторое время такую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru