PDA

Visualizza la versione completa : [Python]Ciclo While per ricominciare il programma.


Mauro.A
11-04-2011, 17:30
Salve , sto iniziando a programma con Python e sto leggendo "Appunti di Python".
In un capitolo mi si chiede di fare un esercizio, ossia di prendere questo codice:



lunghezza = 0
larghezza = 0
while lunghezza<=0:
lunghezza = input('Dammi la lunghezza del rettangolo:')
while larghezza<=0:
larghezza = input('Dammi la larghezza del rettangolo:')
area = lunghezza * larghezza print "L'area del rettangolo è",area

e di fare in modo che alla fine del programma si ponga all'utente la seguente domanda:"Vuoi calcolare l'area di un altro rettangolo? (s/n).

Questo usando solo le istruzioni conosciute sino a questo momento, ossia IF e While.
Ammetto di non esserci riuscito, sono solamente riuscito ad uscire dal programma rispondendo n, ma non sono riuscito a far ricominciare il programma.
Come devo fare?

Grazie in anticipo!

Rising1
11-04-2011, 17:42
ti rispondo ma premetto che sono abituato a pascal quindi posso sbagliare sintassi



while risposta='si':
lunghezza = 0
larghezza = 0
while lunghezza<=0:
lunghezza = input('Dammi la lunghezza del rettangolo:')
while larghezza<=0:
larghezza = input('Dammi la larghezza del rettangolo:')
area = lunghezza * larghezza print "L'area del rettangolo è",area

