Domanda Errore Python

Stato
Discussione chiusa ad ulteriori risposte.

murdermind

Utente Silver
26 Agosto 2011
149
21
17
95
Ultima modifica:
Ieri ho iniziato a studiare Python e oggi ho scritto un semplice programmino che, dati i 2 cateti di un triangolo rettangolo, calcola, tramite il teorema di Pitagora, il valore dell'ipotenusa.

Ecco il codice:

Codice:
 import math

C1 = float (raw_input ("Cateto n1: "))
C2 = float (raw_input ("Cateto n2: "))
C1x2 = C1 * C1
C2x2 = C2 * C2
IPO = math.sqrt (C1x2 + C2x2)
print "\n Ipotenusa = ", IPO

Fin qui tutto ok...

Poi ho provato a fare lo stesso usando una funzione (so che non serve, ma è sempre un modo per esercitarsi...). Ecco come ho fatto:

Codice:
import math

def CalcolaIpo (C1, C2, IPO):
    IPO = math.sqrt (C1 * C1 + C2 * C2)
    return IPO

CalcolaIpo (C3, C4, I)

C3 = float (raw_input ("C1: "))
C4 = float (raw_input ("C2: "))
print "Ipotenusa: ", I

OPPURE

Codice:
import math

def CalcolaIpo (C1, C2, IPO):
    
    C3 = float (raw_input ("C1: "))
    C4 = float (raw_input ("C2: "))
    IPO = math.sqrt (C1 * C1 + C2 * C2)
    return IPO

CalcolaIpo (C1, C2, IPO)

print "Ipo:", IPO

Però quando eseguo il programma (o il 1 o il 2 modo, è uguale...) il terminale (sono su Linux) mi dà questo errore:

Codice:
 alessandro@BB:~/Scrivania$ python Ipotenusa2.py
Traceback (most recent call last):
  File "Ipotenusa2.py", line 7, in <module>
    CalcolaIpo (C3, C4, I)
NameError: name 'C3' is not defined

Qualcuno mi può spiegare? Non trovo l'errore :omfg: !!!

Grazie
 
Cercando sul web ho trovato che devi installare il modulo "c3"(o mlt non ho capito) per python.
 
Premesso che il phyton non lo uso da almeno 2 anni (e quando l'avevo usato non ero andato tanto più in la della calcolatrice).
Potrei dirti un mucchio di fesserie, quindi quello che ti dico prendilo con le pinze. Così dovrebbe andare:
Codice:
import math

def CalcolaIpo(C1, C2):
    return math.sqrt(C1*C1 + C2*C2)
    
C1 = float(raw_input("C1: "))
C2 = float(raw_input("C2: "))
print "Ipotenusa: ", CalcolaIpo(C1, C2)

Nel dettaglio:
  • def CalcolaIpo (C1, C2, IPO) = I parametri sono i valori che devi passare ad una funzione per ottenere un valore di ritorno. IPO non ti serve.
  • IPO = math.sqrt (C1 * C1 + C2 * C2) = Puoi metterlo come non metterlo... se ritorni direttamente il valore (come ho fatto io) hai una variabile in meno.

  • CalcolaIpo (C1, C2, IPO) = In questo caso è proprio sbagliato, il return è come se sostituisse quel codice con il valore ottenuto. Il valore che ritorna dev'essere salvato in una variabile (la variabile IPO), altrimenti puoi stamparlo direttamente a schermo (come ho fatto io).

  • L'errore che ti esce = La funzione è concepita nel modo sbagliato, i parametri serve per passargli dei valori (o delle variabili); in questo caso tu gli passi delle variabili che non hanno nessun valore. Infatti ti dice: "nella linea 7 non hai definito C3" (perché C3 è il primo errore che trova, se dimensioni C3 ti esce errore per i parametri successivi).

In caso vuoi lasciare alla funzione il compito di chiederti i valori dei due cateti potresti fare in questo modo:
Codice:
import math

def CalcolaIpo():
    C1 = float (raw_input ("C1: "))
    C2 = float (raw_input ("C2: "))
    IPO = math.sqrt (C1 * C1 + C2 * C2)
    return IPO

IPO = CalcolaIpo() #non mi serve nessun parametro, quello che mi serve lo richiedo nella funzione
print "Ipo:", IPO

Se non ti è chiaro qualcosa dimmi pure... forse qualcosa ancora la ricordo :)
 
  • Mi piace
Reazioni: murdermind
Stato
Discussione chiusa ad ulteriori risposte.