import random
import sys

def zahlenerraten():
    Nummer = random.randint(1, 100)
    Versuche = 0
    Erraten = False
    Max_Versuche = None
    Versuch_Zähler = 0
    Falsche_Eingabe = 0
    
    print('Bevor wir beginnen, hier die einzelnen Bedeutungen: \n\n"Deine Zahl ist viel zu klein/groß". Unterschied von 20 Zahlen.\n"Deine Zahl ist zu klein/groß". Unterschied von 15 Zahlen.')
    print('"Deine Zahl ist kleiner/größer". Unterschied von 10 Zahlen.\n"Deine Zahl ist etwas kleiner/größer". Unterschied von 5 Zahlen.')
    print('Jeder Modus besitzt einen gewissen Bereich, in denen sie Tipps geben.\nBei "Schwer" bis ±15, "Mittel" bis ±10, "Leicht" und "Fun" beides ±5.')
    print('\nNun starten wir!\nErrate meine Zahl! Du kannst zwischen einer Zahl von 1 bis 100 auswählen.')
    
    while Falsche_Eingabe < 3:
    
        Eingabe0 = input('Wähle den Schwierigkeitsgrad zwischen Leicht, Mittel, Schwer und Fun aus: ').strip().lower()
        
        
        if Eingabe0 == 'leicht':
            Max_Versuche = 15
            print('Du hast 15 Versuche. Viel Erfolg!')
            break
        elif Eingabe0 == 'mittel':
            Max_Versuche = 8
            print('Du hast 8 Versuche. Viel Erfolg!')
            break
        elif Eingabe0 == 'schwer':
            Max_Versuche = 5
            print('Du hast 5 Versuche. Viel Erfolg!')
            break
        elif Eingabe0 == 'fun':
            Max_Versuche = float('inf')
            print('Du hast unendlich Versuche. Viel Erfolg!')
            break
        else:
            Falsche_Eingabe += 1
            if Falsche_Eingabe < 3:
                print('Deine Eingabe war fehlerhaft.\nBitte stelle nächstes Mal sicher wie du es schreibst.\nDu kannst den Schwierigkeitsgrad jetzt erneut wählen. ')
            
    if Falsche_Eingabe == 3:
        print('Du hast zu oft den Schwierigkeitsgrad falsch geschrieben. Das Programm wird jetzt geschlossen.')
        sys.exit()
            
    
    while not Erraten and Versuche < Max_Versuche:
        Eingabe = int(input('Gib eine Zahl ein: '))
        
        if Eingabe < 1 or Eingabe > 100:
            print('Gibt bitte eine Zahl zwischen 1 bis 100 ein.\nDies wird nicht als Versuch gewertet.')
            continue
        
        Versuche += 1
        Versuch_Zähler += 1
        Abweichung = Eingabe - Nummer
        
        if Eingabe == Nummer:
            Erraten = True
            print(f'Gut gemacht. Du hast die Zahl {Nummer} in {Versuche} Versuchen richtig erraten!')
            break
        
        
        if Eingabe0 == "fun" and Versuch_Zähler >= 8 and Versuch_Zähler % 8 == 0:
            Nummer = random.randint(1, 100) 
            print("Die Zahl hat sich geändert.")
        
        
        if Eingabe == Nummer:
            Erraten = True
            print(f'Du hast die Zahl in {Versuche} Versuchen erraten!')
        elif Abweichung < -20:
            print('Deine Zahl ist viel zu klein!')
        elif Abweichung > 20:
            print('Deine Zahl ist viel zu groß!')
            
        if Eingabe0 == 'schwer':
            if -20 <= Abweichung <= -15:
                print('Deine Zahl ist zu klein!')
            elif 15 <= Abweichung <= 20:
                print('Deine Zahl ist zu groß!')
            elif -15 <= Abweichung <= -1 or 1 <= Abweichung <= 15:
                print('Deine Zahl ist nah dran! Die Frage ist, ist sie größer oder kleiner.')
                
        if Eingabe0 == 'mittel':
            if -20 <= Abweichung <= -15:
                print('Deine Zahl ist zu klein!')
            elif 15 <= Abweichung <= 20:
                print('Deine Zahl ist zu groß!')
            elif -15 <= Abweichung <= -10:
                print('Deine Zahl ist kleiner!')
            elif 10 <= Abweichung <= 15:
                print('Deine Zahl ist größer!')
            elif -10 <= Abweichung <= -1 or 1 <= Abweichung <= 10:
                print('Deine Zahl ist nah dran! Ist sie nun kleiner oder größer?')
         
        if Eingabe0 in ['leicht', 'fun']:
            if -20 <= Abweichung <= -15:
                print('Deine Zahl ist zu klein!')
            elif 15 <= Abweichung <= 20:
                print('Deine Zahl ist zu groß!')
            elif -15 <= Abweichung <= -10:
                print('Deine Zahl ist kleiner!')
            elif 10 <= Abweichung <= 15:
                print('Deine Zahl ist größer!')
            elif -10 <= Abweichung <= -5:
                print('Deine Zahl ist etwas kleiner!')
            elif 5 <= Abweichung <= 10:
                print('Deine Zahl ist etwas größer!')
            elif -5 <= Abweichung <= -1 or 1 <= Abweichung <= 5:
                print('Du bist nah dran. Ist es jetzt niedriger oder nicht?')
            
        if Eingabe0 in ['leicht', 'mittel', 'schwer']:
            print(f'Du hast nur noch {Max_Versuche - Versuche} Versuche übrig!')
            
            
    if not Erraten:
        print(f'Du hast es leider nicht geschafft. Die Richtig Zahl war {Nummer}.\nViel Glück beim nächsten Mal!')
            
    
zahlenerraten()
