PDA

View Full Version : [Python]Aiuto con code.


andreiiiz
14-11-2011, 15:02
Sono alle prime armi col python e stavo cercando di creare un mio primo programmino, però non riesco a capire perchè quando vado a seguire questa prima parte di codice che ho buttato giù, la shell mi si chiude al'istante senza farmi visualizzare niente.
Ecco il codice:


#Calcolatrice scientifica beta v 1.0.

import math


scelta = raw_input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n")

if scelta <= 0 or scelta > 4
print "Devi inserire un numero da 1 a 4 \n"

raw_input()

*andre*
14-11-2011, 16:16
Premetto di non sapere molto di Python, ma il codice non è indentato bene e gli manca un ':' dopo la condizione dell'if


#Calcolatrice scientifica beta v 1.0.

import math


scelta = raw_input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n")

if scelta <= 0 or scelta > 4:
print "Devi inserire un numero da 1 a 4 \n"

raw_input()

andreiiiz
14-11-2011, 20:16
Grazie per la risposta ma non cambia niente..la shell si chiude immediatamente..

Qualche aiuto?

andreiiiz
15-11-2011, 07:11
Scusate ma e' possibile che nessuno da fare una scemenza del genere? O.o

cdimauro
15-11-2011, 07:38
d:\C\Python27.NET>python.exe Prova.py
### Calcolatrice scientifica v.1.0. ###
Scegli una delle seguenti operazioni:
1) Addizione.
2) Sottrazione.
3) Moltiplicazione.
4) Divisione.
1
Devi inserire un numero da 1 a 4

2

d:\C\Python27.NET>

andreiiiz
15-11-2011, 12:37
Io lo sto provando con windows, praticamente compilo il codice da me postato con notepad++, poi lo eseguo cliccando sull'ex e la shell mi si chiude immediatamente..Non ho la possibilità di provare con linux ora, quindi mi sono bloccato e non capisco dove sia il problema..

ndakota
15-11-2011, 13:00
Quello E' Windows. Prova ad eseguirlo, come ha fatto lui, da terminale.

andreiiiz
15-11-2011, 19:53
Ho compilato e eseguito il programma su linux tramite terminale e dopo aver indentato il codice non mi da problemi. Ora però mi da un errore di sintassi sull'if e non capisco dove sia l'errore..questo è il codice:

#Calcolatrice scientifica beta v 1.0.

import math


scelta = raw_input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n"
if scelta <= 1 or scelta > 4:
print "Devi inserire un numero da 1 a 4 \n"
raw_input()

ndakota
15-11-2011, 20:01
Ho compilato e eseguito il programma su linux tramite terminale e dopo aver indentato il codice non mi da problemi. Ora però mi da un errore di sintassi sull'if e non capisco dove sia l'errore..questo è il codice:

#Calcolatrice scientifica beta v 1.0.

import math


scelta = raw_input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n"
if scelta <= 1 or scelta > 4:
print "Devi inserire un numero da 1 a 4 \n"
xxraw_input()



#Calcolatrice scientifica beta v 1.0.

import math


scelta = raw_input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n")

if scelta <= 1 or scelta > 4:
print "Devi inserire un numero da 1 a 4 \n"

raw_input()


Non hai chiuso la tonda del raw_input. Inoltre, perchè fai un livello di indentazione anche se non ce n'è bisogno? In Python a queste cose sei obbligato a starci attento, per fortuna aggiungerei.

andreiiiz
15-11-2011, 20:31
Ecco, mi stavo scervellando :D grazie!
Ne approfitto per fare un altra domanda.. Come mai se scrivo :


print "Il risultato è", n3

Mi da errore nameError n3 is not defined quando prima avevo scritto n3 = n1 + n2?

ndakota
15-11-2011, 21:02
Dovresti postare tutto il codice, non siamo degli indovini :p

andreiiiz
15-11-2011, 21:07
#Calcolatrice scientifica beta v 1.0.

import math

def addizione():
n1 = raw_input ("inserisci il primo numero:\n")
n2 = raw_input ("Inserisci il secondo numero:\n")

n3 = n1 + n2

print "Il risultato e'",n3

scelta = raw_input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n")

if scelta < 1 or scelta > 4:
print "Devi inserire un numero da 1 a 4 \n"
elif scelta == 1:
addizione()
elif scelta == 2:
sottrazione()
elif scelta == 3:
moltiplicazione()
elif scelta == 4:
divisione()

raw_input()

ndakota
15-11-2011, 21:11
E' una variabile locale alla funzione addizione. Non esiste al di fuori.


def addizione():
n1 = raw_input ("inserisci il primo numero:\n")
n2 = raw_input ("Inserisci il secondo numero:\n")

return n1 + n2

print "Il risultato e' ", addizione()

andreiiiz
15-11-2011, 21:46
Mi spiace ma così non va..


#Calcolatrice scientifica beta v 1.0.

