Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 966
Записей в блоге: 16

Сделать код "красивее"

30.10.2011, 11:14. Показов 2260. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такая задача:
Given 3 int values, a b c, return their sum. However, if one of the values is 13 then it does not count towards the sum and values to its right do not count. So for example, if b is 13, then both b and c do not count.
Написал вот такой код:
Python
1
2
3
4
5
6
7
8
9
def lucky_sum(a, b, c):
  sum = 0 
  if a != 13:
     sum += a
  if b != 13 and a != 13:
     sum += b
  if c != 13 and b != 13 and a != 13:
     sum += c
  return sum
Может кто написать более красивый вариант ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2011, 11:14
Ответы с готовыми решениями:

Как сделать красивее?
Постараюсь объяснить кратко. Вот часть кода: print("Введите действие которое хотите совершить:", "1. Создать новую...

Как сделать код красивее?
Здравствуйте, в js код красивый и понятный Поля tasks и project большие и там много данных, я их опустил здесь let unDoneTasks; ...

Как сделать код красивее?
///Graph's class Graph = class public ///Set of all edges Edges: set of GEdge; private pS, pS2: Style;...

5
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.10.2011, 14:01
Может принимать произвольное число аргументов. Если нужно, чтобы передавалось именно три аргумента, то нужно в функции проверять размер args и при необходимости выкидывать исключение
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> from itertools import takewhile
>>> def lucky_sum(*args):
...     return sum(takewhile(lambda arg: arg != 13, args))
... 
>>> lucky_sum(1,2,3)
6
>>> lucky_sum(1,2,13)
3
>>> lucky_sum(1,13,2)
1
>>> lucky_sum(13,1,2)
0
>>>
Следующий вариант, к сожалению, не сработает, т.к. locals возвращает словарь пар "переменная-значение", при этом нарушается порядок
Python
1
2
3
4
5
6
7
8
9
10
>>> def broken_lucky(a, b, c):
...     return sum(takewhile(lambda arg: arg != 13, locals().values()))
... 
>>> broken_lucky(1,2,3)
6
>>> broken_lucky(1,2,13)
1
>>> broken_lucky(1,13,2)
3
>>>
Естественно, можно сделать тупо так:
Python
1
2
3
>>> def lucky_sum(a, b, c):
...     return sum(takewhile(lambda arg: arg != 13, [a,b,c]))
...
2
104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 966
Записей в блоге: 16
30.10.2011, 19:05  [ТС]
И еще вопрос, есть вот такая xml-страничка
XML
1
<?xml version="1.0" encoding="UTF-8"?><hero><name>Drikins</name><godname>Index</godname><gender>male</gender><gold_approx>ни одного</gold_approx><level>13</level><max_health>148</max_health><inventory_max_num>13</inventory_max_num><motto>За Годвилль!</motto><clan></clan><clan_position>патриарх</clan_position><alignment>нейтральный</alignment><quest>выполнить недопустимую операцию</quest><bricks_cnt>9</bricks_cnt><inventory></inventory></hero>
Можно пример, где отсюда будет браться значение name, и выводитца на экран ?)
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.10.2011, 19:12
Кстати, вместо лябды в данном случае можно было бы использовать частичное применение функции-оператора ne:
Python
1
2
3
4
5
6
7
>>> from itertools import takewhile
>>> from functools import partial
>>> from operator import ne
>>> def lucky_sum(*args):
...     return sum(takewhile(partial(ne, 13), args))
... 
>>>
bodrich, в смысле? Как при парсинге этой строки получить значение элемента name?
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
30.10.2011, 19:26
Цитата Сообщение от Nameless One Посмотреть сообщение
bodrich, в смысле? Как при парсинге этой строки получить значение элемента name?
с помощью ElementTree
Python
1
2
3
4
5
6
7
8
>>> import xml.etree.ElementTree as etree
>>> xml = '''<?xml version="1.0" encoding="UTF-8"?><hero><name>Drikins</name><godname>Index</godname><gender>male</gender><gold_approx>ни одного</gold_approx><level>13</level><max_health>148</max_health><inventory_max_num>13</inventory_max_num><motto>За Годвилль!</motto><clan></clan><clan_position>патриарх</clan_position><alignment>нейтральный</alignment><quest>выполнить недопустимую операцию</quest><bricks_cnt>9</bricks_cnt><inventory></inventory></hero>'''
>>> tree = etree.fromstring(xml)
>>> for name in tree.findall('name'): # ищем все элементы name
...     print(name.text)
... 
Drikins
>>>
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
31.10.2011, 03:38
Цитата Сообщение от bodrich
Python
1
  sum = 0
sum - это встроенная функция, нельзя перекрывать

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python3
 
def func(a, b, c):
    s = 0
    for i in a, b, c:
        if i == 13:
            break
        s += i
    return s
 
print(func(1, 2, 3))
print(func(13, 2, 3))
print(func(1, 13, 3))
print(func(1, 2, 13))
Code
1
2
3
4
5
6
[guest@localhost tests]$ ./t.py
6
0
1
3
[guest@localhost tests]$
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.10.2011, 03:38
Помогаю со студенческими работами здесь

Как сделать кнопки красивее?
Есть элемент ToolBar, на нем у меня находится несколько кнопок, посоветуйте как сделать их не просто кнопками, а кнопками с картинкой ?...

Как сделать программу красивее?
Вот написал программу на Java, и хочу штоб внешне она выглядела немного получше, вот только не знаю как можно пристроить в программу што то...

Как это можно сделать красивее?
uint8_t sommomd = 0x55; uint16_t u16Temp = 0; u16Temp = GPIO_ReadOutputData(GPIOA)&amp;0xFF00; u16Temp |= sommomd; GPIO_Write(GPIOA,...

Как сделать красивый советский автомобиль ещё красивее
Как сделать красивый советский автомобиль ещё красивее. Москвич АЗЛК-2140 SL после компьютерного улучшайзинга

Как можно сделать рамку вокруг таблицы красивее и объемнее
Есть таблица .tg {border-collapse:collapse;border-spacing:0; width:100%; cellpadding:15 px; cellspacing:3; border-radius:15px;} .tg...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru