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

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

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

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

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

Кликните здесь для просмотра всего текста
Код
Красота спасёт мир
Одно из древних поверий гласит, что трёхзначное число красиво, если сумма его минимальной и максимальной цифр равна оставшейся цифре умноженной на 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')


Кликните здесь для просмотра всего текста
Код
Кто быстрее на этот раз?
Вновь велогонщики собрались узнать, кто из них быстрее. Им предстоит пройти трассу длиной 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')


Кликните здесь для просмотра всего текста
Код
Первому игроку приготовиться
Во многих играх порядок определяется броском кубика или монетки, — а в нашей первым ходит тот, чьё имя лексикографически меньше.

Определите, кто из игроков будет ходить первым.

Формат ввода
Три имени игроков, каждое из которых записано с новой строки.

Формат вывода
Имя игрока, который будет ходить первым.

Пример 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])


Кликните здесь для просмотра всего текста
Код
Автоматизация игры
Всё в том же детском саду ребята очень любят играть с цифрами.
Одна из таких игр — перестановка цифр четырёхзначного числа.
Напишите программу для робота-няни, которая из числа вида abcd составляет число badc.

Формат ввода
Одно четырёхзначное число.

Формат вывода
Одно четырёхзначное число — результат перестановки.

Пример 1
Ввод
1234
Вывод
2143
Пример 2
Ввод
1412
Вывод
4121
Python
1
2
a = input()
print(a[1], a[0], a[3], a[2], sep='')
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2023, 17:02
Ответы с готовыми решениями:

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

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

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

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

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

9
Status 418
Эксперт Python
4578 / 2345 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
27.01.2023, 17:23 2
Sergey013, тут ускорять то нечего. задачи простые, все решаются в одну строчку.
1
12 / 10 / 2
Регистрация: 25.01.2023
Сообщений: 56
27.01.2023, 17:30  [ТС] 3
Цитата Сообщение от eaa Посмотреть сообщение
Sergey013, тут ускорять то нечего. задачи простые, все решаются в одну строчку.
Ну, если по простому, то собственно в этом и вопрос, как подобное записать одной строчкой. Решил задать его сейчас, чтобы применять при дальнейших решениях. Просто на этом этапе и данной программе не описываются методы минимизации кода.
0
1103 / 689 / 306
Регистрация: 05.09.2021
Сообщений: 1,197
28.01.2023, 00:06 4
Лучший ответ Сообщение было отмечено 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
5759 / 3551 / 1063
Регистрация: 17.05.2012
Сообщений: 10,389
Записей в блоге: 9
28.01.2023, 07:14 5
Лучший ответ Сообщение было отмечено 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
3594 / 1692 / 307
Регистрация: 18.01.2021
Сообщений: 3,131
28.01.2023, 10:39 6
Задачи 2 и 3 - min или max вместо sorted
0
Status 418
Эксперт Python
4578 / 2345 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
28.01.2023, 10:43 7
задача 1 тоже решается через min и max, тоже сортировка не нужна.
0
Просто Лис
Эксперт Python
5759 / 3551 / 1063
Регистрация: 17.05.2012
Сообщений: 10,389
Записей в блоге: 9
28.01.2023, 10:47 8
Угу:
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
4578 / 2345 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
28.01.2023, 10:47 9
задача 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
36610 / 20336 / 4223
Регистрация: 12.02.2012
Сообщений: 33,660
Записей в блоге: 13
29.01.2023, 10:09 10
Цитата Сообщение от Sergey013 Посмотреть сообщение
Ниже я приведу пару задач,
- больше так не делайте! Один вопрос - одна тема!
0
29.01.2023, 10:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2023, 10:09
Помогаю со студенческими работами здесь

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

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

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

Оптимизация небольшого кода
Имеется код для решения задачи: дается строка, нужно узнать, можно ли, убрав только один в ней...

Оптимизация кода | requests
Доброго дня! Пытаюсь оптимизировать код и ускорить получния запрсов на сайт. Как смог...

Оптимизация кода. Классы и функции
Как лучше, со стороны оптимизации? Так: class a: def a(): &lt;code&gt; def b(): ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru