Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam

Дорогие кодеры, а также геймеры-кодеры, прошу вас немного поразмыслить над такой задачей как раскрутка игровых серверов в лиценизонной версии игры Counter-Strike 1.6 (Steam) через создание фейковых серверов (имитация серверов) в большом количестве. Суть заключается в том, что игрок заходит в игру, открывает поиск серверов в интернете (в игре) и в списке серверов появляются фейковые сервера, при заходе на них игрока перенаправляет на основной сервер (реальный).

Раньше была такая программа как HLserver (загуглите, 2009-2012 гг.), сейчас она, верояно, уже не работает, так как CS 1.6 обновляли, хоть и немного. Дело в том, что если сейчас зайти в лицензионную версию игры (через Steam), то в поиске серверов вы увидите много серверов, но многие сервера - фейки, при подключении к ним перенаправляет на другой сервер. Отсюда сделал вывод, что сейчас создание такого софта возможно и кто-то уже это сделал и пользуется этим. 

В связи с чем вопрос неразбирающегося в технических тонкостях человека - возможно ли сейчас написать такой софт, насколько сложно это сделать? 



Очень долго работает Update запрос Oracle

Подскажите как можно ускорить апдейт. На данный момент работает 12+ часов. В таблице TABLE и TABLE_NEW примерно по 1 млн записей, что не так много.
Разработчик, который делал код ушел в закат, наверное торопился и сделал апдейт не оптимальным.

UPDATE TABLE ix 
    SET (PLAN,Name)=(SELECT DISTINCT s.PLAN, s.name
                     FROM TABLE_NEW s
                     WHERE ix.DBKEY=s.DBKEY AND ix.STORE=s.STORE AND ix.PLAN<>s.PLAN)
    WHERE ix.DBKEY IN(SELECT ix.dbkey 
                     FROM TABLE ix, (SELECT DISTINCT DBKEY, STORE, PLAN, name FROM TABLE_NEW) s 
                     WHERE ix.DBKEY=s.DBKEY AND ix.STORE=s.STORE AND ix.PLAN<>s.PLAN);

Oracle   update  

914   0   09:58, 27th January, 2025


не могу запустить сервер на tomcat HTTP Status 404 – Not Found

Изучаю Spring пытаюсь создать веб приложение, сделал все как надо, (делал с помощью maven webapp, создал файлы, их содержание было многократно проверено мною и нейросеью, веё должно быть правильно) но подключил tomcat, настроил, вроде должен работать, однако HTTP Status 404 – Not Found и ничего не могу сделать

package org.example.rest;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@RestController
public class TestController {

    @GetMapping("/")
    public Date getDateTime() {
        return new Date();  // This will return the current date and time
    }
}
package org.example.rest.entity;


import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
@Table(name = "customers")

public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Integer id;
    private String firstname;
    private String lastname;
    private Integer age;

}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           https://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           https://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/tx
           https://www.springframework.org/schema/tx/spring-tx.xsd
           http://www.springframework.org/schema/mvc
           https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- Component scanning for annotated classes -->
    <context:component-scan base-package="org.example.rest, org.example.rest.entity"/>

    <!-- Enable Spring MVC annotations -->
    <mvc:annotation-driven/>

    <!-- DataSource configuration -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useSSL=false"/>
        <property name="user" value="root"/>
        <property name="password" value="gibraltar"/>
    </bean>

    <!-- Hibernate SessionFactory configuration -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan" value="org.example.rest.entity"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>
    <!-- Hibernate Transaction Manager -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <!-- Enable annotation-driven transactions -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

 

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <display-name>spring</display-name>

  <absolute-ordering/>

  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>vebAppFirst</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>vebAppFirst Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.36</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>6.2.2</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>6.2.2</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>6.2.2</version>
    </dependency>

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>6.2.18.Final</version>
    </dependency>

    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.4</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.33</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.15.2</version>
    </dependency>

    <!-- Update the javax.servlet-api dependency to jakarta.servlet-api -->
    <dependency>
      <groupId>jakarta.servlet</groupId>
      <artifactId>jakarta.servlet-api</artifactId>
      <version>6.0.0</version> <!-- You can adjust this version if needed -->
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>5.10.0</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>vebAppFirst</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
          <source>17</source>
          <target>17</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Spring   tomcat   maven  

905   0   18:02, 21st January, 2025


Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?

Добрый день. Нуждаемся в специалисте который сможет ипортировать базы номеров с формата ексель в телефон, а так же который смог бы заниматься массовой рассылкой сообщений в вотсап уже имеющейся базе клиентов. Заранее благодарна.



