прокидывать exception в блоках try-catch JAVA

я новичок. дали первую таску, одну часть выполнила, на второй встряла. подскажите пожалуйста что конкретно делать тут
"...в сервисных классах кафки нужно прокидывать exception в блоках try-catch, где вызывается log.error(). Нужно будет написать новые эксепшены нашего сервиса и прокидывать их"

мои сервисы
 

@Slf4j
@Component
@RequiredArgsConstructor
public class KafkaListenersService {

    private final KafkaSenderService kafkaSender;
    @Value(value = "${kafka-topics.platform-direction-create}")
    private String platformDirectionCreate;
    @Value(value = "${kafka-topics.platform-direction-update}")
    private String platformDirectionUpdate;
    @Value(value = "${kafka-topics.platform-direction-delete}")
    private String platformDirectionDelete;
    private final ObjectMapper objectMapper;

    @KafkaListener(topics = "${kafka-topics.adapter-direction-create}")
    public void listenerAdapterDirectionCreate(ConsumerRecord<String, JsonNode> myRecord){
        log.info("Get message in topic adapter-direction-create, key {} value {}", myRecord.key(), myRecord.value());

        DirectionRequest directionRequest = null;

        try {
            directionRequest = objectMapper.treeToValue(myRecord.value(), DirectionRequest.class);
        } catch (JsonProcessingException e) {
            log.error("Error reading message: {}", e.getMessage());
        }
        log.info("Created request to create direction: " + directionRequest.getName());

        kafkaSender.sendMessage(platformDirectionCreate, "Create direction", myRecord.value());
    }

    @KafkaListener(topics = "${kafka-topics.adapter-direction-update}")
    public void listenerAdapterDirectionUpdate(ConsumerRecord<String, JsonNode> myRecord){
        log.info("Get message in topic adapter-direction-update, key {} value {}", myRecord.key(), myRecord.value());

        DirectionRequest directionRequest = null;

        try {
            directionRequest = objectMapper.treeToValue(myRecord.value(), DirectionRequest.class);
        } catch (JsonProcessingException e) {
            log.error("Error reading message: {}", e.getMessage());
        }
        log.info("Created request to update direction: " + directionRequest.getName());

        kafkaSender.sendMessage(platformDirectionUpdate, "Update direction", myRecord.value());
    }

    @KafkaListener(topics = "${kafka-topics.adapter-direction-delete}")
    public void listenerAdapterDirectionDelete(ConsumerRecord<String, JsonNode> myRecord){
        log.info("Get message in topic adapter-direction-delete, key {} value {}", myRecord.key(), myRecord.value());

        String id = null;

        try {
            id = objectMapper.treeToValue(myRecord.value(), String.class);
        } catch (JsonProcessingException e) {
            log.error("Error reading message: {}", e.getMessage());
        }
        log.info("Created request to delete direction with id: " + id);

        kafkaSender.sendMessage(platformDirectionDelete, "Delete direction", myRecord.value());
    }
}

----------------------------------------------------------------------------------------------------

@Slf4j
@Service
@RequiredArgsConstructor
public class KafkaSenderService {

    private final KafkaTemplate<String, Object> kafkaTemplate;
    @Value(value = "${acks-timeout-mseconds}")
    private Integer acksTimeoutMseconds;

    public void sendMessage(String topic, String key, Object msg) {
        try {
            kafkaTemplate.send(topic, key, msg).get(acksTimeoutMseconds, TimeUnit.MILLISECONDS);
        } catch (ExecutionException | InterruptedException | TimeoutException e) {
            log.error("Message timeout may not be connected to Kafka! {} , stackTrace {}", e, Arrays.toString(e.getStackTrace()));
        }
        log.info("Sending via Kafka to a topic: {} massage: {}", topic, msg);
    }
}

exception   java   trycatch   кафка  

4381   0   21:11, 11th March, 2023


Помогите пожалуйста решить задачи

Задание № 1. Наследование

Исходя из квиза к предыдущему занятию, у нас уже есть класс преподавателей и класс студентов (вы можете взять этот код за основу или написать свой). Студентов пока оставим без изменения, а вот преподаватели бывают разные, поэтому теперь класс Mentor должен стать родительским классом, а от него нужно реализовать наследование классов Lecturer (лекторы) и Reviewer (эксперты, проверяющие домашние задания). Очевидно, имя, фамилия и список закрепленных курсов логично реализовать на уровне родительского класса. А чем же будут специфичны дочерние классы? Об этом в следующих заданиях.

Задание № 2. Атрибуты и взаимодействие классов.

В квизе к предыдущей лекции мы реализовали возможность выставлять студентам оценки за домашние задания. Теперь это могут делать только Reviewer (реализуйте такой метод)! А что могут делать лекторы? Получать оценки за лекции от студентов :) Реализуйте метод выставления оценок лекторам у класса Student (оценки по 10-балльной шкале, хранятся в атрибуте-словаре у Lecturer, в котором ключи – названия курсов, а значения – списки оценок). Лектор при этом должен быть закреплен за тем курсом, на который записан студент.

Задание № 3. Полиморфизм и магические методы

  1. Перегрузите магический метод __str__ у всех классов.

У проверяющих он должен выводить информацию в следующем виде:

print(some_reviewer)
Имя: Some
Фамилия: Buddy

У лекторов:

print(some_lecturer)
Имя: Some
Фамилия: Buddy
Средняя оценка за лекции: 9.9

А у студентов так:

print(some_student)
Имя: Ruoy
Фамилия: Eman
Средняя оценка за домашние задания: 9.9
Курсы в процессе изучения: Python, Git
Завершенные курсы: Введение в программирование
  1. Реализуйте возможность сравнивать (через операторы сравнения) между собой лекторов по средней оценке за лекции и студентов по средней оценке за домашние задания.

Задание № 4. Полевые испытания

Создайте по 2 экземпляра каждого класса, вызовите все созданные методы, а также реализуйте две функции:

  1. для подсчета средней оценки за домашние задания по всем студентам в рамках конкретного курса (в качестве аргументов принимаем список студентов и название курса);
  2. для подсчета средней оценки за лекции всех лекторов в рамках курса (в качестве аргумента принимаем список лекторов и название курса).

 

https://replit.com/@nikolaivinnitsk/DZ-1#main.py

 

class Student:
    def __init__(self, name, surname):
        self.name = name
        self.surname = surname
        self.finished_courses = []
        self.courses_in_progress = []
        self.grades = {}
        self.srgr=float()

    def srgr(self):
        grades_count=0
        if not self.grades:
            return 0
        spisok=[]
        for k in self.grades:
             grades_count += len(self.grades[k])
             spisok.extent(k)
        return float(sum(spisok)/max(len(spisok), 1))
      
    def __str__(self):
       # grades_count = 0
        courses_in_progress_string = ', '.join(self.courses_in_progress)
        finished_courses_string = ', '.join(self.finished_courses)
 #      for k in self.grades:
  #          grades_count += len(self.grades[k])
   #     self.average_rating = sum(map(sum, self.grades.values())) / grades_count  '''
        
        res = f'Имя:{self.name}\n' \
              f'Фамилия:{self.surname}\n' \
              f'Средняя оценка за домашнее задание:{self.srgr}\n' \
              f'Курсы в процессе обучени:{courses_in_progress_string}\n' \
              f'Завершенные курсы:{finished_courses_string}'
        return res
      
    def rate_hw(self, lecturer, course, grade):
        if isinstance(lecturer,Lecturer) and course in self.courses_in_progress and course in lecturer.courses_attached:
           if course in lecturer.grades:
               lecturer.grades[course] += [grade]
           else:
               lecturer.grades[course] = [grade]
        else:
            return'Ошибка'
          
    def __lt__(self, other):
        if not isinstance(other, Student):
            print('Такое сравнение некорректно')
            return
        return self.srgr < other.srgr

      
class Mentor:
    def __init_(self, name, surname):
        self.name = name
        self.surname = surname
        self.courses_attached = []

      
class Lecturer(Mentor):
    def __init__(self, name, surname):
        super().__init__(name, surname)
        #self.average_rating = float()
        self.grades = {}
        self.srgr = float()

    def srgr(self):
        grades_count=0
        if not self.grades:
            return 0
        spisok=[]
        for k in self.grades.values():
           grades_count += len(self.grades[k])
           spisok.extent(k)
        return float(sum(spisok)/max(len(spisok), 1))
      
    def __str__(self):
    #    grades_count = 0 
     #   for k in self.grades:
      #      grades_count += len(self.grades[k])
       # self.average_rating = sum(map(sum, self.grades.values())) / grades_count
        res = f'Имя: {self.name}\nФамилия: {self.surname}\nСредняя оценка за лекции: {self.srgr}'
        return res

    def __lt__(self, other):
        if not isinstance(other, Lecturer):
            print('Такое сравнение некорректно')
            return
        return self.srgr < other.srgr

      
class Reviewer(Mentor):
    def rate_hw(self, student, course, grade):
        if isinstance(student, Student) and course in self.courses_attached and course in student.courses_in_progress:
            if course in student.grades:
                student.grades[course] += [grade]
            else: 
                student.grades[course] = [grade]
        else:
            return'Ошибка'
          
    def __str__(self):
        res = f'Имя: {self.name}\nФамилия: {self.surname}'
        return res
      
best_lecturer_1 = Lecturer('Ivan', 'Ivanov')
best_lecturer_1.courses_attached += ['Python']

best_lecturer_2 = Lecturer('Petr', 'Petrov')
best_lecturer_2.courses_attached += ['Java']

best_lecturer_3 = Lecturer('Semen', 'Zarev')
best_lecturer_3.courses_attached += ['Python']
    
cool_rewiewer_1 = Reviewer('Some', 'Buddy')
cool_rewiewer_1.courses_attached += ['Python']
cool_rewiewer_1.courses_attached += ['Java']

cool_rewiewer_2 = Reviewer('Ostap', 'Bender')
cool_rewiewer_2.courses_attached += ['Python']
cool_rewiewer_2.courses_attached += ['Java']

student_1 = Student('Denis', 'Sviridov')
student_1.courses_in_progres += ['Python']
student_1.finished_coursers += ['Введение в программирование']

student_2 = Student('Roman', 'Malikov')
student_2.courses_in_progres += ['Java']
student_2.finished_coursers += ['Введение в программирование']

student_3 = Student('Sidor', 'Petrov')
student_3.courses_in_progres += ['Python']
student_3.finished_courses += ['Введение в программирование']

student_1.rate_hw(best_lecturer_1, 'Python', 10)
student_1.rate_hw(best_lecturer_1, 'Python', 10)
student_1.rate_hw(best_lecturer_1, 'Python', 10)

student_1.rate_hw(best_lecturer_2, 'Python', 5)
student_1.rate_hw(best_lecturer_2, 'Python', 7)
student_1.rate_hw(best_lecturer_2, 'Python', 8) 

student_1.rate_hw(best_lecturer_1, 'Python', 7)
student_1.rate_hw(best_lecturer_1, 'Python', 8)
student_1.rate_hw(best_lecturer_1, 'Python', 9)

student_2.rate_hw(best_lecturer_2, 'Python', 10)
student_2.rate_hw(best_lecturer_2, 'Python', 8)
student_2.rate_hw(best_lecturer_2, 'Python', 9)

student_3.rate_hw(best_lecturer_3, 'Python', 5)
student_3.rate_hw(best_lecturer_3, 'Python', 6)
student_3.rate_hw(best_lecturer_3, 'Python', 7)

cool_rewiewer_1.rate_hw(student_1, 'Python', 8)
cool_rewiewer_1.rate_hw(student_1, 'Python', 9)
cool_rewiewer_1.rate_hw(student_1, 'Python', 10)

cool_rewiewer_2.rate_hw(student_2, 'Java', 8)
cool_rewiewer_2.rate_hw(student_2, 'Java', 7)
cool_rewiewer_2.rate_hw(student_2, 'Java', 9)

cool_rewiewer_2.rate_hw(student_3, 'Python', 8)
cool_rewiewer_2.rate_hw(student_3, 'Python', 7)
cool_rewiewer_2.rate_hw(student_3, 'Python', 9)
cool_rewiewer_2.rate_hw(student_3, 'Python', 8)
cool_rewiewer_2.rate_hw(student_3, 'Python', 7)
cool_rewiewer_2.rate_hw(student_3, 'Python', 9)

print(f'Перечень студентов:\n\n{student_1}\n\n{student_2}\n\n{student_3}')
print()
print()

print(f'Перечень лекторов:\n\n{best_lecturer_1}\n\n{best_lecturer_2}\n\n{best_lecturer_3}')
print()
print()

print(f'Результат сравнения студентов(по средним оценкам за ДЗ): '
      f'{student_1.name} {student_1.surname} < {student_2.name} {student_2.surname} ={student_1 > student_2}')
print()

print(f'Результат сравнения лекторов (по средним оценкам за лекции): '
      f'{best_lecturer_1.name} {best_lecturer_1.surname} < {best_lecturer_2.name} {best_lecturer_2.surname} = {best_lecturer_1 > best_lecturer_2}')
print()

student_list = [student_1, student_2, student_3]

lecturer_list = [best_lecturer_1, best_lecturer_2, best_lecturer_3]

def student_rating(student_list, course_name):
  
    sum_all = 0
    count_all = []
    for stud in student_list:
       if stud.courses_in_progress == [course_name]:
            sum_all += len(student_list[stud])
            count_all.extent(stud)
    #average_for_all = sum_all / count_all
    return float (sum(count_all)/max(len(count_all),1))#average_for_all

def lecturer_rating(lecturer_list, course_name):
    sum_all = 0
    count_all = 0
    for lect in lecturer_list:
        if lect.courses_attached == [course_name]:
          sum_all += len(lecturer_list[lect])
          count_all.extent(lect)
    #average_for_all = sum_all / count_all
    return float (sum(count_all)/max(len(count_all),1))#average_for_all

print(f"Средняя оценка для всех студентов по курсу {'Python'}: {student_rating(student_list, 'Python')}")
print()

print(f"Средняя оценка для всех лекторов по курсу {'Python'}: {lecturer_rating(lecturer_list, 'Python')}")
print() 

Домашнее задание  

6086   0   23:53, 24th November, 2022


Не понимаю почему не открывается детальное описание продукта

Добрый день! Не могу разобраться с выводом товаров по категории. Суть  такая, есть каталог, в каталоге категории и в эти категории добавляется один товар. Например в админке добавляю например каталог МЕБЕЛЬ, далее в этом каталоге добавляем две категории ДЛЯ КУХНИ и ДЛЯ СПАЛЬНИ и добавляем уже продукт КРОВАТЬ для категории ДЛЯ СПАЛЬНИ. Вобщем каталоги и разделы открываются, но при попытке перейти в продукт КРОВАТЬ пишет страница не найдена 404.

