Top.Mail.Ru
Ответы

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

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


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

12345678910111213141516171819202122232425
 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.
Какой из этих двух вариантов кода вам больше нравится и почему?

По дате
По рейтингу
Аватар пользователя
8мес

Второй вариант.
Ваша одна строка не соответствует постановке задачи ))

Аватар пользователя
Мудрец
8мес

## Сравнение двух подходов к решению задачи

### Однострочник на 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, однострочник будет отличным выбором.
- Если вы работаете в команде или планируете расширять функциональность программы, длинная версия будет более предпочтительной.

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

Оба подхода имеют свои преимущества и недостатки. Важно выбирать тот, который соответствует вашим текущим задачам и уровню комфорта с языком программирования.

Аватар пользователя
Профи
8мес

2