Разработка мобильной кроссплатформенной военной игры

У меня есть код для разработки игры. Я собираюсь ее делать на C# с использованием движка Unity. Предусмотрел все возможные обстоятельства работы игры.

Мне нужна помощь в плане работы с кодом в Unity посредством Visual Studio 2022 потому, что нам сказали использовать эту интегрированную среду разработки, а как все настроить приходится искать в Интернете. Показываю свой код в надежде, что кто-то ответит и подскажет, как его улучшить. Если кого-нибудь заинтересует данная игра, приглашаю к сотрудничеству.

Я настроил Visual Studio 2022 следующим образом: добавил модуль Unity, в Unity Hub создал проект своей игры (название проекта на английском), потом настроил Unity и Visual Studio, чтобы во втором был виден справочник первого. Но у меня не получается настроить Visual Studio под редактирование кодов скриптов Unity.

Еще я не знаю, как сделать логотип и красивые переходы в моей игре.

Еще мне нужна помощь в составлении кода для сюжета игры.

СРОЧНО НУЖЕН ОТВЕТ!!!!!!!!!!!!!!!!!!!!!!!!

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine.Networking;

public class GameStartManager : MonoBehaviour
{
    public GameObject splashScreen;
    public GameObject startScreen;
    public GameObject mainMenu;
    public GameObject settingsMenu;
    public GameObject creditsScreen;
    public GameObject loadingScreen;
    public Slider loadingBar;

    void Start()
    {
        StartCoroutine(ShowSplashScreen());
    }

    IEnumerator ShowSplashScreen()
    {
        splashScreen.SetActive(true);
        startScreen.SetActive(false);
        mainMenu.SetActive(false);
        settingsMenu.SetActive(false);
        creditsScreen.SetActive(false);
        loadingScreen.SetActive(false);

        yield return new WaitForSeconds(3f); // Показать стартовый экран через 3 секунды

        ShowStartScreen();
    }

    public void ShowStartScreen()
    {
        splashScreen.SetActive(false);
        startScreen.SetActive(true);
    }

    public async void StartGame()
    {
        startScreen.SetActive(false);
        mainMenu.SetActive(false);
        settingsMenu.SetActive(false);
        creditsScreen.SetActive(false);
        loadingScreen.SetActive(true);

        await LoadGameSceneAsync();
    }

    private async Task LoadGameSceneAsync()
    {
        AsyncOperation operation = SceneManager.LoadSceneAsync("MainGameScene");
        while (!operation.isDone)
        {
            float progress = Mathf.Clamp01(operation.progress / 0.9f);
            loadingBar.value = progress;
            await Task.Yield();
        }
    }

    public void ShowMainMenu()
    {
        startScreen.SetActive(false);
        mainMenu.SetActive(true);
    }

    public void ShowSettingsMenu()
    {
        mainMenu.SetActive(false);
        settingsMenu.SetActive(true);
    }

    public void ShowCreditsScreen()
    {
        mainMenu.SetActive(false);
        creditsScreen.SetActive(true);
    }

    public void ExitGame()
    {
        Application.Quit();
    }
}

public class UIManager : MonoBehaviour
{
    public Button startButton;
    public Button settingsButton;
    public Button creditsButton;
    public Button exitButton;
    public Button backButton;
    public GameStartManager gameStartManager;

    void Start()
    {
        startButton.onClick.AddListener(gameStartManager.StartGame);
        settingsButton.onClick.AddListener(gameStartManager.ShowSettingsMenu);
        creditsButton.onClick.AddListener(gameStartManager.ShowCreditsScreen);
        exitButton.onClick.AddListener(gameStartManager.ExitGame);
        backButton.onClick.AddListener(gameStartManager.ShowMainMenu);
    }
}

public class ControlSchemeManager : MonoBehaviour
{
    public GameObject pcControls;
    public GameObject mobileControls;
    public GameObject consoleControls;

    void Start()
    {
        DetectDeviceAndSetControls();
    }

    void DetectDeviceAndSetControls()
    {
#if UNITY_STANDALONE || UNITY_WEBGL
        SetPCControls();
#elif UNITY_IOS || UNITY_ANDROID
        SetMobileControls();
#elif UNITY_PS4 || UNITY_XBOXONE
        SetConsoleControls();
#else
        Debug.LogWarning("Unknown platform. Defaulting to PC controls.");
        SetPCControls();
#endif
    }

    void SetPCControls()
    {
        pcControls.SetActive(true);
        mobileControls.SetActive(false);
        consoleControls.SetActive(false);
    }