Вот код

models.py

from django.db import models
from django.urls import reverse
 
class Catalog(models.Model):
 
sections = models.CharField(max_length=150, db_index=True, verbose_name="Название")
img = models.ImageField(upload_to='img/catalog/')
slug = models.SlugField(max_length=150, db_index=True, unique=True, null=True)
 
class Meta:
ordering = ('sections',)
index_together = (('id', 'slug'),)
verbose_name = 'Главная страница каталога'
verbose_name_plural = 'Главная страница каталога'
 
def __str__(self):
return self.sections
 
def get_absolute_url(self):
return reverse('catalog', kwargs={"slug": self.slug})


 
class Category(models.Model):
catalog = models.ForeignKey(Catalog, related_name='catalog', on_delete=models.CASCADE,
verbose_name='Выбрать каталог'
)
name = models.CharField(max_length=150, db_index=True, verbose_name="Название")
img = models.ImageField(upload_to='img/catalog/')
slug = models.SlugField(max_length=200, db_index=True, unique=True, null=True)
 
class Meta:
ordering = ('name',)
index_together = (('id', 'slug'),)
verbose_name = 'Категория'
verbose_name_plural = 'Категории'
 
def __str__(self):
return self.name
 
def get_absolute_url(self):
return reverse('catalog-detail', kwargs={"slug": self.slug})
 
class Product(models.Model):
category = models.ForeignKey(Category, related_name='category', on_delete=models.CASCADE,
verbose_name='Выбрать категорию'
)
name = models.CharField(max_length=255, db_index=True,unique=True, null=True, verbose_name="Название")
text = models.TextField('Текст')
url = models.CharField(max_length=255, db_index=True, verbose_name="Ссылка на сайт")
pdf = models.FileField(upload_to='pdf/')
slug = models.SlugField(max_length=200, db_index=True, unique=True, null=True)
 
class Meta:
ordering = ('name',)
index_together = (('id', 'slug'),)
verbose_name = 'Продукт'
verbose_name_plural = 'Продукты'
 
def __str__(self):
return self.name
 
def get_absolute_url(self):
return reverse('product-detail', kwargs={"slug": self.slug})
 
class Gallery(models.Model):
image = models.ImageField(upload_to='img/catalog/')
product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='images')
class Meta:
verbose_name = 'Галерея'
verbose_name_plural = 'Галереи'

urls.py:

from django.contrib import admin
from django.urls import path, include
 
from . import views
 
urlpatterns = [
path('', views.CatalogView.as_view(), name='catalog'),
path('<slug>/', views.CatalogDetailViews.as_view(), name='catalog-detail'),
path('product/<slug:slug>', views.ProductDetailViews.as_view(), name='product-detail')
]

views.py:

from django.shortcuts import render, get_object_or_404
from .models import Catalog_text, Catalog, Category, Product
from django.views.generic import DetailView, ListView
 
class CatalogView(ListView):
model = Catalog
template_name = 'catalog/catalog.html'
context_object_name = 'catalog'
 
class CatalogDetailViews(ListView):
model = Category
template_name = 'catalog/catalog-detail.html'
context_object_name = 'category'
 
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(CatalogDetailViews, self).get_context_data(**kwargs)
# Add in a QuerySet of all the Baklawa
context['cat'] = Catalog.objects.all()
return context
 
def get_queryset(self):
category = get_object_or_404(Catalog, slug__iexact=self.kwargs.get('slug'))
queryset = category.catalog.all()
return queryset
 
class ProductDetailViews(DetailView):
model = Product
template_name = 'catalog/product-detail.html'
context_object_name = 'product'


 

 

В шаблоне :

{% for cat in category %}
                    <div class="room-item catalog_items">
                        <ul class="hover-effect-cover">
                            <li>
                              <img src="{{ cat.img.url }}" alt="">
                              
                              <div class="effect-to-top">
                                <h3>{{ cat.name }}</h3>
                                <p></p>
                                <a href="{% url 'product-detail' cat.id %}" class="button">ПОДРОБНЕЕ</a>
                              </div>
                            </li>
                        </ul>
                    </div>
                    {% endfor %}

 

Допустим я в админке категория test и продукт для этой категории product1, ссылка в шаблоне получается catalog/product/test и соответственно выдает 404, но если я руками поправлю ссылу в адресной строке на catalog/product/product1 то все откроется как надо (описание продукта).

 

django  

4351   0   11:51, 11th November, 2022


Нужно решить задачу по программированию на массивы

Помогите, пожалуйста. Вводится одномерный вещественный массив фиксированной длины, состоящий из 
«N» элементов (конкретное значение N для каждого студента индивидуально 
задается преподавателем). Требуется: 1) Вывести исходный массив в строку 
(например, 23.5 45.1 и т.д.). 2) Поменять местами элементы массива по следующему 
закону: левую половину массива сдвинуть на один элемент влево; правую – на один 
элемент вправо. Если количество элементов нечетное, то средний элемент в работе 
не участвует. Вывести измененный массив в том же виде что и исходный, но со 
следующей строки.

