18 svar
132 visningar
jonte12 behöver inte mer hjälp
jonte12 469
Postad: 27 nov 2021 19:25 Redigerad: 27 nov 2021 20:06

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? 

Dr. G 9479
Postad: 27 nov 2021 19:56

Funkar det med

lower_limit = max(lower_limit,guess)

och motsvarande uppåt?

Laguna Online 30484
Postad: 27 nov 2021 20:00

Ska den inte säga att 20 är för lågt?

jonte12 469
Postad: 27 nov 2021 20:01
Laguna skrev:

Ska den inte säga att 20 är för lågt?

Det stämmer! Missade att skriva det

Laguna Online 30484
Postad: 27 nov 2021 20:05 Redigerad: 27 nov 2021 20:06

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)

jonte12 469
Postad: 27 nov 2021 20:05 Redigerad: 27 nov 2021 20:14
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.

Laguna Online 30484
Postad: 27 nov 2021 20:10

Du glömde nog min i min(upper_limit, guess).

jonte12 469
Postad: 27 nov 2021 20:15
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.

Laguna Online 30484
Postad: 27 nov 2021 20:15

Jaha, vad säger den då? Det är förmodligen ganska informativt.

jonte12 469
Postad: 27 nov 2021 20:22
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.

Laguna Online 30484
Postad: 27 nov 2021 20:23

Hur ser programmet ut nu?

jonte12 469
Postad: 27 nov 2021 20:27 Redigerad: 27 nov 2021 20:35
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))

Laguna Online 30484
Postad: 27 nov 2021 20:31

Det andra och tredje fallet är samma. Du får ändra det ena till < random_number and < lower_limit.

jonte12 469
Postad: 27 nov 2021 20:37 Redigerad: 27 nov 2021 20:38
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)

Laguna Online 30484
Postad: 27 nov 2021 20:39

Kanske. Har du två fall nu eller fyra?

jonte12 469
Postad: 27 nov 2021 20:49
Laguna skrev:

Kanske. Har du två fall nu eller fyra?

två

Laguna Online 30484
Postad: 27 nov 2021 20:50

Vad händer nu om du gissar 5 när lägre gränsen är 10?

Dr. G 9479
Postad: 27 nov 2021 20:54
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.

jonte12 469
Postad: 27 nov 2021 20:59 Redigerad: 28 nov 2021 17:56
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"

Svara
Close