    void SetMobileControls()
    {
        pcControls.SetActive(false);
        mobileControls.SetActive(true);
        consoleControls.SetActive(false);
    }

    void SetConsoleControls()
    {
        pcControls.SetActive(false);
        mobileControls.SetActive(false);
        consoleControls.SetActive(true);
    }
}

public class PlayerController : MonoBehaviour
{
    public ControlSchemeManager controlSchemeManager;

    void Update()
    {
        if (controlSchemeManager.pcControls.activeSelf)
        {
            HandlePCControls();
        }
        else if (controlSchemeManager.mobileControls.activeSelf)
        {
            HandleMobileControls();
        }
        else if (controlSchemeManager.consoleControls.activeSelf)
        {
            HandleConsoleControls();
        }
    }

    void HandlePCControls()
    {
        // Реализация управления для ПК
    }

    void HandleMobileControls()
    {
        // Реализация управления для мобильных устройств
    }

    void HandleConsoleControls()
    {
        // Реализация управления для консолей
    }
}

public class LanguageManager : MonoBehaviour
{
    public enum Language
    {
        English, Russian, Spanish, French, German, Chinese
    }

    public Language currentLanguage;

    private Dictionary<string, string> englishTexts = new Dictionary<string, string>
    {
        {"startButton", "Start"},
        {"settingsButton", "Settings"},
        {"exitButton", "Exit"},
        {"mainMenu", "Main Menu"},
        {"optionsMenu", "Options"}
    };

    private Dictionary<string, string> currentTexts;

    void Start()
    {
        SetLanguage(currentLanguage);
    }

    public void SetLanguage(Language language)
    {
        currentLanguage = language;
        currentTexts = new Dictionary<string, string>();

        foreach (var item in englishTexts)
        {
            StartCoroutine(TranslateText(item.Key, item.Value, language));
        }
    }

    private IEnumerator TranslateText(string key, string text, Language language)
    {
        string targetLanguage = GetLanguageCode(language);
        string url = $"https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl={targetLanguage}&dt=t&q={UnityWebRequest.EscapeURL(text)}";
        UnityWebRequest request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();

        if (request.result == UnityWebRequest.Result.Success)
        {
            string translatedText = ParseTranslation(request.downloadHandler.text);
            currentTexts[key] = translatedText;
            UpdateUI();
        }
        else
        {
            Debug.LogError("Translation failed: " + request.error);
        }
    }

    private string GetLanguageCode(Language language)
    {
        switch (language)
        {
            case Language.Russian: return "ru";
            case Language.Spanish: return "es";
            case Language.French: return "fr";
            case Language.German: return "de";
            case Language.Chinese: return "zh";
            default: return "en";
        }
    }

    private string ParseTranslation(string json)
    {
        return json.Split('"')[1];
    }

    private void UpdateUI()
    {
        GameObject.Find("StartButton").GetComponentInChildren<Text>().text = currentTexts["startButton"];
        GameObject.Find("SettingsButton").GetComponentInChildren<Text>().text = currentTexts["settingsButton"];
        GameObject.Find("ExitButton").GetComponentInChildren<Text>().text = currentTexts["exitButton"];
        GameObject.Find("MainMenu").GetComponentInChildren<Text>().text = currentTexts["mainMenu"];
        GameObject.Find("OptionsMenu").GetComponentInChildren<Text>().text = currentTexts["optionsMenu"];
    }
}

public class DialogueManager : MonoBehaviour
{
    public Text dialogueText;
    public AudioSource audioSource;
    public AudioClip[] dialogueClips;
    private Queue<string> sentences;
    private Queue<AudioClip> audioClips;

    void Start()
    {
        sentences = new Queue<string>();
        audioClips = new Queue<AudioClip>();
    }

    public void StartDialogue(Dialogue dialogue)
    {
        sentences.Clear();
        audioClips.Clear();

        foreach (string sentence in dialogue.sentences)
        {
            sentences.Enqueue(sentence);
        }

        foreach (AudioClip clip in dialogue.dialogueClips)
        {
            audioClips.Enqueue(clip);
        }

        DisplayNextSentence();
    }

    public void DisplayNextSentence()
    {
        if (sentences.Count == 0)
        {
            EndDialogue();
            return;
        }

        string sentence = sentences.Dequeue();
        AudioClip clip = audioClips.Dequeue();

        StopAllCoroutines();
        StartCoroutine(TypeSentence(sentence));
        PlayAudioClip(clip);
    }

    IEnumerator TypeSentence(string sentence)
    {
        dialogueText.text = "";
        foreach (char letter in sentence.ToCharArray())
        {
            dialogueText.text += letter;
            yield return null;
        }
    }