import math

def addizione():
n1 = raw_input ("inserisci il primo numero:\n")
n2 = raw_input ("Inserisci il secondo numero:\n")


return n1 + n2
print "Il risultato e'", addizione()

scelta = raw_input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n")

if scelta < 1 or scelta > 4:
print "Devi inserire un numero da 1 a 4 \n"
elif scelta == 1:
addizione()
elif scelta == 2:
sottrazione()
elif scelta == 3:
moltiplicazione()
elif scelta == 4:
divisione()

raw_input()

Se provi questo codice vedrai che esce la scritta:
Il risultato e' inserisci il primo numero:

come prima cosa quindi c'è qualcosa che non va!

ndakota
16-11-2011, 07:47
Scusa ma non vedi che i blocchi nel tuo codice non sono indentati come nel mio?? Ci credo che non funziona!

Correzione in bold


#Calcolatrice scientifica beta v 1.0.

import math

def addizione():
n1 = raw_input ("inserisci il primo numero:\n")
n2 = raw_input ("Inserisci il secondo numero:\n")


return n1 + n2

print "Il risultato e'", addizione()

scelta = raw_input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n")

if scelta < 1 or scelta > 4:
print "Devi inserire un numero da 1 a 4 \n"
elif scelta == 1:
addizione()
elif scelta == 2:
sottrazione()
elif scelta == 3:
moltiplicazione()
elif scelta == 4:
divisione()

raw_input()

cdimauro
16-11-2011, 07:59
Altra cosa raw_input restituisce la STRINGA immessa dall'utente, che ovviamente NON è un intero.

Per Python < 3.0, si può usare input al posto di raw_input, che VALUTA l'espressione immessa dall'utente. Per Python 3.0+ serve utilizzare input (che è la vecchia raw_input) e provvedere poi alla valutazione "manualmente" (passando il valore alla funzione/costruttore int, ad esempio).

andreiiiz
16-11-2011, 12:44
ndakota grazie per la tua pazienza ma anche con il tuo codice non cambia assolutamente nulla mi dice sempre "il risultato e' inserire il primo numero"! :S

@cdimauro: grazie, come vedo che versione è il mio python?

