Eliminare ripetizione su Python

Pubblicità

V&N0M

Nuovo Utente
Messaggi
130
Reazioni
29
Punteggio
34
#Su una somma di denaro in input si vuole applicare un'imposta progressiva secondo lo schema:
#da 0 a 5000 euro: 10%
#dopo i 5000 euro fino a 15000: 20%
#oltre i 15000 euro: 30%
#Stampare l'ammontare dell'imposta

denaro=float(input("Inserisci somma di denaro: "))
if denaro >= 0 and denaro <= 5000:
print("L'ammontare dell'imposta è di",denaro*10/100,"€")
elif denaro >5000 and denaro <=15000:
print("L'ammontare dell'imposta è di",denaro*20/100,"€")
else:
print("L'ammontare dell'imposta è di",denaro*30/100,"€")

Domanda: E' possibile sostituire o togliere la ripetizione di denaro "if denaro > 0 and denaro <= 5000:",elif denaro >5000 and denaro <=15000: ?
 
non conosco Python ma se intendi dire se sia possibile scrivere qualcosa come
5000<denaro<=15000 in genere in tutti i linguaggi che conosco la risposta è no;
intanto puoi controllare direttamente che l'input denaro sia >0 (altrimenti le tasse non hanno senso)
poi, una volta che sei certo che denaro è > 0 cambi l'ordine degli if,, qualcosa come
Codice:
if denaro>0
   if denaro<=5000
      print (...)
   elif denaro>15000
      print(...)
   else    # in questo caso 5000<denaro<=15000
     print(...)
in questo modo non ripeti

P.S.
le moltiplicazioni come le hai scritte proprio non mi piacciono...
 
non conosco Python ma se intendi dire se sia possibile scrivere qualcosa come
5000<denaro<=15000 in genere in tutti i linguaggi che conosco la risposta è no;
intanto puoi controllare direttamente che l'input denaro sia >0 (altrimenti le tasse non hanno senso)
poi, una volta che sei certo che denaro è > 0 cambi l'ordine degli if,, qualcosa come
Codice:
if denaro>0
   if denaro<=5000
      print (...)
   elif denaro>15000
      print(...)
   else    # in questo caso 5000<denaro<=15000
     print(...)
in questo modo non ripeti

P.S.
le moltiplicazioni come le hai scritte proprio non mi piacciono...
Ho capito grazie,tu come le avresti scritte? perchè io conosco solo il metodo con l'uso dell * su py
 
Ultima modifica:
Ho capito grazie,tu come le avresti scritte? perchè io conosco solo il metodo con l'uso dell * su py

Comunque l'esercizio è sbagliato algoritmicamente, non stai calcolando nessuna imposta progressiva ma solo la percentuale di un certo numero, il che non centra niente con la progressività di un imposta. Se ad esempio nel tuo codice immetto 15000 come dato, il risultato sarò 3000 cioè il 20% di 15000, ma sappiamo benissimo tutti che l'imposta irpef va a scaglioni:

Per comodità il dato immesso sarà 15000€

Ti descrivo l'algoritmo semplificato:
1) Calcolo il 10% sul primo range che va da 0 a 5000€ -> 5000 * 10 / 100 = 500€
2) Calcolo il 20% sul secondo range che va da 5001 a 15000 -> sottraggo i 5000€ già calcolati 15000 - 5000 = 1000 e ci calcolo il secondo scaglione sui 10000€ -> 1000 * 20 / 100 = 2000

Ora sommo gli scaglioni: scaglione 1: 500 scaglione 2: 2000 come puoi vedere lo scaglione 3 non vi è perchè i soldi sono finiti :rock:, il tutto fa 2500€ di imposta

E se ti interessa ecco il codice che fa funzionare il tutto:

Python:
max_Calcolabile = 15000; max_Percentuale = 30
range_Imposta = [
    [0, 5000, 10],
    [5000, 15000, 20],
    ]

def calcola_Imposta(entrata):
    paga = []
    for r in range_Imposta:
        if all([entrata > r[0], entrata > r[1]]):
            paga.append((r[1]-r[0]) * r[2]/100)
        elif all([entrata > r[0], entrata <= r[1]]):
            paga.append((entrata-r[0]) * r[2]/100)
    if entrata > max_Calcolabile:
        paga.append((entrata-max_Calcolabile) * max_Percentuale/100)
    return int(sum(paga))

test_0 = float(input("Inserisci somma di denaro: "))
imposte = {"Gatto": test_0}
for key in imposte:
    imposte[key] = calcola_Imposta(imposte[key])

print(imposte)
 
Ultima modifica:
Comunque l'esercizio è sbagliato algoritmicamente, non stai calcolando nessuna imposta progressiva ma solo la percentuale di un certo numero, il che non centra niente con la progressività di un imposta. Se ad esempio nel tuo codice immetto 15000 come dato, il risultato sarò 3000 cioè il 20% di 15000, ma sappiamo benissimo tutti che l'imposta irpef va a scaglioni:

Per comodità il dato immesso sarà 15000€

Ti descrivo l'algoritmo semplificato:
1) Calcolo il 10% sul primo range che va da 0 a 5000€ -> 5000 * 10 / 100 = 500€
2) Calcolo il 20% sul secondo range che va da 5001 a 15000 -> sottraggo i 5000€ già calcolati 15000 - 5000 = 1000 e ci calcolo il secondo scaglione sui 10000€ -> 1000 * 20 / 100 = 2000