    void PlayAudioClip(AudioClip clip)
    {
        audioSource.Stop();
        audioSource.clip = clip;
        audioSource.Play();
    }

    void EndDialogue()
    {
        Debug.Log("End of conversation.");
    }
}

[System.Serializable]
public class Dialogue
{
    public string[] sentences;
    public AudioClip[] dialogueClips;
}

public class DialogueTrigger : MonoBehaviour
{
    public Dialogue dialogue;
    private DialogueManager dialogueManager;

    void Start()
    {
        dialogueManager = FindObjectOfType<DialogueManager>();
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            dialogueManager.StartDialogue(dialogue);
        }
    }
}

public class Character
{
    public string name;
    public string role;
    public int health;
    public int strength;
    public int intelligence;

    public Character(string name, string role, int health, int strength, int intelligence)
    {
        this.name = name;
        this.role = role;
        this.health = health;
        this.strength = strength;
        this.intelligence = intelligence;
    }
}

public class Tank
{
    public string model;
    public int armor;
    public int firepower;
    public int speed;

    public Tank(string model, int armor, int firepower, int speed)
    {
        this.model = model;
        this.armor = armor;
        this.firepower = firepower;
        this.speed = speed;
    }
}

public class Mission
{
    public string title;
    public string description;
    public List<Character> charactersInvolved;
    public List<Tank> tanksInvolved;
    public string reward;

    public Mission(string title, string description, List<Character> charactersInvolved, List<Tank> tanksInvolved, string reward)
    {
        this.title = title;
        this.description = description;
        this.charactersInvolved = charactersInvolved;
        this.tanksInvolved = tanksInvolved;
        this.reward = reward;
    }
}

public class CurrencyManager : MonoBehaviour
{
    public int playerCurrency = 1000; // Начальная валюта игрока

    private Dictionary<string, int> itemPrices = new Dictionary<string, int>();

    void Start()
    {
        itemPrices["HealthPotion"] = 100;
        itemPrices["StrengthPotion"] = 150;
        itemPrices["IntelligencePotion"] = 200;
    }

    public bool PurchaseItem(string itemName)
    {
        if (itemPrices.ContainsKey(itemName) && playerCurrency >= itemPrices[itemName])
        {
            playerCurrency -= itemPrices[itemName];
            AdjustPrices(itemName);
            return true;
        }
        return false;
    }

    private void AdjustPrices(string purchasedItem)
    {
        // Увеличить цену купленного предмета
        itemPrices[purchasedItem] = Mathf.RoundToInt(itemPrices[purchasedItem] * 1.1f);

        // Уменьшить цену остальных предметов
        foreach (var item in itemPrices.Keys)
        {
            if (item != purchasedItem)
            {
                itemPrices[item] = Mathf.RoundToInt(itemPrices[item] * 0.9f);
            }
        }
    }

    public int GetItemPrice(string itemName)
    {
        if (itemPrices.ContainsKey(itemName))
        {
            return itemPrices[itemName];
        }
        return -1;
    }
}

// Пример создания персонажей
Character ivan = new Character("Иван Смирнов", "Командир", 100, 80, 70);
Character anna = new Character("Анна Кузнецова", "Стратег", 90, 60, 90);
Character mikhail = new Character("Михаил Лебедев", "Инженер", 85, 70, 80);
Character elena = new Character("Елена Ростова", "Разведчик", 80, 75, 85);
Character nikolai = new Character("Николай Волков", "Противник", 95, 85, 60);

// Пример создания танков
Tank t34 = new Tank("Т-34", 100, 90, 60);
Tank tiger = new Tank("Тигр", 120, 100, 50);
Tank proriv = new Tank("Прорыв", 130, 110, 55);

List<Character> mission1Characters = new List<Character> { ivan, anna, mikhail };
List<Tank> mission1Tanks = new List<Tank> { t34 };

Mission mission1 = new Mission("Операция 'Смерть нацизму!'", "Уничтожить вражеский штаб.", mission1Characters, mission1Tanks, "Медаль за отвагу");

List<Character> mission2Characters = new List<Character> { elena, nikolai };
List<Tank> mission2Tanks = new List<Tank> { tiger };

Mission mission2 = new Mission("Разведка боем", "Собрать информацию о вражеских позициях.", mission2Characters, mission2Tanks, "Повышение в звании");

List<Character> mission3Characters = new List<Character> { ivan, elena, nikolai };
List<Tank> mission3Tanks = new List<Tank> { t34, tiger, proriv };

