Python-2

### AUFGABE 1
'''
a) Lege eine Variable namens userBalance an und setze diese = 0
b) Lasse den Nutzer eine Eingabe machen: Frage den Nutzer dabei "How long are you married?"
c) Caste die Nutzereingabe als Integer
d) Sorge dafür dass der Code nicht crasht egal was Nutzer eingibt
e) Gebe im except bereich "invalid value" in Konsole aus
f) Wenn Nutzer 0 eingibt, printe: "Enjoy Your Freedom 😎"
g) Wenn Nutzer mehr als 0 Jahre verheiratet ist, printe: "That's so lovely 😻"
h) Implementiere folgende Logik: Wenn nutzer verheiratet ist länger als:
0 Jahre, printe: "That's so lovely" 😻
10 Jahre, addiere 10 zur userBalance und printe: "Congratulations 🥰, you just won 10 free coins"
25 Jahre, addiere 25 zur userBalance und printe: "Wow 🥳🥰 Congratulations, you just won 50 free coins"
50 Jahre, addiere 50 zur userBalance und printe: "OMG!! 😻😻😻 Thats so beautiful, you just won 100 free coins"
i) Wenn der Nutzer negative Zahl eingibt, triggere eine Error Meldung: raise Exception("Sorry, can't go back in time yet ^^")
'''

userBalance = 0 # a)
married = input("How long are you married? ") # b)

try: # d)

married = int(married) # c)

if married < 0: # i)
raise Exception("Sorry, can't go back in time yet ^^")
# generischen Error auslösen, mit eigenem Fehlertext

if not married: # f) # Alternativ: if married == 0:
print("Enjoy Your Freedom 😎")

elif married <= 10: # g)
print("That's so lovely 😻")

elif married <= 25: # h)
print("Congratulations 🥰, you just won 10 free coins")
userBalance += 10

elif married <= 50: # h)
print("Wow 🥳🥰 Congratulations, you just won 50 free coins")
userBalance += 50

else:
print("OMG!! 😻😻😻 Thats so beautiful, you just won 100 free coins")
userBalance += 100


except Exception as error: # d)
print("invalid value", error) # e)
print(type(error))

if userBalance:
print("userBalance", userBalance)

############################################################################

# in try kündigen wir an dass wir code ausprobieren wollen
# dh zwischen try & except muss der code der evtl crashen kann

# in except wird fehler abgefangen => code crasht dann nicht

# wie haben im except die möglichkeit den error in einer vrariable zu schreiben (optional, aber gängig)
# dafür mpssen wir dann einen error typ (zB 'Exception' oder 'ValueError') nennen, ...
# und diesen mit dem keyword 'as' in eine variable schreiben (var namen können wir wie immer selbst bestimmen)
# wenn wir das tun, haben wir die möglichkeit auf verscheidene werte die eder error uns zur verfügung stellt zuzugreifen

############################################################################

# Was passiert bei raise Exception()
# Man löst selbst manuell einen echten Error aus => Code crasht !!!
# .. außer man hat das raise Exception() auch innerhalb eines try blocks
# => in diesem Fall springt der code in den except block
# genau so wie einem normane error
# den wert den wir als argument mit in die Exception geben
# => können wir im except auch mittels ... as e: entgegennehmen

############################################################################
############################################################################
############################################################################

