Posts: 10
Threads: 1
Joined: Aug 2024
i have a working little number guessing game but there is one long repetitiv section that i dont know how to shorten (the section is beneth the line "if durchschnitt2"(line 118) (the hole code is in german if thats a problen i will translate it))
import random
werte = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
durchschnitt2 = False
def deutsch():
runig = True
while runig:
while True:
while True:
try:
runden = int(input("wie viele runden wilst du speilen?:"))
except ValueError:
print ("ungültiger wert. versuche es noch einmal")
print ("----------------------------------")
else:
break
if runden > 15:
print ("maximal 15 runden")
else:
break
for runde in range (runden):
runde = runde + 1
print ("----------------------------------")
print (f"runde {runde}")
while True:
while True:
while True:
try:
low = int(input("was soll das minimum sein?:"))
except ValueError:
print ("ungültiger wert. versuche es noch einmal")
print ("----------------------------------")
else:
break
if low < -500000:
print ("minimal -500,000")
else:
break
print ("----------------------------------")
while True:
while True:
try:
high = int(input("was soll das maximum sein?:"))
except ValueError:
print ("ungültiger wert. versuche es noch einmal")
print ("----------------------------------")
else:
break
if high > 500000:
print ("maximal 500,000")
else:
break
if low > high:
print ("----------------------------------")
print("das minimum kann nicht mehr als das maximum sein")
print ("----------------------------------")
else:
break
print ("----------------------------------")
number = random.randint(low,high)
if not durchschnitt2:
guesses = 0
while True:
while True:
try:
guessesnuber = int(input("wie viele versuch wilst du haben?:"))
except ValueError:
print ("ungültiger wert. versuche es noch einmal")
print ("----------------------------------")
else:
break
if guessesnuber > 100:
print("maximal 100 versuche")
else:
break
print ("----------------------------------")
print (f"du hast {guessesnuber} versuche")
else:
guesses = 0
guessesnuber = 9999999999999999999999999999
print ("----------------------------------")
print (f"du hast {guessesnuber} versuche")
while True:
while True:
try:
guess = int(input(f"nummer zwischen ({low} - {high}):"))
except ValueError:
print ("ungültiger wert. versuche es noch einmal")
print ("----------------------------------")
else:
break
guesses = guesses+1
if guess > high:
print (f"das ist mehr als {high}")
elif guess < low:
print(f"das ist weniger als {low}")
elif guess > number:
print (f"{guess} ist zu viel")
elif guess < number:
print (f"{guess} ist zu wenig")
else:
print (f"{guess} ist richtig!")
break
if guesses == guessesnuber:
print (f"du hast zu viele versuche gebraucht")
break
else:
print (f"du hast noch {guessesnuber-guesses} versuche")
if guess < number and not guess < low:
low = guess
elif guess > number and not guess > high:
high = guess
print ("----------------------------------")
if guess == number:
print (f"du hast {guesses} versuche gebraucht")
if durchschnitt2:
if runde == 1:
werte[0] = guesses
durchschnitt1 = werte[0]
elif runde == 2:
werte[1] = guesses
durchschnitt1 = durchschnitt1+werte[1]
elif runde == 3:
werte[2] = guesses
durchschnitt1 = durchschnitt1+werte[2]
elif runde == 4:
werte[3] = guesses
durchschnitt1 = durchschnitt1+werte[3]
elif runde == 5:
werte[4] = guesses
durchschnitt1 = durchschnitt1+werte[4]
elif runde == 6:
werte[5] = guesses
durchschnitt1 = durchschnitt1+werte[5]
elif runde == 7:
werte[6] = guesses
durchschnitt1 = durchschnitt1+werte[6]
elif runde == 8:
werte[7] = guesses
durchschnitt1 = durchschnitt1+werte[7]
elif runde == 9:
werte[8] = guesses
durchschnitt1 = durchschnitt1+werte[8]
elif runde == 10:
werte[9] = guesses
durchschnitt1 = durchschnitt1+werte[9]
elif runde == 11:
werte[10] = guesses
durchschnitt1 = durchschnitt1+werte[10]
elif runde == 12:
werte[11] = guesses
durchschnitt1 = durchschnitt1+werte[11]
elif runde == 13:
werte[12] = guesses
durchschnitt1 = durchschnitt1+werte[12]
elif runde == 14:
werte[13] = guesses
durchschnitt1 = durchschnitt1+werte[13]
elif runde == 15:
werte[14] = guesses
durchschnitt1 = durchschnitt1+werte[14]
elif guesses == guessesnuber:
print (f"du hast es nicht eraten die numer war {number}")
if durchschnitt2:
durchschnitt = durchschnitt1/runden
print (f"dein durchschnitt ist {durchschnitt}")
if not input ("nochmal spielen? (ja/nein):").lower() == "ja":
runig = False
else:
print ("----------------------------------") (sorry for the long code.)
the section is to calculate the average of how many trys it took you to find the number.
Posts: 4,802
Threads: 77
Joined: Jan 2018
Aug-19-2024, 06:16 PM
(This post was last modified: Aug-19-2024, 06:17 PM by Gribouillis.)
You could do
if 1 <= runde <= 15:
werte[runde-1] = guesses
if runde == 1:
durchschnitt1 = guesses
else:
durchschnitt1 += guesses
« We can solve any problem by introducing an extra level of indirection »
Posts: 6,814
Threads: 20
Joined: Feb 2020
Aug-20-2024, 02:31 PM
(This post was last modified: Aug-20-2024, 02:31 PM by deanhystad.)
You repeat this pattern in your code:
while True:
try:
runden = int(input("wie viele runden wilst du speilen?:"))
except ValueError:
print ("ungültiger wert. versuche es noch einmal")
print ("----------------------------------")
else:
break
if runden > 15:
print ("maximal 15 runden")
else:
break Only write code once and reuse.
def int_input(prompt, max_value=None, min_value=None):
while True:
try:
value = int(input(prompt))
if max_value is not None and value > max_value:
print(f"maximal {max_value} runden")
elif min_value is not None and value < min_value:
print(f"minimal {min_value} runden")
else:
return value
except ValueError:
print("ungültiger wert. versuche es noch einmal")
print("----------------------------------")
runden = int_input("wie viele runden wilst du speilen?: ", max_value=15)
low = int_input("was soll das minimum sein?: ", min_value=-500000)
high = int_input("was soll das maximum sein?: ", max_value=500000)
print(runden, low, high) Combined with the suggestion from Gribouillis you can get some substantial code reduction. This is untested:
import random
durchschnitt2 = False
def int_input(prompt, max_value=None, min_value=None):
while True:
try:
value = int(input(prompt))
if max_value is not None and value > max_value:
print(f"maximal {max_value} runden")
elif min_value is not None and value < min_value:
print(f"minimal {min_value} runden")
else:
return value
except ValueError:
print("ungültiger wert. versuche es noch einmal")
print("----------------------------------")
def deutsch():
while True:
runden = int_input("wie viele runden wilst du speilen?:", max_value=15)
for runde in range(1, runden + 1):
print("----------------------------------")
print(f"runde {runde}")
while True:
low = int_input("was soll das minimum sein?:", min_value=-500000)
high = int_input("was soll das maximum sein?:", max_value=500000)
if low > high:
print("----------------------------------")
print("das minimum kann nicht mehr als das maximum sein")
print("----------------------------------")
else:
break
print("----------------------------------")
number = random.randint(low, high)
if not durchschnitt2:
guesses = 0
guessesnuber = int_input("wie viele versuch wilst du haben?:", max_value=100)
print("----------------------------------")
print(f"du hast {guessesnuber} versuche")
else:
guesses = 0
guessesnuber = 9999999999999999999999999999
print("----------------------------------")
print(f"du hast {guessesnuber} versuche")
for guesses in range(guessesnuber):
guess = int_input(f"nummer zwischen ({low} - {high}):", min_value=low, max_value=high)
if guess == number:
print(f"{guess} ist richtig!")
break
if guess > number:
print(f"{guess} ist zu viel")
high = guess
else:
print(f"{guess} ist zu wenig")
low = guess
print(f"du hast noch {guessesnuber-guesses} versuche")
print("----------------------------------")
if guesses < guessesnuber:
print(f"du hast {guesses} versuche gebraucht")
if durchschnitt2:
if runde == 1:
durchschnitt1 = guesses
else:
durchschnitt1 += guesses
else:
print(f"du hast zu viele versuche gebraucht")
print(f"du hast es nicht eraten die numer war {number}")
if durchschnitt2:
durchschnitt = durchschnitt1 / runden
print(f"dein durchschnitt ist {durchschnitt}")
if not input("nochmal spielen? (ja/nein):").lower() == "ja":
return
print("----------------------------------")
deutsch()
Posts: 10
Threads: 1
Joined: Aug 2024
thaks for the help but the untested code is not that good but still this helpt a lot so thx
Posts: 10
Threads: 1
Joined: Aug 2024
the flaw is that not ewrything is a "runde" so a rund to play
but you probebly did this in 1 min so im not mad or smt like that
you are way better at coding than me and the fact that it is untested is also impresiv
i woudnt be able to do smt like that without testing so thank you werry much
(sorry for bad spelling)
Posts: 10
Threads: 1
Joined: Aug 2024
i ficst my problem with it :
def int_input(prompt, type, max_value=None, min_value=None):
while True:
try:
value = int(input(prompt))
if max_value is not None and value > max_value:
print(f"maximal {max_value} {type}")
elif min_value is not None and value < min_value:
print(f"minimal {min_value} {type}")
else:
return value
except ValueError:
print("ungültiger wert. versuche es noch einmal")
print("----------------------------------")
runden = int_input("wie viele runden wilst du speilen?: ", "runden", max_value=15)
low = int_input("was soll das minimum sein?: ", "" , min_value=-500000)
high = int_input("was soll das maximum sein?: ", "" ,max_value=500000)
print(runden, low, high)
Posts: 6,814
Threads: 20
Joined: Feb 2020
I think I understand the program better now, but I could be wrong.
import random
def int_input(prompt, value_type="", max_value=None, min_value=None):
while True:
try:
value = int(input(prompt))
if max_value is not None and value > max_value:
print(f"maximal {max_value}{value_type}")
elif min_value is not None and value < min_value:
print(f"minimal {min_value}{value_type}")
else:
return value
except ValueError:
print("ungültiger wert. versuche es noch einmal")
print("----------------------------------")
def deutsch(durchschnitt=False):
count = 0
runden = int_input("wie viele runden wilst du speilen?: ", " rundden", max_value=15)
for runde in range(1, runden + 1):
print("----------------------------------")
print(f"runde {runde}")
while True:
low = int_input("was soll das minimum sein?: ", min_value=-500000)
high = int_input("was soll das maximum sein?: ", max_value=500000)
if low > high:
print("----------------------------------")
print("das minimum kann nicht mehr als das maximum sein")
print("----------------------------------")
else:
break
print("----------------------------------")
number = random.randint(low, high)
if durchschnitt:
guessesnuber = None # Unlimited guesses
else:
guessesnuber = int_input("wie viele versuch wilst du haben?: ", max_value=min(100, high-low))
guesses = 0
while True:
guesses += 1
guess = int_input(f"nummer zwischen ({low} - {high}): ", min_value=low, max_value=high)
if guess == number:
print(f"{guess} ist richtig!")
print(f"du hast {guesses} versuche gebraucht")
if durchschnitt:
count += guesses
else:
count += 1
break
if guess > number:
print(f"{guess} ist zu viel")
high = guess
else:
print(f"{guess} ist zu wenig")
low = guess
if guessesnuber is not None:
if guesses >= guessesnuber:
print(f"du hast zu viele versuche gebraucht")
print(f"du hast es nicht eraten die numer war {number}")
break
print(f"du hast noch {guessesnuber-guesses} versuche")
print("----------------------------------")
if durchschnitt:
print(f"dein durchschnitt ist {count / runden}")
else:
print(f"{count} von {runden} versuchen erfolgreich absolviert.")
while True:
deutsch()
print("----------------------------------")
if input("nochmal spielen? (ja/nein): ").lower() != "ja":
break I split the replay loop out of deutch() (strange name for a guessing game). Try to make functions that does something you can describe in a few short sentences. I pass durchschnitt in as a variable because global variables are bad and should be avoided.
Posts: 10
Threads: 1
Joined: Aug 2024
deutsch in german for german
i have the game in 3 difrent langues
Posts: 10
Threads: 1
Joined: Aug 2024
i did the value_type thing two on my own yay
heres the entire thing i have now
import random
werte = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
durchschnitt2 = False
def int_input_de(prompt, type, max_value=None, min_value=None):
while True:
try:
value = int(input(prompt))
if max_value is not None and value > max_value:
print(f"maximal {max_value} {type}")
elif min_value is not None and value < min_value:
print(f"minimal {min_value} {type}")
else:
return value
except ValueError:
print("ungültiger wert. versuche es noch einmal")
print("----------------------------------")
def deutsch():
runig = True
while runig:
runden = int_input_de("wie viele runden wilst du speilen?:", "runden", max_value=15)
for runde in range (runden):
runde = runde + 1
print ("----------------------------------")
print (f"runde {runde}")
while True:
low = int_input_de("was soll das minimum sein?:", "", max_value=None, min_value=-500000)
print ("----------------------------------")
high = int_input_de("was soll das maximum sein?:", "", max_value=500000)
if low > high:
print ("----------------------------------")
print("das minimum kann nicht mehr als das maximum sein")
print ("----------------------------------")
else:
break
print ("----------------------------------")
number = random.randint(low,high)
if not durchschnitt2:
guesses = 0
guessesnuber = int_input_de("wie viele versuch wilst du haben?:", "versuche", max_value=100)
print ("----------------------------------")
print (f"du hast {guessesnuber} versuche")
else:
guesses = 0
guessesnuber = 9999999999999999999999999999
print ("----------------------------------")
print (f"du hast {guessesnuber} versuche")
while True:
guess = int_input_de(f"nummer zwischen ({low} - {high}):", "")
guesses = guesses+1
if guess > high:
print (f"das ist mehr als {high}")
elif guess < low:
print(f"das ist weniger als {low}")
elif guess > number:
print (f"{guess} ist zu viel")
elif guess < number:
print (f"{guess} ist zu wenig")
else:
print (f"{guess} ist richtig!")
break
if guesses == guessesnuber:
print (f"du hast zu viele versuche gebraucht")
break
else:
print (f"du hast noch {guessesnuber-guesses} versuche")
if guess < number and not guess < low:
low = guess
elif guess > number and not guess > high:
high = guess
print ("----------------------------------")
if guess == number:
print (f"du hast {guesses} versuche gebraucht")
if durchschnitt2:
if 1 <= runde <= 15:
werte[runde-1] = guesses
if runde == 1:
durchschnitt1 = guesses
else:
durchschnitt1 += guesses
elif guesses == guessesnuber:
print (f"du hast es nicht eraten die numer war {number}")
if durchschnitt2:
durchschnitt = durchschnitt1/runden
print (f"dein durchschnitt ist {durchschnitt}")
if not input ("nochmal spielen? (ja/nein):").lower() == "ja":
runig = False
else:
print ("----------------------------------")
def englisch():
runig = True
while runig:
runden = int_input("how many rounds woud you like to play?:", "rounds", max_value=15)
for runde in range (runden):
runde = runde + 1
print ("----------------------------------")
print (f"round {runde}")
while True:
low = int_input("waht woud you like to be the minimum?:", "", max_value=None, min_value=-500000)
print ("----------------------------------")
high = int_input("waht woud you like to be the maximum?:", "", max_value=500000)
if low > high:
print ("----------------------------------")
print("das minimum kann nicht mehr als das maximum sein")
print ("----------------------------------")
elif high < low:
break
print ("----------------------------------")
number = random.randint(low,high)
if not durchschnitt2:
guesses = 0
guessesnuber = int_input("wie viele versuch wilst du haben?:", "versuche", max_value=100)
print ("----------------------------------")
print (f"du hast {guessesnuber} versuche")
else:
guesses = 0
guessesnuber = 9999999999999999999999999999
print ("----------------------------------")
print (f"du hast {guessesnuber} versuche")
while True:
guess = int_input(f"nummer zwischen ({low} - {high}):", "")
guesses = guesses+1
if guess > high:
print (f"das ist mehr als {high}")
elif guess < low:
print(f"das ist weniger als {low}")
elif guess > number:
print (f"{guess} ist zu viel")
elif guess < number:
print (f"{guess} ist zu wenig")
else:
print (f"{guess} ist richtig!")
break
if guesses == guessesnuber:
print (f"du hast zu viele versuche gebraucht")
break
else:
print (f"du hast noch {guessesnuber-guesses} versuche")
if guess < number and not guess < low:
low = guess
elif guess > number and not guess > high:
high = guess
print ("----------------------------------")
if guess == number:
print (f"du hast {guesses} versuche gebraucht")
if durchschnitt2:
if 1 <= runde <= 15:
werte[runde-1] = guesses
if runde == 1:
durchschnitt1 = guesses
else:
durchschnitt1 += guesses
elif guesses == guessesnuber:
print (f"du hast es nicht eraten die numer war {number}")
if durchschnitt2:
durchschnitt = durchschnitt1/runden
print (f"dein durchschnitt ist {durchschnitt}")
if not input ("nochmal spielen? (ja/nein):").lower() == "ja":
runig = False
else:
print ("----------------------------------")
def italienisch():
runig = True
while runig:
while True:
runden = int(input("quanti giri vuoi fare?:"))
if runden > 20:
print ("20 giri massimo")
else:
break
for runde in range (runden):
runde = runde + 1
print ("----------------------------------")
print (f"giro {runde}")
while True:
while True:
low = int(input("Quanto vuoi mettere per il minimo?:"))
if low < -500000:
print ("al minimo -500,000")
else:
break
print ("----------------------------------")
while True:
high = int(input("quanto vuoi mettere come il massimo?:"))
if high > 500000:
print ("massimo 500,000")
else:
break
if low > high:
print ("----------------------------------")
print("il minimo non può essere più che il massimo")
print ("----------------------------------")
else:
break
print ("----------------------------------")
guesses = 0
number = random.randint(low,high)
guessesnuber = int(input("quanti tentativi vuoi avere?:"))
print ("----------------------------------")
print (f"hai {guessesnuber} tentativi")
while True:
guess = int(input(f"numero fra ({low} - {high}):"))
guesses = guesses+1
if guess > high:
print (f"è più che {high}")
elif guess < low:
print(f"è meno che {low}")
elif guess > number:
print (f"{guess} è troppo alto")
elif guess < number:
print (f"{guess} è troppo basso")
else:
print (f"{guess} è giusto!")
break
if guesses == guessesnuber:
print (f"hai fatto troppi tentativi")
break
else:
print (f"hai ancora {guessesnuber-guesses} tentativi")
if guess < number and not guess < low:
low = guess
elif guess > number and not guess > high:
high = guess
print ("----------------------------------")
if guess == number:
print (f"in questo giro hai avuto bisogno di {guesses} tentativi")
elif guesses == guessesnuber:
print (f"non l'hai indovinato, il numero era: {number}")
if not input ("gioca di nuovo? (sì/no):").lower() == "si":
runig = False
else:
print ("----------------------------------")
while True:
sprache = input("language?(eng/de/it):").lower()
if sprache == "eng":
print ("the game is now in english")
if input ("do you want to calculate an average? (you will have infinite trys)(yes/no):").lower() == "yes":
durchschnitt2 = True
englisch()
break
elif sprache == "de":
print ("das spiel is jetzt auf deutsch")
if input ("wilst du einen durchschnitt berechnen? (du wirst unendlich viele versuche haben)(ja/nein):").lower() == "ja":
durchschnitt2 = True
deutsch()
break
elif sprache == "it":
print ("il gioco continua in italiano")
italienisch()
break
else:
print('please enter a valid language')
print ("---------------------------")
Posts: 10
Threads: 1
Joined: Aug 2024
|