Mission mission3 = new Mission("Прорыв", "Прорвать оборону противника и захватить ключевые позиции.", mission3Characters, mission3Tanks, "Орден Мужества");

List<Character> mission4Characters = new List<Character> { anna, mikhail };
List<Tank> mission4Tanks = new List<Tank> { t34 };

Mission mission4 = new Mission("Оборона рубежа", "Защитить стратегически важный рубеж от наступающих сил противника.", mission4Characters, mission4Tanks, "Медаль за оборону");

List<Character> mission5Characters = new List<Character> { ivan, anna, elena };
List<Tank> mission5Tanks = new List<Tank> { tiger };

Mission mission5 = new Mission("Контратака", "Организовать контратаку и отбросить противника.", mission5Characters, mission5Tanks, "Медаль за храбрость");

List<Mission> missions = new List<Mission> { mission1, mission2, mission3, mission4, mission5 };

void StartMissions()
{
    foreach (Mission mission in missions)
    {
        Debug.Log("Начало миссии: " + mission.title);
        Debug.Log("Описание: " + mission.description);
        Debug.Log("Награда: " + mission.reward);
    }
}

Разработка   Игра   C#   Visual Studio 2022  

1724   0   17:57, 16th July, 2024


период по дням

Здравствуйте, подскажите пожалуйста, как прописать период по дням от заданной даты

Курс длится 14 дней, у которых прописаны услуги, но есть даты без услуг

нужно чтобы отображались все дни, в течении 14 дней  от начальной даты

Дата-переменная, дней у которых нет услуг соответственно нет в БД   

SELECT     
        (CASE ServedSet.IsServed
    WHEN 1 THEN Quantity
    END) as Sdel,
    (CASE ServedSet.IsServed
    WHEN 0 THEN Quantity
    END) as Nazn,    
    Code,
    Visit.Name AS Name5,
    CONVERT(VARCHAR(5), ServDate, 08) AS ServDate
     Quantity,
    Additional,
    Category,
    Comment,
    Visit.OpenDate as OpenDate,
    Visit.CloseDate as CloseDate,
     EmployeeSet.Name as Name11,
     Price   
FROM
    ServedSet
        INNER JOIN
        (      SELECT 
                Name, 
                CONVERT (date, OpenDate) as OpenDate,
                CONVERT (date, CloseDate) as CloseDate,
                VisitsSet.Id AS VisitID,
                Birth,
                Clients_Category as Category

            FROM
                VisitsSet

                JOIN ClientsSet
                    ON Visits_Clients = ClientsSet.Id
        ) AS Visit
            ON ServedSet.Served_Visits = Visit.VisitID

    INNER JOIN
        ServicesSet
            ON Served_Services = ServicesSet.Id
    
    INNER JOIN
        EmployeeSet
            ON Served_Employee = EmployeeSet.Id
            WHERE
        IsServed in (0,1) 
        AND
        OpenDate = @Zaezd AND      
         Visit.Name = (@Client)    AND 
    ORDER BY ServDate

sql  

3955   0   10:44, 25th October, 2023


Пишу скрипты для BAS только на запросах


Скрипт для накрутки рефералов в Android-приложении

Скрипт зарегистрировал 49000 аккаунтов на сайте менее, чем за 2 часа.

Пишу BAS-скрипты на запросах для несложных сайтов и Android-приложений.​


Качественная разработка проектов для автоматизации действий в браузере, приложениях и др. парсеры, регеры, грабберы, чекеры, спамеры и. т. д.
Загрузка файлов, фотографий на сайты, хостинги, фотостоки.
Абуз Окея, Пятерочки, Магнита, Ашана, Магнита, аирдропов и др. акций
Накрутка банеров, рекламных объявлений, сокращённых ссылок.
Чекер SMS и капча-сервисов, европейских и американских банков, других форумов, интернет-магазинов, где нужно подобрать пароль.
- Регистраторы. Боты для регистрации на различных сайтах (фрихостинги, форумы, почтовые сервисы, соцсети, дедики и т.д). Создание аккаунтов в промышленных масштабах (с автоматическим распознаванием капчи и вводом подтверждения кода из SMS).

- Постеры. Боты для постинга (постинг на доски объявлений, наполнение сайтов контентом, загрузка видео, картинок, размещение комментариев и. т.д ).

- Парсеры. Боты для сбора, отслеживания и анализа информации с различных интернет ресурсов в автоматическом режиме.

- Боты для социальных сетей (программы для smm на заказ). Накрутка лайков, приглашение в группы, парсинг пользователей по критериям, отправка личных сообщений, наполнение групп и. т.п.

