PDA

View Full Version : [Python] - Funzioni


sim89
05-08-2008, 20:43
# -*- coding: cp1252 -*-

num=raw_input("Inserisci il numero")

def controllonum():
if num==5:
print "Bravo, il numero inserito è 5"
else:
print "Hai sbagliato numero :("

print controllonum()


Con questo codice vorrei chiedere a un utente di inserire un numero (e quindi ho usato il raw_input).
Una volta che l'ha inserito vorrei fare dei controlli, se il numero è 5 allora ok altrimenti scrivo "Spiacente, hai sbagliato numero".

Quando avvio il programma funziona tutto ma:

>>>
Inserisci il numero6
Hai sbagliato numero :(
None

>>>
Inserisci il numero5
Hai sbagliato numero :(
None

Cos'è quel none? :mbe:
E come mai da sempre "hai sbagliato numero"?

marko.fatto
05-08-2008, 20:52
num devi passarlo alla funzione e il none è perchè la funzione non ritorna niente quindi stampi niente :fagiano:

grigor91
05-08-2008, 20:58
ma raw_input non è per le stringhe?

sim89
05-08-2008, 21:06
:(


# -*- coding: cp1252 -*-

num=raw_input("Inserisci il numero")

def controllonum(num):
if num==5:
print "Il numero inserito è 5"
else:
print "Hai sbagliato numero :("


print controllonum("num")

xblitz
05-08-2008, 21:09
Ciao!
allora vediamo di dissipare tutti i dubbi:
Cos'è quel none? :mbe:


L'ultima riga del tuo codice fa stampare il valore che la funzione ritorna. Non essendoci nessun return che faccia ritornare un valore la funzione non ritorna nulla, none per l'appunto. Per fare ciò che vuoi tu ti è sufficiente richiamare la funzione senza la print davanti


E come mai da sempre "hai sbagliato numero"?

La raw_input ti converte tutto ciò che inserisci, quindi anche i numeri, in stringhe. L'interprete Python confronta il 5 numero con il "5" (codice ASCII, nota le virgolette) che non è lo stesso, quindi si va sempre nel ramo del falso.
Ciao

cdimauro
06-08-2008, 08:33
# -*- coding: cp1252 -*-
print {"5" : "Il numero inserito è 5"}.get(raw_input("Inserisci il numero"), "Hai sbagliato numero :(")
:asd:

DanieleC88
06-08-2008, 09:35
# -*- coding: cp1252 -*-
print {"5" : "Il numero inserito è 5"}.get(raw_input("Inserisci il numero"), "Hai sbagliato numero :(")
:asd:
WTF? :wtf:

Non mi fare queste cose! E io che cominciavo ad apprezzare Python... :Prrr:

cdimauro
06-08-2008, 10:10
No if, more pleasure. :cool:

sim89
06-08-2008, 12:26
# -*- coding: cp1252 -*-
print {"5" : "Il numero inserito è 5"}.get(raw_input("Inserisci il numero"), "Hai sbagliato numero :(")
:asd:

Grazie ;)
però se inserisco il numero 6 e sbaglio, non mi ripresenta la domanda (inserisci il numero).

Io avevo in mente di fare una cosa così:

1- Chiedo all'utente di inserire un numero
2- Chiamo la funzione che mi controlla se il numero è uguale a 5
3- Nel caso non lo fosse torno allo "step" 1

Scusate se rompo ma non riesco a usare ste funzioni e sulla guida mi incasino ancora di più :stordita:

sim89
06-08-2008, 12:41
EDIT:

Ho fatto così:

# -*- coding: cp1252 -*-
conta=1
while conta<10:
print {"5" : "Il numero inserito è 5"}.get(raw_input("Inserisci il numero"), "Hai sbagliato numero :(")
conta=conta+1


ma ci sono ancora problemi e soprattutto non vengono usate le funzioni

grigor91
06-08-2008, 13:06
ma non basta mettere input al posto di raw_input?
oppure dopo raw_input metti num=int(num)
Poi scrivere print controllonum() è inutile visto che la stampa la fa dentro la funzione; basta controllonum()

cdimauro
06-08-2008, 14:39
EDIT:
Ho fatto così:

# -*- coding: cp1252 -*-
conta=1
while conta<10:
print {"5" : "Il numero inserito è 5"}.get(raw_input("Inserisci il numero"), "Hai sbagliato numero :(")
conta=conta+1


ma ci sono ancora problemi e soprattutto non vengono usate le funzioni
Il codice che avevo scritto NON va usato in questo modo! L'avevo messo anche nell'intestazione del messaggio: "Obfuscated Python code"

Era soltanto un "proof of concept" per risolvere il problema senza if, ma non andava preso così, specialmente per chi sta iniziando a programmare. :(

Il codice sistemalo così:
# -*- coding: cp1252 -*-
Dato = ""
while Dato != "5":
Dato = raw_input("Inserisci il numero")
Risposta = "Il numero inserito è 5" if Dato == '5' else "Hai sbagliato numero :("
print Risposta

sim89
06-08-2008, 14:42
L'ho sistemato, grazie per la pazienza :)

ndakota
06-08-2008, 15:30
si ma gli hai tolto le funzioni che è quello che voleva imparare :D

DanieleC88
06-08-2008, 15:40
si ma gli hai tolto le funzioni che è quello che voleva imparare :D
Conta che prima aveva creato on-the-fly un dizionario, chiamandone un metodo oscuro con parametri non meglio identificati. Vedi tu tra i due errori qual'è il minore. :p

cdimauro
06-08-2008, 17:33
si ma gli hai tolto le funzioni che è quello che voleva imparare :D
Vero, grazie per avermelo fatto notare (m'era sfuggito). :)

Ecco qui:
# -*- coding: cp1252 -*-

def Risposta(Dato):

return "Il numero inserito è 5" if Dato == '5' else "Hai sbagliato numero :("


Dato = ""
while Dato != "5":
Dato = raw_input("Inserisci il numero")
print Risposta(Dato)


:)
Conta che prima aveva creato on-the-fly un dizionario, chiamandone un metodo oscuro con parametri non meglio identificati. Vedi tu tra i due errori qual'è il minore. :p
Il metodo non è oscuro, ma ben noto: è uno dei più usati nei dizionari perché serve a restituire un valore di default (specificato come secondo parametro) quando la chiave non viene trovata. ;)

sim89
06-08-2008, 20:41
Eccolo! :D
Grazie del codice, mi hai illuminato, adesso ho capito come va impostato il tutto.
Grazie ancora :) :ave:

DanieleC88
07-08-2008, 00:01
Il metodo non è oscuro, ma ben noto: è uno dei più usati nei dizionari perché serve a restituire un valore di default (specificato come secondo parametro) quando la chiave non viene trovata. ;)
Ma sì, dicevo di proposito! :p Il fatto è che tu lo conosci bene, ma lui che sta ancora studiando le funzioni forse lo trova disorientante, tutto qui. :)

ciao ;)