Pagina 1 di 1

calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 13:13
da roxdragon
ciao ragazzi.. volevo fare una calcolatrice in python.. potete aiutarmi???
passo passo.. non ho ancora molte competenze...
prima di tutto si importa il modulo math

Codice: Seleziona tutto

import math *
input("inserisci il primo numero")
input(" inserisci il secondo numero")
risultato???
per non creare confusione.. volevo fare la calcolatrice solo con + e con - poi a piano a piano aggiungo le altre cose...
potete aiutarmi??
anche spiegandomi come si fa..

grazie

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 14:42
da Bakuriu
la cosa più ovvia che mi viene in mente è usare eval...
così non devi fare praticamente nulla.Anche se potrebbe portare dei problemi di sicurezza..
un utente potrebbe scrivere:

Codice: Seleziona tutto

import os;os.system("rm -r ~/*)
ed eliminare tutta la home...
per evitare questo potresti fare un semplice controllo che l'utente non abbia inserito nessun import.

quindi una cosa così:

Codice: Seleziona tutto

testo = input("Inserisci l'espressione:")
if "import" in testo:
    print "Non puoi importare moduli!"
else:
    try:
        print eval(testo)
    except Exception,e:
        print "Si è verificato il seguente errore:"
        print e

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 15:11
da roxdragon
scusa non ho capito che c'entra con la calcolatrice  ::)

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 18:31
da calntiz
ciao roxdragon  

Allora questo è un piccolo esempio di una calcolatrice "stupida"  (rotfl)

Codice: Seleziona tutto

#!/usr/bin/python

def menu():
	print "calcolatrice in python \n\n"
	print "1) addizione"
	print "2) sottrazione"
	print "3) moltiplicazione"
	print "4) divisione"
	print "5) esci"

menu()

scelta = 0
while scelta != 5:
	scelta = input("Inserisci un comando: ")
	if scelta == 1:
		print "Addizione"
		x = input("Inserisci il primo numero: ")
		y = input("inserisci il secondo numero: ")
		ris = x + y 
		print "Il risultato dell'addizione e'",ris
		raw_input("Premere invio per continuare")
		print"\n"*300 # comando per pulire lo schermo 
		menu() # "ricarica" il menu 
	elif scelta == 2:
		print "Sottrazione"
		x = input("Inserisci il primo numero: ")
		y = input("inserisci il secondo numero: ")
		ris = x - y 
		print "Il risultato della sottrazione e'",ris
		raw_input("Premere invio per continuare")
		print"\n"*300
		menu()
	elif scelta == 3:
		print "moltiplicazione"
		x = input("Inserisci il primo numero: ")
		y = input("inserisci il secondo numero: ")
		ris = x * y 
		print "Il risultato della moltiplicazione e'",ris
		raw_input("Premere invio per continuare")
		print"\n"*300
		menu()
	elif scelta == 4:
		print "divisione"
		x = input("Inserisci il primo numero: ")
		y = input("inserisci il secondo numero: ")
		ris = x % y 
		ris2 = x / y
		print "Il risultato della divisione e'",ris2
		print "il resto e'",ris
		raw_input("Premere invio per continuare")
		print"\n"*300
		menu() 
	elif scelta == 5:
		raw_input("Premi invio per uscire")
		
Spero che il codice sia abbastanza chiaro se ci sono problemi domanda pure  ;D ;D

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 19:03
da tomallevi
roxdragon ha scritto: scusa non ho capito che c'entra con la calcolatrice  ::)
eval è un comando che prende come argomento una stringa contenente codice e lo esegue.
per esempio se faccio

Codice: Seleziona tutto

eval("print "ciao"")
è come fare

Codice: Seleziona tutto

print "ciao"
quindi per rendere sicuro il programma devi evitare che un utente male intenzionato utilizzi il tuo programma, la calcolatrice, come mezzo per cancellare la tua home. se fai un controllo sull'input dell'utente eviti che si possa eseguire codice arbitrario. :)

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 19:08
da roxdragon
tomallevi ha scritto:
roxdragon ha scritto: scusa non ho capito che c'entra con la calcolatrice  ::)
eval è un comando che prende come argomento una stringa contenente codice e lo esegue.
per esempio se faccio

Codice: Seleziona tutto

eval("print "ciao"")
è come fare

Codice: Seleziona tutto

print "ciao"
quindi per rendere sicuro il programma devi evitare che un utente male intenzionato utilizzi il tuo programma, la calcolatrice, come mezzo per cancellare la tua home. se fai un controllo sull'input dell'utente eviti che si possa eseguire codice arbitrario. :)
quindi è meglio mettere eval?

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 19:12
da roxdragon
calntiz ha scritto: ciao roxdragon  

Allora questo è un piccolo esempio di una calcolatrice "stupida"  (rotfl)

Codice: Seleziona tutto

#!/usr/bin/python

def menu():
	print "calcolatrice in python \n\n"
	print "1) addizione"
	print "2) sottrazione"
	print "3) moltiplicazione"
	print "4) divisione"
	print "5) esci"

menu()

