
# Lezione 8 - Esercizio 1
#
# Scrivere un programma che esegue un conto alla rovescia partendo da un numero intero positivo
# fornito in input dall'utente e arrivando fino a 0.
# 
# Note e consigli:
# - Verificare che il numero inserito dall'utente sia positivo
# - Utilizzare la funzione time.sleep(1) per aspettare 1 secondo

# Il codice qui sotto serve per la soluzione
import time

# Scrivere qui sotto la soluzione:
 #chiedere all'utente un numero intero positivo 
 #verifica se il numero è maggiore di zero
 #finche il numero non raggiunge lo zero printare il numero e decrescere di un'unità e poi aspettare un secondo 

# numero = int(input("dimmi un numero intero positivo per favore? "))
# if numero > 0: 
#     print("numero valido")
# else: 
#     print("numero non valido")
#     exit(0)

# while numero >= 0:  # Finché il numero è maggiore o uguale a 0
#     time.sleep(1)  # Aspettare 1 secondo
#     print(numero)  # Stampare il numero
#     numero -= 1  # Decrementare il numero di 1

# ================================================================================================
# Lezione 8 - Esercizio 2
#
# Scrivere un sistema di verifica della password. Il programma deve chiedere all'utente una password
# e, se la password è corretta, il programma deve stampare "Accesso consentito", altrimenti, la
# password deve essere inserita e verificata nuovamente e così via fino all'inserimento corretto.
# 
# Note e consigli:
# - La funzione input() può essere utilizzata anche per riassegnare una stessa variabile in un
#   secondo momento.

# Il codice qui sotto serve per la soluzione e non deve essere modificato
password_corretta = "Pythonata2024"

# Traduzione in linguaggio naturale schematico:
# 1. L'utente inserisce una password
# 2. Finché la password inserita dall'utente è DIVERSA dalla password corretta:
# 2.1. Stampare "Accesso negato"
# 2.2. Chiedere nuovamente la password all'utente
# 3. Quando succederà che la password sarà UGUALE a quella corretta, la condizione del while 
#    diventerà False, e quindi si uscirà dal while e si andrà oltre, dove stamperemo "Accesso
#      consentito". A quel punto il programma è completo.

# Scrivere qui sotto la soluzione:
# verifica_password = input("mi dici la password per accedere? ")  # Recuperiamo la password dall'input
# if verifica_password != password_corretta:  # Finché la password inserita è diversa da quella corretta
#     print("accesso negato")  # Stampiamo accesso negato
#     verifica_password = input("inserire nuovamente la password ")  # E chiediamo di nuovo la password

# print("accesso consentito")  # Se arriviamo qui, significa che per forza di cose la condizione del while
#                              # è risultata False, e quindi per forza di cose la password è corretta


# ================================================================================================
# Lezione 8 - Esercizio 3
#
# Scrivere un programma che simula un processo di controllo qualità in una linea di produzione
# industriale. Il programma deve chiedere all'utente di inserire il risultato di un controllo
# qualità, che può essere "passato" o "fallito". Il programma continua a chiedere i risultati finché
# non viene inserito "fallito". Quando un controllo fallisce, stampare "Prodotto difettoso trovato,
# linea di produzione fermata." e terminare il programma. Qualora l'utente dovesse inserire la
# stringa "esci", invece, terminare immediatamente il programma senza ulteriori messaggi.
# 
# Note e consigli:
# - E' possibile utilizzare le istruzioni continue e/o break e/o la funzione exit(0), tuttavia non è
#   obbligatorio. Questo esercizio è il tipico esempio di esercizio risolvibile in innumerevoli modi
#   molto differenti tra loro.

# 1. Continua, all'infinito, a fare le seguenti operazioni:
# 1.1. Chiedere all'utetne qual è il risultato del controllo qualità (passato/fallito/esci)
# 1.2. Se il risultato è "passato", allora continuare il processo e chiedere il prossimo risultato
# 1.3. Se il risultato è "fallito", interrompere il chiedimento e stampare "prodotto difettoso..."
# 1.4. Se il risultato è "esci", interrompere il programma senza stampare nulla.
# 1.5. Se c'è qualsiasi altro risultato, allora continuare il processo e chiedere il prossimo risultato,
#      stampando, però, che il risultato inserito non è valido.

# Scrivere qui sotto la soluzione:
## risultato_qualità = input("qual è il risultato del controllo della qualità? ")
## while risultato_qualità != "fallito":

# while True:
#     risultato_controllo = input("qual è il risultato del controllo qualita? (passato/fallito/esci) ")
#     if risultato_controllo == "passato":
#         print("Ok, passiamo al prodotto successivo")
#         continue
#     elif risultato_controllo == "fallito":
#         print("prodotto difettoso")
#         break
#     elif risultato_controllo == "esci":
#         exit(0)  # Se fuori dal while (dalla riga 102 in poi) non c'è altro codice da eseguire, questo può essere break
#     else:
#         print("il risultato non è valido")



