2026. július 29., szerda

Statisztikai adatfeldolgozó program

Ez a program egy egyszerű **statisztikai adatfeldolgozó**. Egy listában tárolt számokból kiszámítja:

* az **átlagot**,
* a **legnagyobb értéket (maximumot)**,
* és naplózza (kiírja) az eredményt.

Forrás;
----------------
from typing import List, Dict, Optional
import logging

# 1. Beállítjuk a naplózást a hibák és információk követésére
logging.basicConfig(level=logging.INFO)

class AdatFeldolgozo:
    """Egy erős és biztonságos osztály adatok feldolgozására."""

    def __init__(self, adatok: List[float]) -> None:
        self.adatok = adatok

    def atlag_szamitasa(self) -> Optional[float]:
        """Kiszámítja az adatok átlagát, kezeli a nullával való osztást."""
        if not self.adatok:
            logging.warning("Az adathalmaz üres, nem számolható átlag.")
            return None

        try:
            osszeg: float = sum(self.adatok)
            meret: int = len(self.adatok)
            eredmeny: float = osszeg / meret
            return eredmeny
        except ZeroDivisionError as e:
            logging.error(f"Matematikai hiba történt: {e}")
            return None

    def statisztika(self) -> Dict[str, Optional[float]]:
        """Visszaadja a legfontosabb statisztikai értékeket."""
        if not self.adatok:
            return {"maximum": None, "atlag": None}

        return {
            "maximum": max(self.adatok),
            "atlag": self.atlag_szamitasa()
        }

# Főprogram futtatása
if __name__ == "__main__":

    nyers_adatok: List[float] = [12.5, 42.1, 18.3, 99.0, 5.5]

    feldolgozo = AdatFeldolgozo(nyers_adatok)

    eredmeny = feldolgozo.statisztika()

    logging.info(f"Statisztikai adatok: {eredmeny}")
--------------
Magyarázat;

### Mit csinálnak az egyes részek?

#### 1. Modulok importálása

```python
from typing import List, Dict, Optional
import logging
```

* `typing` → típusmegjelölésekhez (`List`, `Dict`, `Optional`)
* `logging` → naplóüzenetek kiírására

---

#### 2. Naplózás beállítása

```python
logging.basicConfig(level=logging.INFO)
```

Ez azt jelenti, hogy az `INFO` és magasabb szintű üzenetek megjelennek.

---

#### 3. Az `AdatFeldolgozo` osztály

```python
class AdatFeldolgozo:
```

Ez az osztály tárolja és feldolgozza az adatokat.

---

### Konstruktor

```python
def __init__(self, adatok):
    self.adatok = adatok
```

Eltárolja a kapott számokat.

Például:

```python
[12.5, 42.1, 18.3, 99.0, 5.5]
```

---

### Átlag számítása

```python
def atlag_szamitasa(self):
```

Ha nincs adat:

```python
if not self.adatok:
```

akkor ezt írja ki:

```
WARNING: Az adathalmaz üres, nem számolható átlag.
```

és visszaad:

```python
None
```

Ha van adat:

```python
osszeg = sum(self.adatok)
```

```
12.5 + 42.1 + 18.3 + 99.0 + 5.5
= 177.4
```

```python
meret = len(self.adatok)
```

```
5
```

```python
eredmeny = osszeg / meret
```

```
177.4 / 5 = 35.48
```

---

### Statisztika készítése

```python
def statisztika(self):
```

Visszaad egy szótárat:

```python
{
    "maximum": max(self.adatok),
    "atlag": self.atlag_szamitasa()
}
```

A megadott adatoknál:

```python
{
    "maximum": 99.0,
    "atlag": 35.48
}
```

---

### Főprogram

```python
nyers_adatok = [12.5, 42.1, 18.3, 99.0, 5.5]
```

Létrehozza az adatokat.

Majd:

```python
feldolgozo = AdatFeldolgozo(nyers_adatok)
```

Ezután:

```python
eredmeny = feldolgozo.statisztika()
```

Végül:

```python
logging.info(...)
```

Kiírja:

```
INFO:root:Statisztikai adatok: {'maximum': 99.0, 'atlag': 35.48}
```

---

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

## Összefoglalva

A program:

1. eltárol egy számlistát,
2. kiszámolja az átlagot,
3. meghatározza a legnagyobb értéket,
4. egy szótárban visszaadja az eredményeket,
5. naplózza azokat a képernyőre.

Ez egy jól strukturált, objektumorientált példa, amely bemutatja az osztályok, a típusannotációk, a hibakezelés és a `logging` használatát. Továbbfejleszthető például minimum, medián, szórás vagy grafikonok készítésének támogatásával.

Nincsenek megjegyzések:

Megjegyzés küldése