Автоматизировать можно вообще все, что вы делаете вручную в браузере.
Поддержка:
- многопоточность
- прокси HTTPs / SOCKS5
- генерация отпечатков браузера
- генерация имени, фамилии и других данных
- спинтакс - генератор уникального текста, пример: {Привет|Здравствуй|Добрый день}
- уникализация изображений
- подгрузка UserAgent и других заголовков
- интеграция по API с SMS сервисами (сервисы распознавания капчи)
- интеграция по API с другими сервисами и сайтами
- оповещения в Telegram
- другие задачи связанные со входами в аккаунт и выполнением желаемых действий
- и многое другое
Работаю на честных условиях без предоплаты. Для очень простых сайтов - напишу скрипт бесплатно!

Для написания бота, нужен сайт и желательно видео с порядком действий, чтобы я эти действия мог прописать в боте, но если на сайте есть Cloudflare , то на запросах (POST/GET) не выйдет написать бота, на эмуляции не пишу(медленно слишком).

По всем вопросам пишите: Telegram ༺Leͥgeͣnͫd༻ ᴳᵒᵈ или T_Condor

Я НЕ пишу скрипты под десктопные приложения.
Я НЕ пишу ботов для Telegram.
Я НЕ пишу чекеры для СНГ банков.
Я НЕ пишу скрипты для сайтов, на которых присутствует Cloudflare


Скрипт скачивает картинки-мемы в папку с сайта (в итоге скачано более 41000 мемов)


Сокращатель ссылок bit.ly. Создание множества редиректов.

bas   скрипт  

3720   0   02:42, 16th September, 2023


Некорректный скрипт для закрытия блока

Здравствуйте! Подскажите, пожалуйста, как правильно прописать скрипт для кнопки закрытия попап-окна в данном коде?
Сейчас при раскрытии окна не вылезает крестик закрытия под назначенным классом .close-wheel, так что закрыть этот блок невозможно и выйти обратно на сайт нельзя.
За "крестик" отвечает участок кода в самом низу под //Скрыть блок
Что и где здесь не так?
 

