Forum >> Principianti >> CurrencyConverter.py che non funziona come dovrebbe... qualcuno ha voglia di darmi una mano? ho iniziato da poco...

Pagina: 1 2 Avanti

#CurrencyConverter.py
#Scrypted by: Noob
#Description: Converts USD to Euro or vice versa

#1 USD = 0.9214 Euro
#1 Euro = 1.0853 USD

def currencyConvert():
#Find out what the user wants to convert: 1) USD ->Euro or 2) Euro->USD
#Store answer in a variable
userChoice = input ("what do you want to convert? \n1) USD > Euro \n2) Euro > USD \n")
#Return userChoice
return userChoice

def doAgain():
#Prompt the user if they would like to run the convert currency program again
userDoAgain = (input ("Would you like to convert again? \n1) Yes \n2) No \n"))
#Checks what the user typed
#if choice was 1
if userDoAgain == "1":
currencyConvert()
#if choice was 2
elif userDoAgain == "2":
print ("Thank you for using this program")
#if choice was something else
else:
print ("Error.Would you like to convert again? \n1) Yes \n2) No")
doAgain()


#Check and see what the user typed

#Access userChoice (the return value of currencyConvert)
userChoice = currencyConvert()

#if the user typed 1
if userChoice == "1":
# do something: Prompt the user the amount of USD they want to convert
# store what the user typed into a variable
userUSD = float(input ("Enter the amount in USD you want to convert: "))
# Euro = USD amount * 0.9214
Euro = userUSD * 0.9214
# Output amount to user
print ("$ ", userUSD, " = €", Euro)
print ("")
doAgain()

#if the user typed 2
elif userChoice == "2":
# do something: Prompt the user the amount of Euro they want to convert
userEuro = float(input ("Enter the amount in Euro you want to convert: "))
# store what the user typed into a variable
# USD = userEuro * 1.0853
USD = userEuro * 1.0853
# Output amount to user
print ("€", userEuro, " = $", USD)
print ("")
doAgain()

#if the user typed something else
else:
# do something: tell the user what they did wrong
print ("ERROR. Please Choose Either Option 1 or 2")
print ("--------------------------------------------------------")
# run the script again
currencyConvert()

def doAgain():
#Prompt the user if they would like to run the convert currency program again
userDoAgain = (input ("Would you like to convert again? \n1) Yes \n2) No\n"))
#Checks what the user typed
#if choice was 1
if userDoAgain == "1":
currencyConvert()
#if choice was 2
elif userDoAgain == "2":
print ("Thank you for using this program")
#if choice was something else
else:
print ("Error.Would you like to convert again? \n1) Yes \n2) No \n")
doAgain()

currencyConvert()







--- Ultima modifica di pi3tr0 in data 2015-07-20 21:47:57 ---

--- Ultima modifica di pi3tr0 in data 2015-07-20 21:53:37 ---
Allegati
Ciao caro pi3tr0, non avertene a male se ti prendo ad esempio per dare a te ed a tutti i frequentatori di questo ed altri forum un consiglio: fai domande più precise.

Postare una sbrodolata di codice scrivendo "non va come dovrebbe", "datemi una mano", etc... non solo può essere controproducente inducendo il lettore ad ignorarti, ma non capisco come tu possa pensare di essere aiutato.

La maggior parte delle persone che frequentano forum, mailing list o altro, cercano di dare una mano (specie ai nuovi arrivati) sottraendo tempo alle proprie attività. Si capisce quindi che non si ha troppo tempo per cercare di capire nel tuo codice cosa non va o ancora peggio come dovrebbe andare.

Quindi in estrema sintesi, isola il problema e fai domande specifiche e puntuali su cosa ti aspetti e/o su cosa non va.

Ciao.
Daniele


--- Ultima modifica di Daniele aka Palmux in data 2015-07-21 12:54:04 ---
Ciao Daniele, intanto ti ringrazio per avermi risposto.

E' la prima volta che accedo a questo Forum, anche perchè è da meno di un mese che ho iniziato a studiare python.

