0

I'm new at Python and my searching to create a simple calculatore, but there are some errors...

I think that I done a mistake on the functions but I really don't know.

I hope you can help me with this!

Here's the errors:

Traceback (most recent call last):
  File "C:\Users\dario\Desktop\calcolatrice in py\calcolatrice.py", line 43, in <module>
    if operazione == '1':
NameError: name 'operazione' is not defined

And here's my program:

def addizione():
    n1 = input('Inserisci il primo numero: ')
    n2 = input('Inserisci il secondo numero: ')
    risultato = int(n1) + int(n2)
    print('Il risultato è: ' + str(risultato))

def sottrazione():
    n1 = input('Inserisci il primo numero: ')
    n2 = input('Inserisci il secondo numero: ')
    risultato = int(n1) - int(n2)
    print('Il risultato è: ' + str(risultato))

def moltiplicazione():
    n1 = input('Inserisci il primo numero: ')
    n2 = input('Inserisci il secondo numero: ')
    risultato = int(n1) * int(n2)
    print('Il risultato è: ' + str(risultato))

def divisione():
    n1 = input('Inserisci il primo numero: ')
    n2 = input('Inserisci il secondo numero: ')
    risultato = int(n1) / int(n2)
    print('Il risultato è: ' + str(risultato))

def potenza():
    n1 = input('Inserisci la base: ')
    n2 = input('Inserisci l\'esponente: ')
    risultato = int(n1) ** int(n2)
    print('Il risultato è: ' + str(risultato))

def inizio():
    print('~ Calcolatrice ~')
    print('Per eseguire un\'addizione inserisci 1')
    print('Per eseguire una sottrazione inserisci 2')
    print('Per eseguire una moltiplicazione inserisci 3')
    print('Per eseguire una divisione inserisci 4')
    print('Per eseguire un calcolo esponenziale inserisci 5')
    print('Per uscire dal programma digita "ESC"')
    operazione = input()

inizio()

if operazione == '1':
    addizione()
    continuare = input('Vuoi continuare? Y/N')
    if continuare == 'Y' or 'y':
        inizio()
    else:
        exit()
elif operazione == '2':
    sottrazione()
    continuare = input('Vuoi continuare? Y/N')
    if continuare == 'Y' or 'y':
        inizio()
    else:
        exit()
elif operazione == '3':
    moltiplicazione()
    continuare = input('Vuoi continuare? Y/N')
    if continuare == 'Y' or 'y':
        inizio()
    else:
        exit()
elif operazione == '4':
    divisione()
    continuare = input('Vuoi continuare? Y/N')
    if continuare == 'Y' or 'y':
        inizio()
    else:
        exit()
elif operazione == '5':
    potenza()
    continuare = input('Vuoi continuare? Y/N')
    if continuare == 'Y' or 'y':
        inizio()
    else:
        exit()
elif operazione == 'ESC' or 'esc':
    exit()

I've Python 3.9.1

Timur Shtatland
  • 12,024
  • 2
  • 30
  • 47
  • I wrote a lot of ++ because I wasn't able to publishh the question – chickenwing Jan 13 '21 at 21:33
  • 4
    `operazione` is a local variable of the `inizio` function. By definition, local variables are not accessible in the global scope. – ForceBru Jan 13 '21 at 21:34
  • You have `operazione` defined in a function, but tried to use it outside of it. [Python Scope](https://www.w3schools.com/python/python_scope.asp) – CATboardBETA Jan 13 '21 at 21:38

2 Answers2

1

As ForceBru said in a comment above, the problem here is that of local and global variables. There are many ressources online that can help you understand the difference between the two. You can check this one, for instance.

In your specific case, what would work is replacing this bit of code:

def inizio():
    print('~ Calcolatrice ~')
    print('Per eseguire un\'addizione inserisci 1')
    print('Per eseguire una sottrazione inserisci 2')
    print('Per eseguire una moltiplicazione inserisci 3')
    print('Per eseguire una divisione inserisci 4')
    print('Per eseguire un calcolo esponenziale inserisci 5')
    print('Per uscire dal programma digita "ESC"')

    # here, operazione is a local variable
    operazione = input()

    return operazione

# define a global variable that takes the value returned by the function inizio
operazione = inizio()
bglbrt
  • 2,018
  • 8
  • 21
0

Define operazione in the outer scope, not in the function. Use return in the function (= inner scope) to assign the value to operazione:

def inizio():
    print('~ Calcolatrice ~')
    print('Per eseguire un\'addizione inserisci 1')
    print('Per eseguire una sottrazione inserisci 2')
    print('Per eseguire una moltiplicazione inserisci 3')
    print('Per eseguire una divisione inserisci 4')
    print('Per eseguire un calcolo esponenziale inserisci 5')
    print('Per uscire dal programma digita "ESC"')
    return(input())

operazione = inizio()
Timur Shtatland
  • 12,024
  • 2
  • 30
  • 47