/*Общий Контейнер*/
.wheel_wrp {
    width: inherit;
    box-sizing: border-box;
    box-shadow: 0 0 0 10px #ffffff, 0 0 15px 3px #ababab;
    position: relative;
    overflow: hidden;
    border-radius: 50%;
}
/*Ось колеса в центре*/
.wheel_wrp:after {
    content: "";
    width: 35px;
    height: 35px;
    border-radius: 50%;
    background-color: #fff;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}
/*Оформление сектора*/
.wheel_sector{
    width: 0px;
    height: 0px;
    border-style: solid;
    position: absolute;
    top: 0;
    display: flex;
    justify-content: center;
    align-items: center;
}
/*Оформление разделительных линий*/
.wheel_line {
    background-color: #fff; /*Цвет линии*/
    transform: rotate(0deg);
    height: 4px;
    position: absolute;
    z-index: 99;
}
/*Оформление текста*/
.wheel_textcont {
    position: absolute;
    top: 0;
    z-index: 99999;
    display: flex;
    flex-direction: column-reverse;
    justify-content: flex-end;
    align-items: center;
    font-family: 'Gilroy',Arial,sans-serif;
    font-weight: 600;
    color: #000;
    font-size: 16px;
    line-height: 1.2;
    text-align: center;
}
.wheel_textcont div {
    transform: rotate(-90deg);
    margin-top: 35px;
    width: 150px;
}
/*Иконка*/
.wheel_textcont img {
    width: 35px;
    transform: rotate(-90deg);
    margin-top: 15px;
}
/*Адаптив текст + иконка*/
@media screen and (max-width:640px){
.wheel_textcont div {
    transform: rotate(-90deg);
    margin-top: 35px;
    width: 120px;
    font-size: 13px;
    line-height: 1.2;
    text-align: center
}    
.wheel_textcont img {
    width: 15px;
    margin-top: 15px;
}
}
@media screen and (max-width:480px){
.wheel_textcont img {
    width: 25px;
    margin-top: 10px;
}
}
.spin_wheel , .open-wheel , .close-wheel{ cursor:pointer}
.spin_wheel {  transition: all 0.2s linear}
.spin_wheel:hover {filter: sepia(1)}
.form_noactive{
    opacity:0.4;
    pointer-events:none;
}
.wheel_form .t-input-subtitle,
.wheel_form input.t-input{
    text-align: center;
}
/*Показать блок*/
.wheel-pos{
    position:fixed;
    width:100%;
    top:0;
    z-index:999;
}
.wheel-time{transition: transform 0.5s ease-in-out}
.slide-wheel{transform: translateX(-100%)}
.wheel-open-body{overflow:hidden}

 

<script>
$( document ).ready(function() {
    
//Список секторов : Цвет - Текст - ссылка на иконку    
let wheelOption = [
    ['#F59CA9' , '-1000 руб<br>любая услуга' , 'https://static.tildacdn.com/tild3732-3366-4666-b137-636632616132/901435.svg'],
    ['#BF75BA' , 'Массаж лица<br>в подарок' , 'https://static.tildacdn.com/tild6564-3832-4466-a662-333733396635/3189701.svg'],
    ['#F59CA9' , '-10%<br>любая услуга' , 'https://static.tildacdn.com/tild3364-3432-4437-b065-663536363437/4062925.svg'],
    ['#BF75BA' , 'Зона S<br>бесплатно' , 'https://static.tildacdn.com/tild6631-3132-4330-b130-643839333161/3989895.svg'],
    ['#F59CA9' , '-15%<br>любая зона' , 'https://static.tildacdn.com/tild3830-3439-4764-b831-313939346337/3095126.svg'],
    ['#BF75BA' , '30 мин<br>массажа' , 'https://static.tildacdn.com/tild6239-3933-4839-a666-303739343233/1404945.svg'],
    ['#F59CA9' , 'Карбокситерапия<br>для лица' , 'https://static.tildacdn.com/tild6666-3931-4639-b563-306134666563/2513205.svg'],
    ['#BF75BA' , '-50%<br>массажа' , 'https://static.tildacdn.com/tild3035-3230-4136-a235-316639663465/2333041.svg'],
    
];
 
 
    setTimeout(function(){
        window.dispatchEvent(new Event('resize'));
    }, 1000);
 
 
//Создаём элемент в Zero
let sector = wheelOption.length;
$('.wheelfortune').append('<div class="wheel_wrp"></div>');
$('.wheelfortune').html($('.wheel_wrp'));
let wheelRec = $('.wheelfortune').closest('.t-rec');
wheelRec.addClass('wheel-pos slide-wheel');
$('.close-wheel').fadeOut(200);
//Кол-во оборотов до остановки
let maxRevolution = 20;
//Время вращения
let spinTime = 5;
let spinFinish = false;
let resizeTxt;
let diameter;
 
//Создание колеса
function creatingWheel(){
//Диаметр колеса
diameter = $('.wheel_wrp').width();
//Угол сектора
let angle = Number(((360*Math.PI)/(sector*180)).toFixed(3));
//Катет сектора
let sectorHalfWidth = 0.5*diameter*Math.tan(angle/2);
//Заполняем сектора
for (let i=0; i<sector; i++){
$('.wheel_wrp').append('<div class="wheel_sector bg-sector'+i+'"></div><div class="wheel_line line-sector'+i+'"></div><div class="wheel_textcont text-sector'+i+'"><div></div><img src='+wheelOption[i][2]+'></div>');
//Формируем угол поворота и задаём цвет
$('.bg-sector'+i+'').css({
    "transform":"rotate("+(360*i/sector+90)+"deg)",
    "border-color": ""+wheelOption[i][0]+" transparent"
});
//Отрисовка границ сектора
$('.line-sector'+i+'').css({
    "width" : diameter/2+"px",
    "transform" : "rotate("+((360*i/sector)+(180*(sector-1))/sector)+"deg)",
    "height":"4px",
    "top" : "calc(50% - 2px)",
    "transform-origin" : diameter/2+"px 2px"
});
//Расставляем текст
$('.text-sector'+i+' div').html(wheelOption[i][1]);
// Формируем угол для текста
$('.text-sector'+i+'').css({"transform":"rotate("+(360*i/sector+90)+"deg)"});
};
//Форма сектора
$('.wheel_sector').css({
    "border-width": (diameter/2)+"px "+sectorHalfWidth+"px 0",
    "transform-origin": ""+sectorHalfWidth+"px "+(diameter/2)+"px",
    "left":((diameter/2)-sectorHalfWidth)+"px"
});
//Форма текста
$('.wheel_textcont').css({
    "width": (diameter/2)+"px",
    "height": (diameter/2)+"px",
    "transform-origin": ""+(diameter/4)+"px "+(diameter/2)+"px",
    "left":((diameter/2)-(diameter/4))+"px",
});
}; creatingWheel();
 
//Вращение колеса
function spinWheel(deg){
    $('.wheel_wrp').css({
       "height": diameter+"px",
       "transform" : "rotate("+deg+"deg)",
       "transition": "transform "+spinTime+"s cubic-bezier(0, 0.76, 0.5, 1.01)"
    });
};spinWheel(0);
//Случайный сектор    
function getRandomInRange(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
let finalSector = -1;
//При нажатии на кнопку вращения
$('.spin_wheel .tn-atom').click(function(e) {
    //Получаем финальный сектор 
    finalSector = getRandomInRange(0, sector-1);
    //Поворачиваем колесо
    spinWheel(maxRevolution*360 +  (finalSector*360)/sector );
    if (finalSector==0) finalSector=sector;
    //Выводим текст и картинку
    setTimeout(function(){
    let prizTxt = wheelOption[sector-finalSector][1];
    let prizeImg = wheelOption[sector-finalSector][2];
    spinFinish = true;
    finalStep('Ваш приз:<br>'+prizTxt, prizeImg);
    //Сохраняем результат
    let finalResult  = {
        text: prizTxt , 
        img: prizeImg ,
        sect:finalSector
    };
    localStorage.setItem('_code_w', JSON.stringify(finalResult));
    }, spinTime*1000);
});
  
//Проверка прошлого вращения
let prevResult = localStorage.getItem('_code_w');let prevList;
let prevSend = localStorage['_wh_send'];
if (prevResult) {
    prevList = JSON.parse(prevResult);
    spinFinish = true;
    $('.wheel_form button').attr('type','submit');
    let preffTxt = '<u>Ваш прошлый приз</u><br>';
    if(prevSend){
        preffTxt = '<u>Заявка уже была отправлена</u><br>';
        blockForm();
        spinFinish = false;
    };
    finalStep(preffTxt+prevList.text, prevList.img);
    spinWheel( (prevList.sect*360)/sector );
};
 
//Блокируем форму
function blockForm(){
if(!prevResult || prevSend ){
$('.wheel_form').addClass('form_noactive');
setTimeout(function(){$('.wheel_form button').attr('type','button')}, 3500);
};
};blockForm();
 
//Отправка формы
$('.wheel_form').delegate(".t-submit", "click", function(){
    setTimeout(function(){
        if ( $('.wheel_form .t-form').hasClass("js-send-form-success")){
            localStorage['_wh_send'] = 'sf';closeWheel();blockForm();
        };
    }, 1000);
});
 
//Отрисовка финального шага
function finalStep(prizTxt, prizeImg){
    //Удаляем кнопку
    $('.spin_wheel').remove();    
    $('.present_text .tn-atom').html(prizTxt);
    $('.present_img img').attr({
        'data-original':prizeImg,
        'src':prizeImg
    });
    //Открываем форму
   if(spinFinish){ 
    $('.wheel_form').removeClass('form_noactive');
    $('.wheel_form button').attr('type','submit');
   };
    //Заполняем поле
    setTimeout(function(){
        resizeTxt = prizTxt.replace(/<\/?[^>]+>/g,' ');
        $('input[name="sector_prize"]').val(resizeTxt);
    }, 2500);
};
//Изменение размера окна
$( window ).resize(function() {
clearTimeout(window.resizedFinished); 
window.resizedFinished = setTimeout(function(){
    
    setTimeout(function(){
        window.dispatchEvent(new Event('resize'));
    }, 1000);
    
    $('.wheel_wrp').empty();creatingWheel();
    if(finalSector>=0) { spinWheel( (finalSector*360)/sector )
    }else if (prevResult) {
        spinWheel( (prevList.sect*360)/sector );
    }else{spinWheel();};
    setTimeout(function(){    
        if(!spinFinish){  $('.wheel_form button').attr('type','button');
        }else{ $('input[name="sector_prize"]').val(resizeTxt) };
    }, 3500);    
}, 500);
});  
 
//Показать блок
setTimeout(function(){
  $('body').addClass('wheel-open-body');
  wheelRec.addClass('wheel-time').removeClass('slide-wheel');
  if(firstOpen && !prevResult ) {spinWheel(360); firstOpen = false};
  setTimeout(function(){
     $('.close-wheel').fadeIn(200);
  }, 550);
}, 30000);
 
//Скрыть блок
function closeWheel(){ $('body').removeClass('wheel-open-body');$('.close-wheel').fadeOut(0); wheelRec.addClass('slide-wheel');};
$('.close-wheel').click(function(){closeWheel();});
$(document).keydown(function(eventObject){
    if(eventObject.which == 27 && !wheelRec.hasClass('slide-wheel')){closeWheel()};
});
});
</script>

close   popup   script  

4613   0   18:33, 14th April, 2023


прокидывать 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