Alcune premesse prima di passare alle domande più specifiche:
non seguo nessun corso specifico ma cerco di documentarmi in rete;
sto studiando sul testo "Pensare da Informatico - Imparare con Python" (Downey, Elkner, Meyers) e su un altro testo reperito in rete dal titolo "Imparare Python" di Roberto Allegra, in più tutti i threads che reperisco su forum a seconda delle necessità;
utilizzo un macbookpro con cui lavoro sia da terminale che da Idle Python 3.4.3 (soprattutto da quest'ultimo);
da principiante, le difficoltà maggiori che trovo sono dovute al fatto che spesso esempi e tutorial che trovo in rete sono scritti in versioni precedenti di python, pertanto ci sono molte differenze nel momento in cui mi trovo a scrivere codice sulla base di quelle informazioni (e questo genera confusione).

ps: mi sono accorto solo dopo che il copia-incolla del codice non ha tenuto conto delle indentazioni ed è per questo che successivamente avevo allegato il file currencyConvert5.py nella speranza che i problemi fossero più intelleggibili.

le domande precise... ci provo:
stavo cercando di realizzare un programma di conversione valuta USD-Euro e viceversa;
mi sono scritto prima le cose che volevo ottenere:
a. individua quale valuta l'utente vuole convertire (1. USD>Euro 2. Euro>USD)
b. salva la riposta in una variabile
c. se l'utente sceglie 1. chiedi all'utente di inserire l'importo in USD da convertire
d. converti
e. una volta fornita la conversione chiedi se l'utente vuole effettuare altre conversioni (qui il programma non fa più quello che dovrebbe cioè le selezioni 1.Yes o 2.No riportano alla nuova richiesta di conversione ma questa non converte più)
f. se l'utente sceglie 2. chiedi all'utente di inserire l'importo in Euro da convertire
g. converti
h. una volta fornita la conversione chiedi se l'utente vuole effettuare altre conversioni (anche qui il programma non fa più quello che dovrebbe cioè le selezioni 1.Yes o 2.No riportano alla nuova richiesta di conversione ma questa non converte più)

In sostanza, il primo prompt "what do you want to convert? \n1) USD > Euro \n2) Euro > USD \n" funziona: cioè se scelgo 1 esegue la conversione da dollaro a euro e se scelgo 2. esegue correttamente la conversione da euro a dollaro.

In entrambi i casi, dopo aver effettuato la conversione mi chiede:
"Would you like to convert again? \n1) Yes \n2) No \n"
se rispondo 1. ritorna correttamente alla domanda: "what do you want to convert? \n1) USD > Euro \n2) Euro > USD \n" ma a questo punto non esegue più la conversione ma si limita a stampare "1" se premo 1. o "2" se premo 2.

la stessa difficoltà la ritrovo sul comando else:
premendo un tasto qualsiasi diverso da 1. o da 2. mi restituisce correttamente il messaggio di errore (ERROR. Please Choose Either Option 1 or 2) e ripropone la domanda (
"what do you want to convert? \n1) USD > Euro \n2) Euro > USD \n") ma anche a questo punto non esegue più la conversione ma si limita a stampare "1" se premo 1. o "2" se premo 2.

sto provando ad utilizzare while per vedere se riesco a risolvere ma ancora non ne vengo a capo (
currencyConvert5while.py)


Non so se sono riuscito ad essere abbastanza mirato... spero di si.
grazie comunque per l'attenzione







Allegati
La variabile 'userChoice' nella funzione 'currencyConvert' è una variabile locale che non ha niente a che vedere con la variabile 'userChoice' esterna alla funzione, in sostanza si potrebbe anche scrivere la funzione nel seguente modo che non cambierebbe nulla:
def currencyConvert():
    a = input ("what do you want to convert? \n1) USD > Euro \n2) Euro > USD \n")
    return a

Detto questo, quali sono gli unici punti del programma in cui viene assegnato qualcosa alla variabile 'userChoice'? Vedo assegnazioni solo alla riga 20 e alla 33, poi il valore assegnato alla variabile rimane immutato.

PS: l'indentazione viene mantenuta se il testo viene specificato come codice con il simboletto <> a sinistra dei colori.

PS2: la funzione 'currencyConvert' non effettua una conversione come si potrebbe pensare leggendo il suo nome, ma una scelta, quindi un nome più adatto potrebbe essere currencyChoice.
*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
buonasera... ho continuato a leggere e a vedere se trovavo una soluzione. sicuramente sono ancora troppo acerbo per interpretare alcuni consigli che mi sono stati dati.
allora ho rifatto tutto da capo e ho cambiato strada:
qui di seguito ho semplificato lo script (credo), ma ancora non mi è chiaro l'uso di if, elif e else... evidentemente.
infatti, il risultato del file.py che ho salvato è:
se digito l'opzione 1) mi ritorna la conversione euro>usd ( e fin qui va bene)
ma lo stesso identico risultato me lo ritorna anche premendo le opzioni 2) o 3).
dove sbaglio?
spero, questa volta di essere riuscito a porre la questione in modo sensato.
grazie a chi vorrà rispondermi
Pietro