cdimauro
16-11-2011, 13:24
Dovrebbe già apparirti quando lanci Python (senza script, quindi con l'interprete interattivo).

Comunque:
>>> import sys
>>> sys.version
0: '2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)]'

andreiiiz
16-11-2011, 13:31
Ok, grazie, attendo ndakota per l'aiuto col code!

ndakota
16-11-2011, 20:18
Bè, da quello che dici non sembra sbagliato, visto che la prima cosa che fa la funzione è chiederti un numero da tastiera. Inseriscilo!

andreiiiz
16-11-2011, 21:49
No, non hai inteso..

Il programma invece di dire "inserisci il primo numero", dice "il risultato è inserisci il primo numero".
C'è qualcosa di sbagliato!

ndakota
16-11-2011, 21:58
#Calcolatrice scientifica beta v 1.0.

import math

def addizione():
n1 = 5
n2 = 6

return n1 + n2

print "Il risultato e'", addizione()

scelta = raw_input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n")

if scelta < 1 or scelta > 4:
print "Devi inserire un numero da 1 a 4 \n"
elif scelta == 1:
addizione()
elif scelta == 2:
sottrazione()
elif scelta == 3:
moltiplicazione()
elif scelta == 4:
divisione()

raw_input()


A me sembra di aver inteso. Fai questa prova allora.

andreiiiz
16-11-2011, 22:05
Si così funziona, cioè mi da il risultato 11. Però se invece ci metto il raw input mi dice "il risultato è inserisci il primo numero".

E poi io voglio che quella funzione sia richiamata solo nel caso l'utente scelga come opzione dal menu "addizione" e non che il programma deve iniziare con l'addizione direttamente.. Mi sto incartando nel nulla proprio.

ndakota
16-11-2011, 22:13
E vabbè scusa ma non posso mica fartelo io. Comunque potresti fare qualcosa del genere.


#Calcolatrice scientifica beta v 1.0.

import math

def addizione(n1, n2):
return n1 + n2

def sottrazione(n1, n2):
return n1 - n2

def moltiplicazione(n1, n2):
return n1 * n2

def divisione(n1, n2):
return n1 / n2

n1 = raw_input ("inserisci il primo numero:\n")
n2 = raw_input ("Inserisci il secondo numero:\n")

scelta = raw_input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n")

print "Il risultato e'"

if scelta < 1 or scelta > 4:
print "Devi inserire un numero da 1 a 4 \n"
elif scelta == 1:
print addizione(n1, n2)
elif scelta == 2:
print sottrazione(n1, n2)
elif scelta == 3:
print moltiplicazione(n1, n2)
elif scelta == 4:
print divisione(n1, n2)

raw_input()


Non l'ho provato. Provalo perchè io ho installato la versione 3 e mi scoccio ogni volta a sistemare :D

andreiiiz
16-11-2011, 22:17
Ma infatti non ho chiesto di farlo te, ho chiesto semplicemente perchè quel codice non va bene! Cioè perchè se metto la funziona a inizio codice me la legge come prima cosa nel programma e non quando la richiamo? E poi non riesco a capire perchè se scrivo

def addizione():
n1 = raw_input("inserisci il primo numero \n")
n2 = raw_input("inserisci il secondo numero \n")

return n1 + n2

print "Il risultato e'", addizione()


Non funziona come dovrebbe, cioè invece di chiedermi i dati in input mi va direttamente al print.. Cioè io faccio tutto come è scritto sul libro però non va..

Sinceramente di far funzionare la calcoltrice non me ne frega nulla, a interessa capire, anche perchè non credo che la userà mai qualcuno..

ndakota
16-11-2011, 22:22
In realtà non va direttamente al print. Tant'è che se togli la chiamata ad addizione le print non te le stampa. Il problema è che quando trova questa riga


print "Il risultato e'", addizione()


Prima esegue addizione() e addizione ha quelle print.

andreiiiz
16-11-2011, 22:28
Ecco appunto, allora se con print "il risultato è," addizione(), non funziona con n3 = n1 + n2 e poi dire print "il risultato è", n3 neanche, come posso scrivere per farmi stampare un risultato senza prendere i dati da argomento??

ndakota
16-11-2011, 22:32
Così?


def addizione():
n1 = raw_input("inserisci il primo numero \n")
n2 = raw_input("inserisci il secondo numero \n")

return n1 + n2

n3 = addizione()

print "Il risultato e'", n3


Occhio a quello che ti ha detto cdimauro su raw_input però.

Credo tu debba fare una cosa del genere per quelle due righe

n1 = int(raw_input("inserisci il primo numero \n"))
n2 = int(raw_input("inserisci il secondo numero \n"))

cdimauro
17-11-2011, 06:34
DEVE. Oppure, se ha Python <= 2.7, al posto di raw_input usa input e si leva il pensiero della valutazione.

andreiiiz
17-11-2011, 11:00
Ok, allora mi spiegate una cosa?
In python non è come in C, che posso definire la funzione anche all'inizio del codice per poi richiamarla quando voglio? Perchè se io definisco la funzione a inizio codice, il programma legge prima la funzione e poi mi va al menu di scelta..

[intendo così]

#Calcolatrice scientifica beta v 1.0.

import math

def addizione():
n1 = input("inserisci il primo numero \n")
n2 = input("inserisci il secondo numero \n")

return n1 + n2

n3 = addizione()

print "Il risultato e'", n3

scelta = input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n")

if scelta < 1 or scelta > 4:
print "Devi inserire un numero da 1 a 4 \n"
elif scelta == 1:
addizione()


Invece se io la definisco a fine programma ovvero dopo il menù di scelta, mi printa prima il "menù".
Cioè così:

#Calcolatrice scientifica beta v 1.0.

import math


scelta = input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n")

if scelta < 1 or scelta > 4:
print "Devi inserire un numero da 1 a 4 \n"
elif scelta == 1:
addizione()
elif scelta == 2:
print sottrazione(n1, n2)
elif scelta == 3:
print moltiplicazione(n1, n2)
elif scelta == 4:
print divisione(n1, n2)

def addizione():
n1 = input("inserisci il primo numero \n")
n2 = input("inserisci il secondo numero \n")

return n1 + n2

n3 = addizione()

print "Il risultato e'", n3


E comunque nonostante tutto se nel secondo codice al menù di scelta digito 1 (cioè l'addizione) mi da errore. C'è un altro errore nel codice o.o

ndakota
17-11-2011, 13:00
Ok, allora mi spiegate una cosa?
In python non è come in C, che posso definire la funzione anche all'inizio del codice per poi richiamarla quando voglio?


Certo che è così! Il problema è che tu sposti insieme definizione e chiamata! La definizione è questa


def addizione():
n1 = input("inserisci il primo numero \n")
n2 = input("inserisci il secondo numero \n")

return n1 + n2


La chiamata è questa


n3 = addizione()


Ma mica sei obbligato a far seguire la definizione dalla chiamata. Puoi fare benissimo così


#Calcolatrice scientifica beta v 1.0.

import math

def addizione():
n1 = input("inserisci il primo numero \n")
n2 = input("inserisci il secondo numero \n")

return n1 + n2

scelta = input( " ### Calcolatrice scientifica v.1.0. ###"
" \n "
" Scegli una delle seguenti operazioni: \n"
" 1) Addizione. \n"
" 2) Sottrazione. \n"
" 3) Moltiplicazione. \n"
" 4) Divisione. \n")

n3 = addizione()

print "Il risultato e'", n3