Фортран   массивы  

4396   0   18:01, 27th October, 2022


Метода Крамера С++

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



помогите решить задачу на C++

Путешествие на Марс

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

По правилам космических перевозок масса ручной клади не должна превосходить S кг, а в багаж может быть помещен чемодан любой массы.  Самые ценные вещи Андрэ хочет положить в рюкзак, и взять с собой в ручную кладь.

Андрэ решил выложить все свои вещи и приборы в порядке убывания их ценности и начинает складывать самые ценные вещи в рюкзак. Первым делом он берет самую ценную вещь и, если ее масса не превышает S, кладет ее в рюкзак, а иначе кладет ее в чемодан. Затем он берет следующую по ценности вещь. Если сумма её массы и массы всех вещей, уже находящихся в рюкзаке, не превышает S, то он кладет её в рюкзак, иначе в чемодан. И так далее для всех вещей.

Определите массу рюкзака и чемодана после того, как все вещи будут сложены.

Формат входных данных

В первой строке вводится натуральное число N (N ≤ 10 5 ) – количество предметов

Во второй строке вводится натуральное число S (S ≤ 2 х 10 9 ) – максимально разрешенная масса рюкзака

В следующих N строках даны массы вещей. Гарантируется, что вещи уже упорядочены в порядке убывания ценности и сумма масс всех предметов не превосходит 2 х 10 9 .

Формат результата

2 целых числа – вес рюкзака и вес чемодана на разных строках.

 

Примеры

Входные данные

5
20
6
10
5
2
3

Результат работы

18
8

информатика   C++   задачи  

4002   0   17:31, 22nd October, 2022


Помогите решить задачу на python с codeforces

Назовем два числа xx и yy похожими, если они имеют одинаковую четность (одинаковый остаток при делении на 22), или если |x−y|=1|x−y|=1. Например, в каждой из пар (2,6)(2,6), (4,3)(4,3), (11,7)(11,7) числа похожи между собой, а в парах (1,4)(1,4), (3,12)(3,12) — нет.

Вам дан массив aa из nn (число nn четно) целых положительных чисел. Проверьте, существует ли такое разбиение массива на пары, что каждый элемент массива принадлежит ровно одной паре, и в каждой паре числа похожи между собой.

Например для массива a=[11,14,16,12]a=[11,14,16,12] существует разбиение на пары (11,12)(11,12) и (14,16)(14,16). Числа в первой паре похожи, потому что модуль их разности равен единице, а во второй паре — потому что они оба четные.

Входные данные

В первой строке записано одно целое число tt (1≤t≤10001≤t≤1000) — количество наборов тестовых данных в тесте. Далее следуют tt наборов тестовых данных.

Каждый набор задается двумя строками. В первой строке записано четное целое число nn (2≤n≤502≤n≤50) — длина массива aa.

Во второй строке записано nn целых чисел a1,a2,…,ana1,a2,…,an (1≤ai≤1001≤ai≤100).

Выходные данные

Для каждого набора тестовых данных выведите:

  • YES, если разбиение существует;
  • NO, если разбиения не существует.

Буквы в словах YES и NO можно выводить в любом регистре.

Пример

входные данные

7
4
11 14 16 12
2
1 8
4
1 1 1 1
4
1 2 5 6
2
12 13
6
1 6 3 10 5 8
6
1 12 3 10 5 8

выходные данные

YES
NO
YES
YES
YES
YES
NO

python   codeforces   задача   программирование  

4492   0   11:11, 22nd October, 2022


Python с нуля: полное руководство для начинающих

Оглавление

1. [Введение в Python] 2. [Установка Python] 3. [Первая программа на Python] 4. [Основы синтаксиса Python] 5. [Типы данных в Python] 6. [Переменные и операторы] 7. [Условные конструкции] 8. [Циклы в Python] 9. [Функции] 10. [Работа со списками и словарями] 11. [Работа с файлами] 12. [Обработка исключений] 13. [Модули и библиотеки] 14. [Объектно-ориентированное программирование в Python] 15. [Практические проекты для начинающих] 16. [Ресурсы для дальнейшего изучения] 17. [Заключение]

Введение в Python

Python – это мощный, гибкий и легкий для изучения язык программирования, который стал одним из самых популярных в мире. Созданный Гвидо ван Россумом и впервые выпущенный в 1991 году, Python продолжает расти и развиваться, оставаясь при этом верным своей философии простоты и читаемости кода.

Почему стоит изучать Python?

1. Простота и читаемость: Синтаксис Python интуитивно понятен и близок к естественному языку, что делает его идеальным для начинающих. 2. Универсальность: Python применяется в веб-разработке, анализе данных, искусственном интеллекте, научных вычислениях и многих других областях. 3. Большое сообщество: Огромное количество разработчиков по всему миру создают библиотеки и инструменты, расширяющие возможности языка. 4. Высокий спрос на рынке труда: Специалисты по Python высоко ценятся работодателями во многих отраслях. В этом руководстве мы пройдем путь от установки Python до создания ваших первых программ и понимания ключевых концепций языка.

