# Je to na tema co jsme delali ve fyzice jen cast tridy a nevim jestli je to latka ale pokud ano tak tohle muze byt jako kontrola kdyz by na to byl trrrreba tesst
# Tady je celej kod
# Nakodoval jsem to já, není to ukradnutý
# Mělo by to fungovat, 1x jsem to zkoušel počítat ručně a přes program. Řučně to trvalo tak 100x dýl a ještě to nebylo přesný. A funguje to
# Asi to neni nic extre protoze nejsem 6tilety študent, ale účel to plní
# Dalsi projekty kdyztak na kubasobr.blogspot.com
import random
import time
import math
import os
def Zacatek():
ascii_art1 = """ .----------------. .----------------. .----------------. .----------------.
| .--------------. || .--------------. || .--------------. || .--------------. |
| | _______ | || | ____ | || | ____ ____ | || | ____ ____ | |
| | / ___ | | || | .' `. | || ||_ \ / _|| || ||_ _| |_ _| | |
| | | (__ \_| | || | / .--. \ | || | | \/ | | || | \ \ / / | |
| | '.___`-. | || | | | | | | || | | |\ /| | | || | \ \ / / | |
| | |`\____) | | || | \ `--' / | || | _| |_\/_| |_ | || | \ ' / | |
| | |_______.' | || | `.____.' | || ||_____||_____|| || | \_/ | |
| | | || | | || | | || | | |
| '--------------' || '--------------' || '--------------' || '--------------' |
'----------------' '----------------' '----------------' '----------------' """
print(ascii_art1)
ascii_art2 = """ _ _ _ ____ _
| | __ _| | ___ _| |__ / ___| ___ | |__ _ __
_ | |/ _` | |/ / | | | '_ \ \___ \ / _ \| '_ \| '__|
| |_| | (_| | <| |_| | |_) | ___) | (_) | |_) | |
\___/ \__,_|_|\_\\__,_|_.__/ |____/ \___/|_.__/|_|
"""
print(ascii_art2)
print("Vítejte u programu SOMV, který jsem vytvořil jako malý projekt do fyziky když jsem se nudil. SOMV stojí pro Směrodatná odchylka měření veličiny"+"\n"+"Program je určen jako pomůcka k měření. Program vám vypočítá SOMV a i Relativní odchylku aby jste věděli jak přesně jste měřili"+"\n"+"Program vytvoří i graf s vámi danými hodnotami"+"\n"+"Je to vše naprogramované přes python, jelikož to je jediný co umím vcelku, max základy html css a javascript."+"\n"+"\n"+"NÁVOD k použití:"+"\n"+"Program se vás bude ptát na měřené hodnoty a vy je bude zadávat ve STEJNÝCH jednotkách(v nové verzi možná vylepším)"+"\n"+"Jakmile zadáte všechny hodnoty co chcete tak program sám řekne co dál."+"\n"+"Autorem je Jakub Šobr Videnska 1.B, update ohlášeny předem na kubasobr.blogspot.cz")
print("")
print("START PROGRAMU")
random_cislo = random.randint(0,100)
start_otazka = int(input("Napište číslo "+str(random_cislo) +" pro start programu: "))
if start_otazka == random_cislo:
Informace_funkce()
else:
print("")
print("OZNÁMENÍ")
print("Bud jste zadali špatné číslo a nebo nastalo v programu k chybě")
print("Za pět sekund bude zapnuta začáteční funkce znovu.")
print("")
time.sleep(5)
Zacatek()
def Informace_funkce():
print("")
print("PROGRAM STARTUJE")
otazka_pocet_hodnot = int(input("INFORMACE 1 - Kolikrát jste provedli měření?: "))
otazka_jednotka = input("INFORMACE 2 - Zadejte jednotku v níž jste prováděli měření (cm,dm,m,litr apod): ")
tts = input("INFORMACE 3 - Chcete aby program výsledek zazněl jako text to speech? ano / ne: ")
def Hlavni_funkce(pocet_hodnot,jednotka):
print("")
aktualni_cislo = 1
hodnoty_list = []
index = 0
celkove = 0
for _ in range(pocet_hodnot):
hodnota = float(input("Zadejte hodnotu č."+str(aktualni_cislo)+" : "))
celkove += hodnota
hodnoty_list.insert(index, hodnota)
index +=1
aktualni_cislo +=1
ar_prumer = celkove/pocet_hodnot
def Casti(aritmeticky_prumer):
index_cteni = 0
soucet_casti = 0
for hodnota in hodnoty_list:
cast = (hodnota - aritmeticky_prumer) ** 2
soucet_casti += cast
index_cteni += 1
# Odmocní celkový součet
citatel = soucet_casti ** 0.5
jmenovatel = pocet_hodnot *(pocet_hodnot-1)
odchylka = citatel /jmenovatel
minus_interval = aritmeticky_prumer-odchylka
plus_interval = aritmeticky_prumer+odchylka
relativni_odchylka = odchylka/aritmeticky_prumer
# Rounding
round_odchylka = round(odchylka,3)
round_minus_interval = round(minus_interval,3)
round_plus_interval = round(plus_interval, 3)
round_relativni_odchylka = round(relativni_odchylka, 3)
# Uprava pro tts
uprava_round_odchylka = str(round_odchylka).replace('.', ',')
uprava_round_minus_interval = str(round_minus_interval).replace('.', ',')
uprava_round_plus_interval = str(round_plus_interval).replace('.', ',')
uprava_round_relativni_odchylka = str(round_relativni_odchylka).replace('.', ',')
if odchylka > 0.5:
text = ("Systém odhalil nepřesné měření! Odchylka je +- " + str(round_odchylka) + str(
jednotka) + " Reálná hodnota je někde mezi " + str(round_minus_interval) + " a " + str(
round_plus_interval) + ". Relativní odchylka je " + str(
round_relativni_odchylka) + " Děkujeme za použití programu.")
presne_hodnoty = ("Odchylka = "+str(odchylka)+"\n"+"Interval = od "+str(minus_interval)+" po "+str(plus_interval)+"\n"+"Relativní odchylka = "+str(relativni_odchylka))
print(text)
presne_ot = int(input("Chcete vidět přesné hodnoty(1) nebo stačí obecnější?(2): "))
if presne_ot == 1:
print(presne_hodnoty)
else:
text = ("Měření je v pořádku! Odchylka je +- " + str(round_odchylka) + str(
jednotka) + " Reálná hodnota je někde mezi " + str(round_minus_interval) + " a " + str(
round_plus_interval) + ". Relativní odchylka je " + str(
round_relativni_odchylka) + " Děkujeme za použití programu.")
presne_hodnoty = ("Odchylka = "+str(odchylka)+"\n"+"Interval = od "+str(minus_interval)+" po "+str(plus_interval)+"\n"+"Relativní odchylka = "+str(relativni_odchylka))
print(text)
presne_ot = int(input("Chcete vidět přesné hodnoty(1) nebo stačí obecnější?(2): "))
if presne_ot == 1:
print(presne_hodnoty)
def Tts():
# User Inteface
if odchylka > 1:
text = ("Systém odhalil nepřesné měření! Odchylka je +- " + str(uprava_round_odchylka) + str(
jednotka) + " Reálná hodnota je někde mezi " + str(uprava_round_minus_interval) + " a " + str(
uprava_round_plus_interval) + ". Relativní odchylka je " + str(
uprava_round_relativni_odchylka) + " Děkujeme za použití programu.")
print(text)
else:
text = ("Měření je v pořádku! Odchylka je +- " + str(uprava_round_odchylka) + str(
jednotka) + " Reálná hodnota je někde mezi " + str(uprava_round_minus_interval) + " a " + str(
uprava_round_plus_interval) + ". Relativní odchylka je " + str(
uprava_round_relativni_odchylka) + " Děkujeme za použití programu.")
print(text)
from gtts import gTTS
import os
# Text, který chcete převést na hlas
if odchylka > 1:
text = "Systém odhalil nepřesné měření! Odchylka je +-" + str(round_odchylka) + " " + str(
jednotka) + "Reálná hodnota je někde mezi " + str(round_minus_interval) + " a " + str(
round_plus_interval) + ". Relativní odchylka je " + str(
round_relativni_odchylka) + "Děkujeme za použití programu."
else:
text = "Měření je v pořádku! Odchylka je +-" + str(round_odchylka) + " " + str(
jednotka) + "Reálná hodnota je někde mezi " + str(round_minus_interval) + " a " + str(
round_plus_interval) + ". Relativní odchylka je " + str(
round_relativni_odchylka) + "Děkujeme za použití programu."
# Vytvoření instance gTTS s textem a nastavením jazyka na češtinu
tts = gTTS(text, lang='cs')
# Uložení hlasového souboru na disk
tts.save("nahravka.mp3")
# Přehrání hlasového souboru (vyžaduje externí přehrávač)
os.system("nahravka.mp3")
def graf_menu():
text = """ __
__ _ _ __ __ _ / _|
/ _` | '__/ _` | |_
| (_| | | | (_| | _|
\__, |_| \__,_|_|
|___/ """
print(text)
otazka = input("Chcete zobrazit hodnoty ve grafu? ano / ne: ")
if otazka == "ano":
graf()
else:
print("Děkujeme za použití programu. Program se vypne za 10 sekund")
time.sleep(10)
def graf():
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
import numpy as np
#hodnoty_list = [15, 18, 12, 25, 14]
jednotka = "cm"
poradi = list(range(1, pocet_hodnot + 1)) # Od 1 do pocet_hodnot
# Příprava dat
x = poradi
y = hodnoty_list
# Vytvoření čárového grafu
plt.plot(x, y, label='Vámi změřené hodnoty', color='b')
# Přidání první horizontální čáry na hodnotu 16 s červenou barvou
plt.axhline(y=minus_interval, color='r', linestyle='-.', label='Mínusový interval')
# Přidání druhé horizontální čáry na hodnotu 22 s červenou barvou
plt.axhline(y=plus_interval, color='r', linestyle='-.', label='Plusový interval')
# Přidání tučné zelené čáry na hodnotu 20
plt.axhline(y=aritmeticky_prumer, color='g', linestyle='--', linewidth=3, label='Aritmetický průměr')
# Vyplnění prostoru mezi červenými čarami
plt.fill_between(x, minus_interval, plus_interval, color='yellow', alpha=0.5, label='Interval odchylky')
# Nastavení popisků os
plt.ylabel('Hodnoty v ' + jednotka)
plt.xlabel('Pořadí')
# Zobrazení legendy
plt.legend()
# Zobrazení grafu
plt.show()
if tts == "ano":
Tts()
graf_menu()
else:
graf_menu()
Casti(ar_prumer)
Hlavni_funkce(otazka_pocet_hodnot,otazka_jednotka)
Zacatek()
# made by jkob sobr 23 original