risposta=input('vuoi calcolare l'area di un'altro rettangolo?)

anche se non capisco perchè in input devi dare solo valori minori o uguali a 0, dovrebbe essere

while lunghezza>0:
lunghezza = input('Dammi la lunghezza del rettangolo:')
while larghezza>0:
larghezza = input('Dammi la larghezza del rettangolo:')

ma poi non dvrebbe farsi con if then? così continua fino a che non inserisci un numero minore o uguale a zero(come hai fatto tu) o maggiore(secondo il mio codice)

ripeto che io sono legato al pascal, ma il concetto è quello

Mauro.A
11-04-2011, 17:59
Ciao,
grazie per la risposta, non fare caso al simbolo , in realtà doveva essere <.
Ho tentato come tu mi hai detto , ma non funziona.
Allora ho tentato in questo modo,


lunghezza = 0
larghezza = 0
risposta="si"
if risposta=="si":
while lunghezza<=0:
lunghezza = input('Dammi la lunghezza del rettangolo:')
while larghezza<=0:
larghezza = input('Dammi la larghezza del rettangolo:')
area = lunghezza * larghezza
print "L'area del rettangolo è",area
risposta=raw_input("Vuoi continuare?")
if risposta=="no":
print""

ma anche cosi non va....
Uff.

Originariamente inviato da Rising1
ti rispondo ma premetto che sono abituato a pascal quindi posso sbagliare sintassi



while risposta='si':
lunghezza = 0
larghezza = 0
while lunghezza<=0:
lunghezza = input('Dammi la lunghezza del rettangolo:')
while larghezza<=0:
larghezza = input('Dammi la larghezza del rettangolo:')
area = lunghezza * larghezza print "L'area del rettangolo è",area

risposta=input('vuoi calcolare l'area di un'altro rettangolo?)

anche se non capisco perchè in input devi dare solo valori minori o uguali a 0, dovrebbe essere

while lunghezza>0:
lunghezza = input('Dammi la lunghezza del rettangolo:')
while larghezza>0:
larghezza = input('Dammi la larghezza del rettangolo:')

ma poi non dvrebbe farsi con if then? così continua fino a che non inserisci un numero minore o uguale a zero(come hai fatto tu) o maggiore(secondo il mio codice)

ripeto che io sono legato al pascal, ma il concetto è quello

Rising1
11-04-2011, 18:10
bhe, certo, così non ripete mica tutto.

mica se gli dici all'inizio che se risposta=si allora fa tutto quello finchè gli metti no.
devi usare



risposta='si'
while risposta='si':
etc...
risposta=imput(etc...)
ovviamente adattalo con la sintassi di phyton che non so, ma togli poi quel if....=no: etc...

Mauro.A
11-04-2011, 18:19
Ok,
ho provato cosi:



lunghezza = 0
larghezza = 0
risposta="si"
while risposta=="si":
while lunghezza<=0:
lunghezza = input('Dammi la lunghezza del rettangolo:')
while larghezza<=0:
larghezza = input('Dammi la larghezza del rettangolo:')
area = lunghezza * larghezza
print "L'area del rettangolo è",area
risposta=raw_input("Vuoi continuare?")

mi restituisce questo:

Dammi la lunghezza del rettangolo:12
Dammi la larghezza del rettangolo:12
L'area del rettangolo è 144
Vuoi continuare?si
L'area del rettangolo è 144
Vuoi continuare?si
L'area del rettangolo è 144
Vuoi continuare?

In pratica alla mia risposta "si", lui mi ritorna l'area e mi ripropone la domanda....., perché non torna all'inzio vistoche è un ciclo?ARGHH

Rising1
11-04-2011, 20:23
non conosco python (l'avrò detto? :spy: ) ma per esempio in pascal si mette begin...end all'inizio e alla fine di ogni ciclo. Sarebbe:


while risposta=="si": *****BEGIN****
while lunghezza<=0: *****BEGIN****
lunghezza = input('Dammi la lunghezza del rettangolo:')******END******
while larghezza<=0:*****BEGIN****
larghezza = input('Dammi la larghezza del rettangolo:')******END******
area = lunghezza * larghezza
print "L'area del rettangolo è",area
risposta=raw_input("Vuoi continuare?")
******END******

(ovviamente con diversa formattazione)
così riconosce le cose da ripetere, può essere che c'è da mettere qualcosa di simile?

Mauro.A
11-04-2011, 22:02
No, purtroppo no, non ha questo tipo di istruzione per aprire e chiudere un ciclo..
Comuque ti voglio ringraziare molto per l'impegno che ci stai mettendo pur non conoscendo Python, molto gentile ^_^


Originariamente inviato da Rising1
non conosco python (l'avrò detto? :spy: ) ma per esempio in pascal si mette begin...end all'inizio e alla fine di ogni ciclo. Sarebbe:


while risposta=="si": *****BEGIN****
while lunghezza<=0: *****BEGIN****
lunghezza = input('Dammi la lunghezza del rettangolo:')******END******
while larghezza<=0:*****BEGIN****
larghezza = input('Dammi la larghezza del rettangolo:')******END******
area = lunghezza * larghezza
print "L'area del rettangolo è",area
risposta=raw_input("Vuoi continuare?")
******END******

(ovviamente con diversa formattazione)
così riconosce le cose da ripetere, può essere che c'è da mettere qualcosa di simile?

Mauro.A
11-04-2011, 23:11
URRà!!!!!!
Ci sono riuscito!!!Ecco come:



for x in range(40):
print"************************************************** ******************************"



print "***CALCOLA L'AREA DEL BLOCCO DI MARMO E IL NUMERO DI LASTRE CHE PUOI OTTENERE***"
print "************************************************** ******************************"
print
start="n"

while start=="n":
Lung=0
Alt=0
Larg=0
Lastra=0
start=raw_input("Vuoi iniziare la sessione?s/n:")
if start=="s":
print ("Buon Lavoro!")
else:
break

while Lung<=0:
Lung=input("Immetti la lunghezza del blocco in cm:")
while Alt<=0:
Alt=input("Immetti l'altezza del blocco in cm:")
while Larg<=0:
Larg=input("Immetti la larghezza del blocco in cm:")
while Lastra <=0:
Lastra=input("Immetti lo spessore delle lastre che vuoi ottenere in cm:")

Nlastre=Larg/Lastra

Area=Lung * Alt

print "----------------------------------------------------------------------"
print "Il numero di lastre che puoi ottenere con questo blocco è:",Nlastre
print "----------------------------------------------------------------------"
print "L'area di questo blocco di marmo è",Area,"cm"
print "----------------------------------------------------------------------"

for y in range(5):
print "************************************************** *******************************"
start=raw_input("Vuoi continuare?s/n:")
if start=="s":
start="n"
else:
break


Adesso voglio solo sapere dagli esperti se come soluzione è accettabile, oppure si può fare meglio con le sole istruzioni if e while.

Quello del rettangolo l'ho risolto in questo modo:



y="s"
while y=="s":
lunghezza = 0
larghezza = 0
y=raw_input("Vuoi calcolare l'area di un rettangolo? (s/n)")
if y=="s":
print""
else:
break
while lunghezza<=0:
lunghezza=input("Inserisci la lunghezza del rettangolo in cm:")
while larghezza<=0:
larghezza=input("Inserischi la larghezza del rettangolo in cm:")
area=lunghezza*larghezza
print "L'area del rettangolo è",area
y=raw_input("Vuoi calcolare l'area di un nuovo rettangolo?(s/n)")
if y=="n":
break
else:
y="s"

Ciao!

Mauro.A
13-04-2011, 00:00
Ne ho fatta anche una versione così, forse è più corretta che dite??




for x in range (5):
print"************************************************** **********************************"
print
print"************************************************** **********************************"
print


start="y"

while start=="y":
print"***BUON LAVORO!***"
print"******************"
lunghezza=0
larghezza=0
spessore=0
area=0
slastra=0
nlastre=0


lunghezza=input("Scrivi la lunghezza della lastra in cm:")
print"--------------------------------------------------"
larghezza=input("Scrivi la larghezza della lastra in cm:")
print"--------------------------------------------------"
spessore=input("Scrivi lo spessore della lastra in cm:")
print"--------------------------------------------------"
slastra=input("Quanto sarà spessa la lastra che ti serve in cm?")
print"--------------------------------------------------"

area=lunghezza * larghezza
nlastre=spessore/slastra

print ("L'area della lastra è"),area,("cm,il numero di lastre che puo ottenere è:"),nlastre
print"--------------------------------------------------"
start=raw_input("Vuoi continuare?s/n:")
if start=="s":
print"**********************************************"

start="y"
else:
print"**ARRIVEDERCI!**"
break

Loading