problem med koden
hej jag har gjort denna kod men vet inte varför den blir fel, där den ställer vem är längst? två gånger och den första blir fel och andra gången blir svaret rätt. Vad kan jag göra för att koden bara ska fråga en gång "vem är längst" och säga om spelarena gissade rätt eller fel och direkt gå till totala poängen.
bilderna visar tydligare :
här är koden :
def spel():
try:
print("Hej och välkommen till spelet 'Vem är längst'")
spelare1=input("Spelare 1, skriv ditt namn: ")
spelare2=input("Spelare 2, skriv ditt namn:")
antal_spelare = int(input("Hur många spelare ska gissa mellan: "))
if antal_spelare < 2:
raise ValueError("Minst två spelare krävs för att spela spelet.")
deltagare = {}
for i in range(1, antal_spelare + 1):
namn = input(f"Vad heter person {i}?: ")
längd = int(input(f"Hur lång är {namn}? Svara i cm: "))
deltagare[namn] = längd
storterad_lista = sorted(deltagare.items(), key=lambda x: x[1], reverse=True)
spelare1_poäng = 0
spelare2_poäng = 0
for n in range(1, antal_spelare):
namn, längd = storterad_lista[n]
gissning1 = input(f"Vem är på plats {n + 1}? {spelare1} ")
gissning2 = input(f"Vem är på plats {n + 1}? {spelare2}: ")
if gissning1 == namn:
print(f"Rätt, {spelare1}")
spelare1_poäng += 1
else:
print(f"Fel, {spelare1}")
if gissning2 == namn:
print(f"Rätt, {spelare2}")
spelare2_poäng += 1
else:
print(f"Fel, {spelare2}")
längst_poäng = False
for a in range(n):
namn, längd = storterad_lista[a]
längst1 = input(f"Vem är längst? {spelare1} ")
längst2 = input(f"Vem är längst? {spelare2} ")
if längst1 == namn:
print(f"Rätt, {spelare1}")
spelare1_poäng += 1
else:
print(f"Fel, {spelare1}")
if längst2 == namn:
print(f"Rätt, {spelare2}")
spelare2_poäng += 1
else:
print(f"Fel, {spelare2}")
if a == antal_spelare-1:
längst_poäng=True
print(f"Spelare 1 fick {spelare1_poäng} / {antal_spelare} poäng.")
print(f"Spelare 2 fick {spelare2_poäng} / {antal_spelare} poäng.")
if spelare1_poäng > spelare2_poäng:
print('{spelare1} vann')
elif spelare2_poäng > spelare1_poäng:
print('{spelare2} vann')
else:
print('Det blev lika')
except ValueError as e:
print(f"Felaktig inmatning: {e}")
if __name__ == "__main__":
spel()
och här är resultaten:
Klistra gärna in koden igen och använd kodverktyget (det ser ut som {;}) så att indenteringen blir kvar.
def spel():
try:
print("Hej och välkommen till spelet 'Vem är längst'")
spelare1=input("Spelare 1, skriv ditt namn: ")
spelare2=input("Spelare 2, skriv ditt namn:")
antal_spelare = int(input("Hur många spelare ska gissa mellan: "))
if antal_spelare < 2:
raise ValueError("Minst två spelare krävs för att spela spelet.")
deltagare = {}
for i in range(1, antal_spelare + 1):
namn = input(f"Vad heter person {i}?: ")
längd = int(input(f"Hur lång är {namn}? Svara i cm: "))
deltagare[namn] = längd
storterad_lista = sorted(deltagare.items(), key=lambda x: x[1], reverse=True)
spelare1_poäng = 0
spelare2_poäng = 0
for n in range(1, antal_spelare):
namn, längd = storterad_lista[n]
gissning1 = input(f"Vem är på plats {n + 1}? {spelare1} ")
gissning2 = input(f"Vem är på plats {n + 1}? {spelare2}: ")
if gissning1 == namn:
print(f"Rätt, {spelare1}")
spelare1_poäng += 1
else:
print(f"Fel, {spelare1}")
if gissning2 == namn:
print(f"Rätt, {spelare2}")
spelare2_poäng += 1
else:
print(f"Fel, {spelare2}")
längst_poäng = False
for a in range(n):
namn, längd = storterad_lista[a]
längst1 = input(f"Vem är längst? {spelare1} ")
längst2 = input(f"Vem är längst? {spelare2} ")
if längst1 == namn:
print(f"Rätt, {spelare1}")
spelare1_poäng += 1
else:
print(f"Fel, {spelare1}")
if längst2 == namn:
print(f"Rätt, {spelare2}")
spelare2_poäng += 1
else:
print(f"Fel, {spelare2}")
if a == antal_spelare-1:
längst_poäng=True
print(f"Spelare 1 fick {spelare1_poäng} / {antal_spelare} poäng.")
print(f"Spelare 2 fick {spelare2_poäng} / {antal_spelare} poäng.")
if spelare1_poäng > spelare2_poäng:
print('{spelare1} vann')
elif spelare2_poäng > spelare1_poäng:
print('{spelare2} vann')
else:
print('Det blev lika')
except ValueError as e:
print(f"Felaktig inmatning: {e}")
if __name__ == "__main__":
spel()
Ska man inte ställa varje fråga till båda spelarna? Hur lyder hela uppgiften?
Frågan lyder:
Skapa ett spel som frågar efter antalet spelare, därefter skall olika personers namn
och längd frågas efter. Därefter skall användarnas längd och namn sparas i en
hashtabell. Denna tabell skall därefter sorteras i stigande ordning. Efter detta ska
användaren få gissa på vilken person det är på respektive plats på listan där deras
längd jämförs.
Det ska vara med 2 spelare och man inte får skriva ut
om man fått rätt eller fel fram tills efter att båda fått svara på frågan. I slutet av
programmet skall båda användarnas totalpoäng skrivas ut samt vinnaren skall
skrivas ut.
båda ska få en fråga, men mitt problem är att den frågar "vem är längst " två gånger var där det istället ska bara frågas en gång var och gå direkt till resultaten.
Har kollat över flera gånger men hittar inte problemet, behöver några nya ögon som kan se problemet.
Vad ska
for a in range(n):
göra? Borde det inte vara samma sorts 'for' som högre upp?
hur gör jag det ?
Fast det gör inte saken bättre, för det ska väl inte vara en loop där alls? Den där variabeln längst_poäng ser inte ut att användas.
så borde jag ta bort loopen och ska den ersättas med något eller bara tas bort