Установка Python

Прежде чем начать программировать на Python, необходимо установить его на ваш компьютер. Python доступен для всех основных операционных систем: Windows, macOS и Linux.

Для Windows:

1. Посетите официальный сайт Python (python.org). 2. Скачайте последнюю версию Python для Windows. 3. Запустите установщик и следуйте инструкциям. Убедитесь, что отмечен пункт "Add Python to PATH". 4. После установки откройте командную строку и введите `python --version`, чтобы проверить успешность установки.

Для macOS:

1. На современных версиях macOS Python может быть уже установлен. Проверьте это, открыв Terminal и введя `python --version`. 2. Если Python не установлен или вы хотите обновить его, скачайте последнюю версию с официального сайта. 3. Запустите установщик и следуйте инструкциям.

Для Linux:

На большинстве дистрибутивов Linux Python уже предустановлен. Если нет, вы можете установить его через менеджер пакетов: - Для Ubuntu или Debian: `sudo apt-get install python3` - Для Fedora: `sudo dnf install python3` После установки вы готовы начать свое путешествие в мир Python!

Первая программа на Python

Традиционно, первой программой на любом языке программирования является "Hello, World!". Давайте создадим эту программу на Python. 1. Откройте любой текстовый редактор (например, Notepad++ для Windows или TextEdit для macOS). 2. Введите следующий код:
python
print("Hello, World!")
3. Сохраните файл с расширением `.py`, например, `hello_world.py`. 4. Откройте командную строку или терминал, перейдите в директорию с вашим файлом и выполните команду:
python hello_world.py
Вы должны увидеть вывод: `Hello, World!` Поздравляем! Вы только что написали и запустили свою первую программу на Python.

Основы синтаксиса Python

Python известен своим чистым и читаемым синтаксисом. Вот несколько ключевых особенностей: 1. Отступы: Python использует отступы для определения блоков кода. Обычно используется 4 пробела. 2. Комментарии: Однострочные комментарии начинаются с `#`, многострочные заключаются в `'''` или `"""`. 3. Переменные: В Python не нужно объявлять тип переменной.
python
x = 5  # это целое число
y = "Hello"  # это строка
4. Операторы присваивания: Используйте `=` для присваивания значений. 5. Операторы сравнения:
`==`, `!=`, `<`, `>`, `<=`, `>=`
6. Логические операторы: `and`, `or`, `not` Понимание этих основ поможет вам начать писать простые программы и подготовит к изучению более сложных концепций.

Типы данных в Python

Python имеет несколько встроенных типов данных. Вот основные из них: 1. Числа: - Целые числа (int): `x = 5` - Числа с плавающей точкой (float): `y = 3.14` - Комплексные числа: `z = 1 + 2j` 2. Строки (str):
python
name = "Python"
multiline = """Это
многострочная
строка"""
3. Списки (list):
python
fruits = ["яблоко", "банан", "апельсин"]
4. Кортежи (tuple):
python
coordinates = (10, 20)
5. Словари (dict):
python
person = {"name": "Иван", "age": 30}
6. Множества (set):
python
unique_numbers = {1, 2, 3, 4, 5}
7. Логический тип (bool):
python
is_python_fun = True
Понимание типов данных критически важно для эффективного программирования на Python.

Переменные и операторы

Переменные

В Python переменные создаются при первом присваивании:
python
x = 5
name = "Alice"
is_student = True
Python динамически типизирован, что означает, что вам не нужно явно указывать тип переменной.

Операторы