Ora sommo gli scaglioni: scaglione 1: 500 scaglione 2: 2000 come puoi vedere lo scaglione 3 non vi è perchè i soldi sono finiti :rock:, il tutto fa 2500€ di imposta

E se ti interessa ecco il codice che fa funzionare il tutto:

Python:
max_Calcolabile = 15000; max_Percentuale = 30
range_Imposta = [
    [0, 5000, 10],
    [5000, 15000, 20],
    ]

def calcola_Imposta(entrata):
    paga = []
    for r in range_Imposta:
        if all([entrata > r[0], entrata > r[1]]):
            paga.append((r[1]-r[0]) * r[2]/100)
        elif all([entrata > r[0], entrata <= r[1]]):
            paga.append((entrata-r[0]) * r[2]/100)
    if entrata > max_Calcolabile:
        paga.append((entrata-max_Calcolabile) * max_Percentuale/100)
    return int(sum(paga))

test_0 = float(input("Inserisci somma di denaro: "))
imposte = {"Gatto": test_0}
for key in imposte:
    imposte[key] = calcola_Imposta(imposte[key])

print(imposte)
Grazie mille per la dritta l'ho rifatto senza guardare il tuo codice, ho letto solo la tua spiegazione, ancora sono alle prime armi e programmo da noob, come vedrai dal codice sotto,alcune cose del tuo codice ancora non le ho "studiate" comunque è stato un errore mio, la didascalia sotto l'esercizio che spiegava appunto ciò che hai detto tu c'èra ma non l'ho letta. Se ti interessa questo link porta ad uno screen del mio programma: https://ibb.co/mdc5Jk
Adesso sto cercando di capire come lo hai scritto tu.
 
Grazie mille per la dritta l'ho rifatto senza guardare il tuo codice, ho letto solo la tua spiegazione, ancora sono alle prime armi e programmo da noob, come vedrai dal codice sotto,alcune cose del tuo codice ancora non le ho "studiate" comunque è stato un errore mio, la didascalia sotto l'esercizio che spiegava appunto ciò che hai detto tu c'èra ma non l'ho letta. Se ti interessa questo link porta ad uno screen del mio programma: https://ibb.co/mdc5Jk
Adesso sto cercando di capire come lo hai scritto tu.
Non ho verificato il codice che hai scritto visto che era un immagine, ti consiglio di metterlo qui sotto i tag code. Comunque il mio consiglio è di tentare un approccio iterativo, va bene usare le if ma perché i scaglioni sono pochi, ora immagina se gli scaglioni fossero stati 100?,Avresti dovuto fare 100 if.
 
Non ho verificato il codice che hai scritto visto che era un immagine, ti consiglio di metterlo qui sotto i tag code. Comunque il mio consiglio è di tentare un approccio iterativo, va bene usare le if ma perché i scaglioni sono pochi, ora immagina se gli scaglioni fossero stati 100?,Avresti dovuto fare 100 if.
Ci proverò, sto provando ad inserire il codice ma non funziona, i tag sono [ CODE] *codice del programma* [ /CODE] ?
 
il tag CODE va usato senza spazi
Python:
importo=float(input("Inserisci importo: "))
scaglione1= 5000
scaglione2= 15000
aliquota1= 10
aliquota2= 20
aliquota3= 30
if importo > 0:
    if importo <= scaglione1:
        imposta= importo * aliquota1 / 100
        print("L'imposta da pagare è",imposta)
    elif importo <= scaglione2:
         imposta= scaglione1 * aliquota1 / 100
         imposta = imposta + (importo - scaglione1) * aliquota2 / 100
         print("L'imposta da pagare è",imposta)
    else:
        imposta=scaglione1*aliquota1 / 100
        imposta= imposta + (scaglione2 - scaglione1)*aliquota2 / 100
        imposta = imposta + (importo - scaglione2) * aliquota3 / 100
        print("L'imposta da pagare è",imposta)
 
Ultima modifica:
Ci proverò, sto provando ad inserire il codice ma non funziona, i tag sono [ CODE] *codice del programma* [ /CODE] ?
Si e se possibile specifica il nome del linguaggio per evidenziare la sintassi e se il codice è corposo metti tutto sotto spoiler:

[ spoiler]
[ code="python"]

codice bla bla

[/ code]
[/ spoiler]

"tutto senza spazi"
 
Ultima modifica:
Se vuoi sperimentare anche un po' di ricorsione, array slicing e "pythonic inline if", considera anche questa idea, piuttosto compatta:

Python:
scaglioni = [0, 5000, 15000]
aliquote = [10, 20, 30]

def imposta(entrate, scaglioni, aliquote):
    if len(scaglioni) > 0 and len(aliquote) > 0:
        return ((entrate - scaglioni[-1])*aliquote[-1]/100 if entrate > scaglioni[-1] else 0) + imposta(scaglioni[-1] if entrate > scaglioni[-1] else entrate, scaglioni[:-1], aliquote[:-1])
    else:
        return 0

try:
    while True:
        print(imposta(float(input('Valore da tassare:')), scaglioni, aliquote))
except:
    pass

Scaglioni e aliquote in quantità arbitraria, ovviamente però dovrebbero esserci tanti scaglioni quante aliquote e gli scaglioni tassativamente in ordine crescente.
La funzione "imposta" potrebbe essere addirittua espressa in una sola riga sfruttando ulteriormente l'inline if, ma si perderebbe chiarezza (già ora richiede un attimo di attenzione...).

Alcuni output:
Codice:
Valore da tassare:5000
500.0
Valore da tassare:8000
1100.0
Valore da tassare:15000
2500.0
Valore da tassare:20000
4000.0
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top