nel post successivo il codice del programma in oggetto


--- Ultima modifica di pi3tr0 in data 2015-07-22 22:22:59 ---
print ('convertitore di valuta')
print ("")
def menu():
    print ('1.  Vuoi convertire Euro in USD?')
    print ('2.  Vuoi convertire USD in Euro?')
    print ('3.  Esci dal programma')
    print ("")
menu_choice = 0
menu()
while menu_choice != 3:
    menu_choice = input ('scegli cosa vuoi fare (1-3):   ')
    menu_choice=0
    if menu_choice !=1:
        userEuro = float(input("Scrivi l'importo in Euro che vuoi convertire in dollari:  €  "))
        USD = userEuro * 1.0853
        print  ("€", userEuro, " =  $ ", USD)
        print ("")
        menu()
    elif menu_choice !=2:
        userUSD = float(input("Scrivi l'importo in dollari che vuoi convertire in euro:  $  "))
        Euro = userUSD * 0.9214
        print  ("$", userUSD, " =  € ", Euro)
        print ("")
        menu()
    elif menu_choice !=3:
        print ("grazie per aver usato questo programma!")
        menu()
ho risolto. grazie comunque a coloro che mi hanno risposto.
tuttavia immagino ci possa essere qualche sporcizia nel codice che ho scritto.
lo posto nel prossimo post :)
se qualcuno volesse darci un'occhiata e indicarmi le cose inutili che posso aver scritto mi farebbe un enorme piacere.... :)
print ('convertitore di valuta')
print ("")
def menu( ):
    print ('1.  Vuoi convertire Euro in USD?')
    print ('2.  Vuoi convertire USD in Euro?')
    print ('3.  Esci dal programma')
    print ("")
menu_choice = 0
menu()
while menu_choice !=3:
    menu_choice = input ('scegli cosa vuoi fare (1-3):   ')

    if (menu_choice) == '1':
        userEuro = float(input("Scrivi l'importo in Euro che vuoi convertire in dollari:  €  "))
        USD = userEuro * 1.0853
        print  ("€", userEuro, " =  $ ", USD)
        print ("")
        menu()
    else:
        if menu_choice == '2':
            userUSD = float(input("Scrivi l'importo in dollari che vuoi convertire in euro:  $  "))
            Euro = userUSD * 0.9214
            print  ("$", userUSD, " =  € ", Euro)
            print ("")
            menu()
        else :
            if menu_choice == '3':
                print ("grazie per aver usato questo programma!")
                print ("")
                menu()
una bellissima soddisfazione :)
e così mi sono divertito a ricompilare lo script per un convertitore di criptovaluta... piccolo, impreciso forse, incompletissimo... ma divertente :)
ve lo regalo nel prox post....
... in realtà ora mi piacerebbe sincronizzare lo script con le quotazioni in tempo reale delle valute....
aiuto!!!!!! :confused:
print ('convertitore di criptovaluta')
print ("")
def menu( ):
    print ('1.  Vuoi convertire Euro in BTC?')
    print ('2.  Vuoi convertire BTC in Euro?')
    print ('3.  Esci dal programma')
    print ("")
menu_choice = 0
menu()
while menu_choice !=3:
    menu_choice = input ('scegli cosa vuoi fare (1-3):   ')

    if (menu_choice) == '1':
        userEuro = float(input("Scrivi l'importo in Euro che vuoi convertire in BTC:  €  "))
        BTC = userEuro * 0.003928
        print  ("€", userEuro, " =  BTC ", BTC)
        print ("")
        menu()
    else:
        if menu_choice == '2':
            userBTC = float(input("Scrivi l'importo in BTC che vuoi convertire in euro:  BTC  "))
            Euro = userBTC * 254.5887
            print  ("BTC", userBTC, " =  € ", Euro)
            print ("")
            menu()
        else :
            if menu_choice == '3':
                print ("grazie per aver usato questo programma!")
                print ("")
                exit()


Pagina: 1 2 Avanti



Esegui il login per scrivere una risposta.