Python поддерживает различные типы операторов: 1. Арифметические операторы: `+`, `-`, `*`, `/`, `//` (целочисленное деление), `%` (остаток), `` (возведение в степень)
python
x = 10
y = 3
print(x + y)  # 13
print(x / y)  # 3.3333...
print(x // y)  # 3
print(x % y)  # 1
print(x  y)  # 1000
2. Операторы сравнения: `==`, `!=`, `<`, `>`, `<=`, `>=`
python
x = 5
y = 10
print(x == y)  # False
print(x < y)   # True
3. Логические операторы: `and`, `or`, `not`
python
x = 5
y = 10
z = 15
print(x < y and y < z)  # True
print(x > y or y > z)   # False
print(not x == y)       # True
4. Операторы присваивания: `=`, `+=`, `-=`, `*=`, `/=`, `%=`, `=`, `//=`
python
x = 5
x += 3  # эквивалентно x = x + 3
print(x)  # 8
Понимание этих операторов позволит вам выполнять различные операции с данными в ваших программах.

Условные конструкции

Условные конструкции позволяют программе принимать решения на основе определенных условий. В Python основной условной конструкцией является `if-elif-else`.

Оператор if

python
age = 18
if age >= 18:
    print("Вы совершеннолетний")

Оператор if-else

python
age = 16
if age >= 18:
    print("Вы совершеннолетний")
else:
    print("Вы несовершеннолетний")

Оператор if-elif-else

python
score = 75
if score >= 90:
    print("Отлично")
elif score >= 80:
    print("Хорошо")
elif score >= 70:
    print("Удовлетворительно")
else:
    print("Нужно улучшить результат")

Тернарный оператор

Python также поддерживает тернарный оператор для краткой записи простых условий:
python
age = 20
status = "совершеннолетний" if age >= 18 else "несовершеннолетний"
print(status)  # совершеннолетний
Условные конструкции - это мощный инструмент, позволяющий создавать более сложную логику в ваших программах.

Циклы в Python

Циклы позволяют выполнять код многократно. В Python есть два основных типа циклов: `for` и `while`.

Цикл for

Цикл `for` используется для итерации по последовательности (например, списку, кортежу, строке) или другому итерируемому объекту.
python
# Итерация по списку
fruits = ["яблоко", "банан", "апельсин"]
for fruit in fruits:
    print(fruit)

# Использование range()
for i in range(5):
    print(i)  # Выведет числа от 0 до 4

Цикл while

Цикл `while` выполняется, пока условие истинно.
python
count = 0
while count < 5:
    print(count)
    count += 1

Операторы break и continue

- `break` используется для выхода из цикла досрочно. - `continue` используется для перехода к следующей итерации цикла.
python
for i in range(10):
    if i == 3:
        continue  # Пропустить 3
    if i == 7:
        break  # Выйти из цикла при достижении 7
    print(i)

Цикл for с else

Python позволяет использовать `else` с циклом `for`. Блок `else` выполняется, если цикл завершился нормально (без `break`).
python
for i in range(5):
    print(i)
else:
    print("Цикл завершен нормально")
Циклы - это фундаментальная концепция в программировании, позволяющая эффективно обрабатывать данные и автоматизировать повторяющиеся задачи.

Функции

Функции в Python - это блоки кода, которые выполняют определенную задачу. Они позволяют структурировать код, делая его более читаемым и повторно используемым.

Определение функции

python
def greet(name):
    return f"Привет, {name}!"

# Вызов функции
message = greet("Алиса")
print(message)  # Выведет: Привет, Алиса!

Параметры функции

Функции могут принимать параметры, которые позволяют передавать в них данные.
python
def add(a, b):
    return a + b

result = add(5, 3)
print(result)  # Выведет: 8

Параметры по умолчанию

Вы можете задать значения параметров по умолчанию:
python
def greet(name, greeting="Привет"):
    return f"{greeting}, {name}!"

print(greet("Боб"))  # Выведет: Привет, Боб!
print(greet("Алиса", "Здравствуй"))  # Выведет: Здравствуй, Алиса!

Произвольное количество аргументов

Python позволяет функциям принимать произвольное количество аргументов:
python
def sum_all(*args):
    return sum(args)

print(sum_all(1, 2, 3, 4))  # Выведет: 10

Лямбда-функции

Лямбда-функции - это небольшие анонимные функции, которые могут иметь любое количество аргументов, но только одно выражение.
python
square = lambda x: x  2
print(square(5))  # Выведет: 25

# Использование лямбда-функции с встроенными функциями
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x  2, numbers))
print(squared_numbers)  # Выведет: [1, 4, 9, 16, 25]

Области видимости и глобальные переменные

Python использует области видимости для определения доступности переменных.
python
x = 10  # Глобальная переменная

def function():
    global x  # Объявляем, что хотим использовать глобальную переменную
    x = 20    # Изменяем глобальную переменную
    print(x)

function()
print(x)  # Выведет: 20
Функции - это основа модульного программирования. Они позволяют разбивать сложные задачи на более мелкие, управляемые части, что делает код более организованным и легким для понимания.

Работа со списками и словарями

Списки и словари - это мощные структуры данных в Python, которые позволяют эффективно хранить и обрабатывать коллекции элементов.

Списки

Списки - это упорядоченные коллекции элементов, которые могут быть разных типов.
python
# Создание списка
fruits = ["яблоко", "банан", "апельсин"]

# Добавление элемента
fruits.append("груша")

# Доступ к элементам
print(fruits[0])  # Выведет: яблоко

# Срезы
print(fruits[1:3])  # Выведет: ['банан', 'апельсин']

# Перебор элементов
for fruit in fruits:
    print(fruit)

# Списковое включение
squares = [x2 for x in range(5)]
print(squares)  # Выведет: [0, 1, 4, 9, 16]

Словари

Словари - это неупорядоченные коллекции пар ключ-значение.
python
# Создание словаря
person = {"name": "Иван", "age": 30, "city": "Москва"}

# Доступ к значениям
print(person["name"])  # Выведет: Иван

# Добавление новой пары ключ-значение
person["job"] = "программист"

# Перебор словаря
for key, value in person.items():
    print(f"{key}: {value}")

# Проверка наличия ключа
if "age" in person:
    print("Возраст указан")