# ================================================================================================
# Lezione 8 - Esercizio 4
#
# Scrivere un programma che continua a chiedere all'utente di inserire numeri interi. Il programma
# deve ignorare (NON elaborare) i numeri negativi inseriti, mentre deve stampare il quadrato (** 2)
# di tutti i numeri positivi inseriti. In altre parole, se il numero inserito è negativo, il
# programma non deve fare nulla e chiedere il prossimo numero. Se, invece, è positivo, il programma
# deve stampare il suo quadrato. Se l'utente inserisce, invece, il numero 0, il programma deve
# terminare.
# 
# Note e consigli:
# - Per l'elevazione a quadrato esiste l'operatore ** in Python (es.: 2 ** 3 -> 8)

# Continua, all'infinito, ad eseguire le seguenti operazioni:
# 1. Chiedere un numero intero
# 1.2. Se il numero è positivo, allora stampare il suo quadrato
# 1.2. Altrimenti, se il numero è negativo, allora non fare nulla e chiedere il prossimo numero
# 1.3. Altrimenti, se il numero è esattamente 0, allora terminare il programma

# Scrivere qui sotto la soluzione:
# while True:
#     numero_inserito = int(input("Puoi inserire un numero intero? "))
#     if numero_inserito > 0:
#         print(f"Il quadrato di {numero_inserito} è: {numero_inserito ** 2}.")
#     elif numero_inserito < 0:
#         print("Il numero deve essere positivo.")
#     else:
#         print("Hai inserito 0, il programma ora si chiuderà.")
#         exit(0)


# Lezione 9 - Esercizio 1
# Scrivere un programma che chiede all'utente di inserire numeri interi positivi.
# Il programma deve determinare il numero minimo inserito dall'utente.
# Il ciclo termina quando l'utente inserisce "0".
#
# 1. Chiedere all'utente di inserire numeri interi positivi uno alla volta.
# 2. Ignorare tutti i numeri negativi utilizzando 'continue'.
# 3. Aggiornare e stampare il numero minimo ogni volta che viene inserito un nuovo numero valido.
# 4. Terminare il ciclo quando viene inserito "0".
#
# Note e consigli:
# - Utilizzare 'continue' per gestire eventuali numeri negativi.
# - Assicurarsi di resettare il minimo in modo appropriato.
# - Commentare il codice per spiegare il funzionamento del ciclo e delle condizioni.

# Scrivere qui sotto la soluzione:


# Lezione 9 - Esercizio 3
# Scrivere un programma che aiuta a tenere traccia delle spese. L'utente inserisce le spese finché
# il totale non supera il budget di 500€.
#
# 1. Chiedere all'utente di inserire una spesa alla volta.
# 2. Sommare le spese e termina il ciclo se il totale supera 500€.
# 3. Se l'utente inserisce un valore negativo, usare 'continue' per ignorarlo.
# 4. Alla fine, se il budget è stato superato, stampare un avviso.
#
# Note e consigli:
# - Utilizzare 'continue' per gestire le spese negative.
# - Tenere traccia del totale delle spese e confrontarlo con il budget.
# - Fornire feedback all'utente sullo stato del budget.

# Descrizione in linguaggio naturale schematizzato:
# 1. Vediamo il budget come una variabile che possiamo modificare che rappresenta i soldi che abbiamo a dispozione
#    Quindi, questo budget si ridurrà in base alle spese che facciamo, partendo da 500€
# 2. Finché abbiamo soldi (-> il budget è positivo)
#    a) chiediamo la nuova pesa che l'utente vuole effettuare
#    b) se questa spesa è un numero negativo, informiamo l'utente di ciò, non modifichiamo nulla e continuiamo all'iterazione successiva.
#    c) nel caso in cui la spesa fosse stata un numero positivo, possiamo, senza verificare nulla, decrementare il nostro budget della spesa effettuata.
#    d) se, a questo punto, il budget è diventato negativo, significa che l'utente ha finito i soldi. Quindi possiamo informarlo di ciò.
#    e) infine, mostriamo all'utente il suo budget rimanente.

budget = 500 

while budget > 0:
    print(f"Hai {budget:.2f}€ a disposizione.")
    spesa = float(input("Quanto vuoi spendere? "))

    if spesa < 0:
        print(f"AO, ma che stai a fa, vuoi spende {spesa:.2f}€. Magari si potesse fare così che ti ricaricano il conto quando spendi... Scrivi un valore realistico, pezzente.")
        continue
    
    budget -= spesa
    
print(f"Ti sei finito i soldi. Il conto è letteralmente in negativo, infatti hai {budget:.2f}€. \nPezzente.")