PROBLEMA Problema Python

Fr4ncesco03

Utente Attivo
162
9
OS
Arch Linux
Salve a tutti,

ringrazio chi risponderà. Mi sono cimentato da poco col Python e avevo in mente di creare una calcolatrice scientifica da terminale, visto che non ho ancora studiato librerie grafiche come Tkinter o QT. Quando sono andato a creare dei moduli e li ho importati, Python ha iniziato a restituirmi questo errore NameError:
Codice:
name 'mh' is not defined
quando inserisco come valore di "expression" la funzione coseno e seno, mentre con la tangente questo problema non si presenta. Non capisco da dove provenga questo errore: mi potete aiutare?

La root contiene il file calculator.py e una cartella chiamata src, dove ho messo alcuni metodi creati ad hoc da me.
Mi dispiace se il codice non è molto comprensibile ma sono alle prime armi e ho cercato di essere più elegante possibile.

Vi allego tutti i file:
calculator.py(file principale)
Codice:
import math
import src 
expression = "" 
number = ""
def math_costant(string):
    constant = {
        "pi": "math.pi",
        "e": "math.e"
    }
    for x in constant:
        if x in string:
            string = string.replace(x, str(constant[x]))
    return string
def math_function(string):
    function = {
        'trigonometric_function': {
            "cos": "math.cos",
            "sin": "math.sin",
            "tan": "math.tan"
        },
        'logarithmics_function':{
            "log2": "math.log2",
            "log10": "math.log10"
        }
    }
    for x in function:
        for el in function[str(x)]:
            if str(el) in string:
                if el == "cos" or el == "sin" or el == "tan":
                    string = src.angle_converter(src.remove_string(string, el), el)
                string = string.replace(el, function[x][el])
    return string
while expression != EOFError:
    expression = str(input(">> "))
    print(eval(math_function(math_costant(expression))))

angle_converter.py
Codice:
import math
def angle_converter(st, el):
    st = "math.radians(" + st + ")"
    if el == "cos()":
        st = "cos(" + str + ")"
    elif el == "sin()":
        st = "sin(" + st + ")"
    else:
        st = "tan(" + st + ")"
    return st
def remove_string(st, pattern):
    pattern = pattern + "()"
    for x in pattern:
        if x in st:
from .angle_converter import *

            st = st.replace(x, "")
        else:
            pass
    return st
if __name__ == "__main__":
    print("Programma sbagliato")
    exit()

__init__.py
Codice:
from .angle_converter import *
 

pabloski

Utente Èlite
2,868
916
Consiglio: lascia perdere Tkinter per le GUI. Vai di PySide/PyQt, wxPython o Gtk+.

Riguardo la domanda. Io non vedo nessun mh in quei listati. Da dove esce esattamente?
 
  • Mi piace
Reazioni: fabio93

Fr4ncesco03

Utente Attivo
162
9
OS
Arch Linux
Consiglio: lascia perdere Tkinter per le GUI. Vai di PySide/PyQt, wxPython o Gtk+.

Riguardo la domanda. Io non vedo nessun mh in quei listati. Da dove esce esattamente?

Riguardo alle librerie, come ti ho detto, non ho alcuna esperienza, quindi di ringrazio per i consigli :ok:. Riguardo alla domanda, non capisco proprio quale sia il problema, poiché anche riguardando il modulo sugli angoli, il risultato restituito al termine della funzione comunque dovrebbe avere "cos", "sin" e "tan"; poi al risultato restituito dalla funzione verrà assegnato il valore del risultato con "cos", "sin" e "tan" rimpiazzati da "math.cos", "math.sin" o "math.tan" (a seconda della presenza o meno di "cos", "sin", "tan").

Visto che al momento sto studiando Python guardando documentazioni e altri materiali che trovo, "sfrutto" questa occasione per chiederti se tu conoscessi un buon libro su Python
 

pabloski

Utente Èlite
2,868
916
Riguardo alla domanda, non capisco proprio quale sia il problema, poiché anche riguardando il modulo sugli angoli, il risultato restituito al termine della funzione comunque dovrebbe avere "cos", "sin" e "tan"; poi al risultato restituito dalla funzione verrà assegnato il valore del risultato con "cos", "sin" e "tan" rimpiazzati da "math.cos", "math.sin" o "math.tan" (a seconda della presenza o meno di "cos", "sin", "tan").

No, ma il problema è da dove esce questo errore

Codice:
name 'mh' is not defined

Quel mh non è specificato da nessuna parte in quei listati. Il log esatto e completo dell'errore che Python ti dà, cosa dice?

Visto che al momento sto studiando Python guardando documentazioni e altri materiali che trovo, "sfrutto" questa occasione per chiederti se tu conoscessi un buon libro su Python

Un classico è questo https://www.python.it/doc/Howtothink/HowToThink_ITA.pdf

E poi c'è https://diveintopython3.problemsolving.io/
 

Fr4ncesco03

Utente Attivo
162
9
OS
Arch Linux
No, ma il problema è da dove esce questo errore

Codice:
name 'mh' is not defined

Quel mh non è specificato da nessuna parte in quei listati. Il log esatto e completo dell'errore che Python ti dà, cosa dice?



Un classico è questo https://www.python.it/doc/Howtothink/HowToThink_ITA.pdf

E poi c'è https://diveintopython3.problemsolving.io/
Scusa per l'assenza ma ho avuto da fare per scuola. Il log completo di Python è:
Codice:
Traceback (most recent call last):
  File "calculator.py", line 35, in <module>
    print(eval(math_function(math_costant(expression))))
  File "<string>", line 1, in <module>
NameError: name 'mh' is not defined
 

pabloski

Utente Èlite
2,868
916
Ma src chi è? Poi non capisco da dov'esce "<string>". Mancano dei pezzi. Da dove l'hai preso quel codice?
 

Fr4ncesco03

Utente Attivo
162
9
OS
Arch Linux
Ma src chi è? Poi non capisco da dov'esce "<string>". Mancano dei pezzi. Da dove l'hai preso quel codice?
Nel primo messaggio avevo spiegato che, la cartella del "progetto", conteneva il file "calculator.py" e una cartella src, dove vi erano alcuni moduli che andavo a importare nel programma principale(sebbene potessi fare tutto nello stesso file o anche nella stessa cartella, ho voluto fare in questo modo in maniera tale che potessi "sperimentare"). Neanche io capisco da dove provenga e cosa sia "<string>".
 

pabloski

Utente Èlite
2,868
916
e una cartella src, dove vi erano alcuni moduli che andavo a importare nel programma principale

Ma in src c'è un file __init__.py che lista tutti i moduli da importare nella variabile __all__? Altrimenti quell'import non funzionerà mai.

E riguardo <string> è una cosa del C++. Quindi non so come diavolo si trovi lì.

Ma quel codice dove l'hai preso?
 

Fr4ncesco03

Utente Attivo
162
9
OS
Arch Linux
Ma in src c'è un file __init__.py che lista tutti i moduli da importare nella variabile __all__? Altrimenti quell'import non funzionerà mai.

E riguardo è una cosa del C++. Quindi non so come diavolo si trovi lì.

Ma quel codice dove l'hai preso?
Nell'import ci sono tutti i moduli da importare. Riguardo la questione di neanche io so dove sia il problema, ma, se Python è scritto in C, come diavolo è possibile che sia una cosa del C++?
Il codice l'ho scritto io(mi dispiace se farà schifo)
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!