Работа с файлами

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

Чтение файла

python
# Чтение всего файла
with open("example.txt", "r") as file:
    content = file.read()
    print(content)

# Чтение файла построчно
with open("example.txt", "r") as file:
    for line in file:
        print(line.strip())

Запись в файл

python
# Запись в файл
with open("output.txt", "w") as file:
    file.write("Привет, мир!")

# Добавление в конец файла
with open("output.txt", "a") as file:
    file.write("\nЭто новая строка.")
Использование конструкции `with` гарантирует, что файл будет правильно закрыт после завершения работы с ним.

Обработка исключений

Обработка исключений позволяет вашей программе элегантно справляться с ошибками и непредвиденными ситуациями.
python
try:
    number = int(input("Введите число: "))
    result = 10 / number
    print(f"Результат: {result}")
except ValueError:
    print("Вы ввели не число.")
except ZeroDivisionError:
    print("Деление на ноль недопустимо.")
except Exception as e:
    print(f"Произошла ошибка: {e}")
else:
    print("Операция выполнена успешно.")
finally:
    print("Этот блок выполняется всегда.")

Модули и библиотеки

Модули позволяют организовывать код и повторно использовать функциональность. Python имеет богатую стандартную библиотеку и тысячи сторонних пакетов.

Импорт модулей

python
# Импорт всего модуля
import math
print(math.pi)

# Импорт конкретной функции
from random import randint
print(randint(1, 10))

# Импорт с псевдонимом
import datetime as dt
print(dt.datetime.now())

Создание собственных модулей

Вы можете создавать собственные модули, просто сохраняя функции в отдельных файлах .py.
python
# В файле mymodule.py
def greet(name):
    return f"Привет, {name}!"

# В основном файле
import mymodule
print(mymodule.greet("Алиса"))

Объектно-ориентированное программирование в Python

ООП - это парадигма программирования, которая использует "объекты" для моделирования реальных или абстрактных понятий.

Определение класса

python
class Dog:
    def __init__(self, name):
        self.name = name

    def bark(self):
        return f"{self.name} говорит Гав!"

# Создание объекта
my_dog = Dog("Бобик")
print(my_dog.bark())  # Выведет: Бобик говорит Гав!

Наследование

python
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Cat(Animal):
    def speak(self):
        return f"{self.name} говорит Мяу!"

my_cat = Cat("Мурка")
print(my_cat.speak())  # Выведет: Мурка говорит Мяу!

Практические проекты для начинающих

Лучший способ изучить программирование - это практика. Вот несколько идей для проектов: 1. Консольный калькулятор 2. Игра "Угадай число" 3. Программа для ведения списка дел (To-Do List) 4. Простой веб-скрапер с использованием библиотеки requests 5. Анализатор текста (подсчет слов, букв и т.д.)

Ресурсы для дальнейшего изучения

1. Официальная документация Python (python.org) 2. Книга "Python Crash Course" by Eric Matthes 3. Онлайн-курсы на платформах Coursera, edX, Udemy 4. Сайт PyPI для изучения доступных пакетов 5. GitHub для изучения открытых проектов на Python

Заключение

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

python  

2599   0   13:58, 18th June, 2022


middleware которое будет возвращать ошибку если за последние n секунд было больше k запросов c одного ip адреса

Здравствуйте! Начал изучать Django, здесь встала задачка как реализовать миддлвер, что бы возвращал исключение если за последние n секунд было больше k запросов c одного ip адреса.

На сколько смог додуматься, код ниже:

class FilterIPMiddlewareCountTime:

    def __init__(self, get_request):
        self.get_request = get_request
        self._count_request = 3
        self._total = 0
        self._time_request = time.time()

    def __call__(self, response):

        answer_ips = ['127.0.0.1']
        ip = response.META.get("REMOTE_ADDR")

        if ip not in answer_ips:
            raise PermissionDenied()

        t1 = time.time()
        request = self.get_request(response)
        t2 = time.time()
        self._total += t2 - t1
        print('{: ^15}  {}'.format('TOTAL: ', self._total))
        print('{: ^15}  {}'.format('COUNT:', self._count_request))
        
        if self._count_request > self._total:
            self._total = 0
            raise PermissionDenied()
        return request

django   python  

2863   0   14:11, 16th March, 2022


codeignite. Посчитать count имея две таблицы.

Здравствуйте, подскажите пожалуйста, не могу разобраться. Имеется две таблицы: tblusers и tblfamily На страничке application/view/admin/manage_user.php я вывожу все данные из таблички tblusers, также я хочу вывести количесто (count) записей, которые: запись поля id из таблицы tblusers была равно записям поля id_user  таблицы tblfamily . Решить за меня не прошу, хотя бы натолкнуть. Понимаю, что надо в файле APPLICATION/models/manageusers_model.php делать запрос№ ЕЩе не дошло, как делать запросы в codeignite. Прикрепю эти две таблички, чтобы понятно было. 

 

codeignite   count   sql  

1383   1   20:56, 13th March, 2022