koddublesering...
Hej. Jag har programmerat ett program i python där användaren ska gissa ett slumpat tal som datorn slumpat. För att lösa utskriften, så att den blir som uppgiften säger, vet jag inte hur kan kan undvika koddublesering... Utskriften ska se ut som följande:
Nedre gräns: 10
Övre gräns: 50
########## GISSNINGSSPELET ##########
Mata in din gissning: 15
Du gissade för lågt! Gissa mellan 15 och 50
Mata in din gissning: 30
Du gissade för högt! Gissa mellan 15 och 30
Mata in din gissning: 28
Du vann! Grattis!
För att lösa detta har jag gjort såhär:
for i in range(0, number_off_guess):
guess=int(input("Mata in din gissning: "))
if guess == random_number:
print("Du vann! Grattis!")
break
elif guess < random_number and guess > lower_limit:
lower_limit = guess
print("Du gissade för lågt! Gissa mellan " + str(guess) + " och " + str(upper_limit))
elif guess < random_number and guess < lower_limit:
print("Du gissade för lågt! Gissa mellan " + str(lower_limit) + " och " + str(upper_limit))
elif guess > random_number and guess < upper_limit:
upper_limit = guess
print("Du gissade för högt! Gissa mellan " + str(lower_limit) + " och " + str(guess))
elif guess > random_number and guess > upper_limit:
print("Du gissade för högt! Gissa mellan " + str(lower_limit) + " och " + str(upper_limit))
Den enda skillnaden ifall gissningen är större än övre gränsen eller om det är större än det slumpade värdet är att gränsen ska uppdateras. Detsamma gäller även om gissningen är för låg. Hur kan jag lösa detta utan koddublesering?
Funkar det med
lower_limit = max(lower_limit,guess)
och motsvarande uppåt?
Ska den inte säga att 20 är för lågt?
Laguna skrev:Ska den inte säga att 20 är för lågt?
Det stämmer! Missade att skriva det
Den här utskriften är i alla fall alltid rätt (även i första fallet), så den kan du ha en enda gång, efter allt annat.
Gissa mellan " + str(lower_limit) + " och " + str(upper_limit)
Dr. G skrev:Funkar det med
lower_limit = max(lower_limit,guess)
och motsvarande uppåt?
Fungerade tyvärr inte :(. Blev såhär:
Nedre gräns: 10
Övre gräns: 20
########## GISSNINGSSPELET ##########
Mata in din gissning: 19
Du gissade för högt! Gissa mellan 10 och 19
Och så blir jag utkastad ur programmet redan här.
Du glömde nog min i min(upper_limit, guess).
Laguna skrev:Du glömde nog min i min(upper_limit, guess).
Stämmer! Tyvärr fungerar det inte då. Det blev såhär:
Nedre gräns: 10
Övre gräns: 20
########## GISSNINGSSPELET ##########
Mata in din gissning: 19
Du gissade för högt! Gissa mellan 10 och 19
Och så blir jag utkastad ur programmet redan här.
Jaha, vad säger den då? Det är förmodligen ganska informativt.
Laguna skrev:Jaha, vad säger den då? Det är förmodligen ganska informativt.
Det fungerar visst! Jag glömde en sak bara. Sorry!
Men det fungerar bara om man anger en gissning inom intervallet. Finns det något sätt man kan göra så att det fungerar även utanför intervallet? Exempelvis:
Nedre gräns: 10
Övre gräns: 20
########## GISSNINGSSPELET ##########
Mata in din gissning: 5
Du gissade för lågt! Gissa mellan 10 och 20
Mata in din gissning:
#Och så fortsätter man att gissa.
Hur ser programmet ut nu?
Laguna skrev:Hur ser programmet ut nu?
#!/usr/bin/python3
# -*- coding: utf-8; mode: python; -*-
import random
while True:
lower_limit = int(input("Nedre gräns: "))
while True:
if lower_limit>0:
break
else:
print("Felaktigt värde")
lower_limit= int(input("Nedre gräns: "))
upper_limit = int(input("Övre gräns: "))
while True:
if upper_limit>lower_limit:
break
else:
print("Felaktigt värde")
upper_limit=int(input("Övre gräns: "))
random.seed(123456)
random_number = random.randrange(lower_limit, upper_limit, step)
print()
print("########## GISSNINGSSPELET ##########")
for i in range(0, number_off_guess):
guess=int(input("Mata in din gissning: "))
if guess == random_number:
print("Du vann! Grattis!")
break
elif guess < random_number and guess > lower_limit:
lower_limit = max(lower_limit,guess)
print("Du gissade för lågt! Gissa mellan " + str(guess) + " och " + str(upper_limit))
elif guess > random_number and guess < upper_limit:
upper_limit = min(upper_limit,guess)
print("Du gissade för högt! Gissa mellan " + str(lower_limit) + " och " + str(guess))
Det andra och tredje fallet är samma. Du får ändra det ena till < random_number and < lower_limit.
Laguna skrev:Det andra och tredje fallet är samma. Du får ändra det ena till < random_number and < lower_limit.
Såhär?
elif guess < random_number and guess > lower_limit:
lower_limit = max(lower_limit,guess)
print("Du gissade för lågt! Gissa mellan " + str(guess) + " och " + str(upper_limit))
elif guess > random_number and guess < upper_limit:
upper_limit = min(upper_limit,guess)
print("Du gissade för högt! Gissa mellan " + str(lower_limit) + " och " + str(guess)
Kanske. Har du två fall nu eller fyra?
Laguna skrev:Kanske. Har du två fall nu eller fyra?
två
Vad händer nu om du gissar 5 när lägre gränsen är 10?
jonte12 skrev:Såhär?
elif guess < random_number and guess > lower_limit:
lower_limit = max(lower_limit,guess)
print("Du gissade för lågt! Gissa mellan " + str(guess) + " och " + str(upper_limit))
Behövs det där "and"-villkoret nu?
När du printar kan du också byta ut guess mot lower_limit.
Laguna skrev:Vad händer nu om du gissar 5 när lägre gränsen är 10?
Nedre gräns: 10
Övre gräns: 50
########## GISSNINGSSPELET ##########
Mata in din gissning: 5
Mata in din gissning:
Och så får man fortsätta gissa. Jag vill här, i detta faller, att det ska stå "Du gissade får lågt gissa mellan 10 och 50"