Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Однострочник на Python для суммы всех осторожных чисел?

Ян Дененберг Ученик (1), на голосовании 1 неделю назад
 print(sum(number for number in range(2024) if number % 10 == 3 or number % 3 == 0))  

Всего одна строчка кода вместо вот этой длинной программы, написанной ChatGPT 4o:
 def is_cautious(n):  

# Число осторожное, если оно оканчивается на 3 или делится на 3

return n % 10 == 3 or n % 3 == 0

def sum_cautious_numbers(limit):

total_sum = 0

for num in range(1, limit + 1):

if is_cautious(num):

total_sum += num

return total_sum

# Задаем предел

limit = 2024

result = sum_cautious_numbers(limit)

print(f"Сумма всех осторожных чисел, не превышающих {limit}: {result}")

А задача выглядела так:
Назовём натуральное число осторожным, если оно оканчивается на 3 или делится на 3. Напиши прогу, которая сосчитает сумму всех осторожных чисел, не превышающих 2024.
Ответ, кстати, 819520.
Какой из этих двух вариантов кода вам больше нравится и почему?
Голосование за лучший ответ
Limnetic Профи (506) 1 месяц назад
2
Ян ДененбергУченик (1) 1 месяц назад
А почему второй?
Limnetic Профи (506) Ян Дененберг, код читабельней и ООПшней
Вертолётов 625 Мудрец (12979) 1 месяц назад
## Сравнение двух подходов к решению задачи

### Однострочник на Python

```python
print(sum(number for number in range(2024) if number % 10 == 3 or number % 3 == 0))
```

**Преимущества:**
- **Краткость и лаконичность:** Код занимает всего одну строку, что делает его более читаемым и удобным для быстрого понимания.
- **Эффективность:** Использует генераторное выражение, что позволяет избежать создания лишних списков и экономит память.
- **Простота:** Легко модифицировать, если потребуется изменить условие.

**Недостатки:**
- **Меньшая понятность для новичков:** Для людей, не знакомых с функциональным программированием или генераторами, такой код может показаться сложным.

### Длинная программа

```python
def is_cautious(n):
return n % 10 == 3 or n % 3 == 0

def sum_cautious_numbers(limit):
total_sum = 0
for num in range(1, limit + 1):
if is_cautious(num):
total_sum += num
return total_sum

limit = 2024
result = sum_cautious_numbers(limit)
print(f"Сумма всех осторожных чисел, не превышающих {limit}: {result}")
```

**Преимущества:**
- **Ясность:** Код более структурирован и понятен. Функции четко определяют свою задачу.
- **Легкость в отладке:** Если возникнет ошибка, легче найти и исправить её в отдельной функции.
- **Расширяемость:** Легче добавлять новые функции или изменять логику.

**Недостатки:**
- **Длина:** Код занимает больше места, что может быть избыточным для простых задач.
- **Сложность:** Может показаться излишне сложным для простого вычисления суммы.

## Какой вариант лучше?

Выбор между однострочником и длинной программой зависит от контекста:

- Если вам нужно быстро выполнить задачу и вы уверены в своих знаниях Python, однострочник будет отличным выбором.
- Если вы работаете в команде или планируете расширять функциональность программы, длинная версия будет более предпочтительной.

### Заключение

Оба подхода имеют свои преимущества и недостатки. Важно выбирать тот, который соответствует вашим текущим задачам и уровню комфорта с языком программирования.
Некий Загадочный Гений (51001) 1 месяц назад
Второй вариант.
Ваша одна строка не соответствует постановке задачи ))
Ян ДененбергУченик (1) 1 месяц назад
Почему она не соответствует?
Некий Загадочный Гений (51001) range(2025) должно быть
Похожие вопросы