scelta = 0
while scelta != 5:
	scelta = input("Inserisci un comando: ")
	if scelta == 1:
		print "Addizione"
		x = input("Inserisci il primo numero: ")
		y = input("inserisci il secondo numero: ")
		ris = x + y 
		print "Il risultato dell'addizione e'",ris
		raw_input("Premere invio per continuare")
		print"\n"*300 # comando per pulire lo schermo 
		menu() # "ricarica" il menu 
	elif scelta == 2:
		print "Sottrazione"
		x = input("Inserisci il primo numero: ")
		y = input("inserisci il secondo numero: ")
		ris = x - y 
		print "Il risultato della sottrazione e'",ris
		raw_input("Premere invio per continuare")
		print"\n"*300
		menu()
	elif scelta == 3:
		print "moltiplicazione"
		x = input("Inserisci il primo numero: ")
		y = input("inserisci il secondo numero: ")
		ris = x * y 
		print "Il risultato della moltiplicazione e'",ris
		raw_input("Premere invio per continuare")
		print"\n"*300
		menu()
	elif scelta == 4:
		print "divisione"
		x = input("Inserisci il primo numero: ")
		y = input("inserisci il secondo numero: ")
		ris = x % y 
		ris2 = x / y
		print "Il risultato della divisione e'",ris2
		print "il resto e'",ris
		raw_input("Premere invio per continuare")
		print"\n"*300
		menu() 
	elif scelta == 5:
		raw_input("Premi invio per uscire")
		
Spero che il codice sia abbastanza chiaro se ci sono problemi domanda pure  ;D ;D
Grazie mille.. sei stato davvero molto comprensivo...
una domanda...

devo mettere per forza questo?
#!/usr/bin/python

Codice: Seleziona tutto

def menu():
	print "calcolatrice in python \n\n"
	print "1) addizione"
	print "2) sottrazione"
	print "3) moltiplicazione"
	print "4) divisione"
	print "5) esci"

menu()
all'ultimo menu() serve per chiudere il menu??? e def menu all inizio per aprirlo?

Codice: Seleziona tutto

scelta = 0
while scelta != 5:
non ho capito questo...
ancora i cicli non li ho fatti... sapresti spiegarmeli sempre ad esempi?

grazie in anticipo

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 19:26
da tomallevi
bhe eval pone un problema di sicurezza. e poi dipende come vuoi fare la calcolatrice :)
roxdragon ha scritto: devo mettere per forza questo?
#!/usr/bin/python
in realtà se esegui i programmi sempre con "python nomefile.py" non è obbligatorio. lo diventa, se non sbaglio, quando gli dai i permessi di esecuzione, quando puoi eseguire lo script con "./nomefile.py"

e invece fare una cosa del genere?

Codice: Seleziona tutto

a = raw_input()
op = a.split(" ")
if op[1] == '+':
	print int(op[0]) + int(op[2])
if op[1] == '-':
	print int(op[0]) - int(op[2])
if op[1] == '*':
	print int(op[0]) * int(op[2])
if op[1] == '/':
	print int(op[0]) / int(op[2])
è vero ti impone di inserire cose del tipo "3 + 5" e non "3+5" però è + semplice così no?

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 19:35
da calntiz
Ciao  ;D

Allora questa calcolatrice utilizza il while che serve a creare un ciclo finchè la condizione che viene impostata dal "programmatore" non si realizzi quindi il mio ciclo while terminerà quando premerò il numero 5 in questo caso.

Difatti nella parte di codice while != 5 qualsiasi operazione non sia 5 il programma la esegue...una calcolatrice può anche esser fatta con una serie di IF a cascata per intenderci...solo che puoi "eseguire" una sola volta una determinata operazione ( una sola addizione, una sola divisione e cosi via ) il while risolve questo "problema" grazie alla creazione di un ciclo.

Per la questione del def menu(): è una funzione che però in questo caso serve solo a mantenere il codice più pulito...ogni funzione termina con il richiamo del nome seguito dalla chiusura delle parentesi ( "menu ()" ) questo vale solo per queste funzioni cosi semplici.

Spero di esser stato abbastanza chiaro  :)

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 19:35
da roxdragon
grazie.. si è piu semplice ma non ho capito questo

Codice: Seleziona tutto

op = a.split(" ")
if op[1]
perchè la prima riga? e perchè proprio op [1] ?

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 19:39
da roxdragon
scusa ma di quanto hai fatto l'indentazione di def menu??

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 19:42
da tomallevi
split divide la stringa contenuta in a dove ci sono gli " ", cioè

Codice: Seleziona tutto

>>> a = "5 + 4"
>>> op = a.split(" ")
>>> print op
['5', '+', '4']
se lo metti dentro un ciclo while o for come ha fatto calntiz hai la possibilità di fare + operazioni.
op[1] contiene l'operatore (+ nell'esempio sopra)

Re: calcolatrice in python

Inviato: venerdì 4 dicembre 2009, 19:47
da calntiz
roxdragon ha scritto: scusa ma di quanto hai fatto l'indentazione di def menu??
Il def menu(): l'ho utilizzato in questo caso per non riscrivere a meno in ogni blocco di if i print del menu(1) addizione 2) sottrazione)...in questo caso inserendo solo menu() richiama l'intera funzione e di conseguenza ristampa automaticamente tutti i print.

Re: calcolatrice in python

Inviato: domenica 12 marzo 2017, 15:54
da Jean Denis RdR
questo è ancora più semplice e funzionale:

import math
from math import sqrt
while True:
a=input("?")
print a




questo è tutto

Re: calcolatrice in python

Inviato: lunedì 13 marzo 2017, 13:21
da crap0101
Jean Denis RdR [url=http://forum.ubuntu-it.org/viewtopic.php?p=4965572#p4965572][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:questo è ancora più semplice e funzionale:

import math
from math import sqrt
while True:
a=input("?")
print a




questo è tutto
figo! allora si può mettere "risolto"


... certo che dopo *sette* anni si sentiva proprio il bisogno di questa perla di saggezza :-(