### AUFGABE 2
'''
a) Lasse den User eine Eingabe machen, und sage dem Nutzer dabei "Guess the correct programing language"
b) Speichere die Eingabe in der Variablen: userGuess
c) Prüfe ob userGuess falsy ist, wenn ja dann printe: "please write something useful"
d) Prüfe ob userGuess mehr Zeichen hat als 6, wenn ja printe "target is shorter" (Tipp: len(userGuess) gibt anzahl zeichen)
e) Prüfe ob userGuess weniger Zeichen hat als 6, wenn ja printe "target is longer"
f) Prüfe ob userGuess genau 6 zeichen hat, wenn ja printe "not yet correct, but the number of chars is right tho :-)"
g) Prüfe ob userGuess = "python" ist, wenn ja, printe: "YEAH, that's it you nailed it!"
h) Prüfe ob userGuess "p" beginnt, wenn ja printe "good start, but not yet right" (Tipp: userGuess.startswith("p") )
i) Sorge dafür dass User nicht auf Groß-/Kleinschreibung achten muss (Tipp: userGuess.lower() wandelt string in kleinbuchstaben um)
j) Sorge dafür, dass leerzeichen am anfang und ende entfernt werden (Tipp: userGuess.strip() entfernt äußere whitespaces)
k) Arrangiere den Code so, dass die Zeichenverarbeitung nützlich greift und die Prüfungen eine sinnvolle Reihenfolge haben
'''

userGuess = input("Guess the correct programing language: ") # a, b)
userGuess = userGuess.lower().strip() # i, j)

if userGuess == "python": # g) in einem python kurs ist "python" evtl die wahrscheinlichste vermutung
print("YEAH, that's it you nailed it!")

elif not userGuess: # c) prüfung ob leere string => falsy value
print("please write something useful")

else:

if userGuess.startswith("p"): # h)
print("good start, but not yet right")

if len(userGuess) < 6: # e)
print("target is longer")

elif len(userGuess) > 6: # d)
print("target is shorter")

elif len(userGuess) == 6: # f)
print("not yet correct, but the number of chars is right tho :-)")

##########################################################################

# Test Cases:
# "python" # => target # ok
# "" # => falsy # ok
# "aaaaa" # => too short # ok
# "aaaaaaa" # => too long # ok
# "aaaaaa" # => right len # ok
# "paaaa" # => right start, too short # ok
# "paaaaaa" # => right start, too long # ok
# "paaaaa" # => right start, right len # ok


############################################################################
############################################################################
############################################################################

### AUFGABE 3
'''
a) Lasse User eine Eingabe machen, und sage dem Nutzer dabei "Please type a base number you want to exponentiate"
b) Speichere die Eingabe in die variable: baseNum
c) Lasse User danach noch eine Eingabe machen, und sage dem Nutzer dabei "Please type an integer exponent number to calculate with"
d) Speichere die Eingabe in die variable: expo
e) Caste expo in integer
f) Stelle sicher, dass expo > 1 ist, wenn nicht dann raise eine Exception mit der meldung "exponent must be > 1"
g) Erstelle eine variable namens multiplier und konkateniere hierfür als strings den Multiplikationsoperator + baseNum
h) Erstelle eine variable namens stringCalc: Konkateniere => baseNum + multiplier * (expo -1)
i) Gebe stringCalc in Konsole aus
j) Erstelle eine Variable namens: result => und weise folgendes zu: eval(stringCalc)
k) Gebe result in der Konsole aus
l) Gebe auch folgendes in Konsole aus: eval(baseNum + "**" + str(expo))
m) Gebe auch folgendes in der Konsole aus: int(baseNum) ** expo
n) Sorge dafür dass der code nicht crasht, und wenn ein error auftritt gebe diesen in der Konsole aus
'''

baseNum = input("Please type a base number you want to exponentiate") # a, b)
expo = input("Please type an integer exponent number to calculate with") # c, d)

try: # n)
expo = int(expo) # e)
if expo <= 1: raise Exception("exponent must be > 1") # f)

multiplier = "*" + baseNum # g)
stringCalc = baseNum + multiplier * (expo -1) # h)
print(stringCalc) # i)

result = eval(stringCalc) # j)
print(result) # k)
print(eval(baseNum + "**" + str(expo))) # l)
print(int(baseNum) ** expo) # m)

except Exception as e: # n)
print(e) # n)

############################################################################


# Exponentialrechnung in Python geht so:
# 5 hoch 2 => 5 ** 2
# wie geht es in Python nicht? => 5 ^2

############################################################################

print("''") # remember => single quotes as string require doubles as string wrapper
print('""') # and vice versa

############################################################################