9 svar
202 visningar
Business 33
Postad: 3 dec 2023 13:33

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: 

Laguna Online 30721
Postad: 3 dec 2023 14:53

Klistra gärna in koden igen och använd kodverktyget (det ser ut som {;}) så att indenteringen blir kvar.

Business 33
Postad: 3 dec 2023 18:20
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()
Laguna Online 30721
Postad: 3 dec 2023 18:29

Ska man inte ställa varje fråga till båda spelarna? Hur lyder hela uppgiften?

Business 33
Postad: 3 dec 2023 20:09 Redigerad: 3 dec 2023 20:13

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. 

Business 33
Postad: 3 dec 2023 20:12

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.

Laguna Online 30721
Postad: 3 dec 2023 20:40

Vad ska

for a in range(n):

göra? Borde det inte vara samma sorts 'for' som högre upp?

Business 33
Postad: 4 dec 2023 09:35

hur gör jag det ?

Laguna Online 30721
Postad: 4 dec 2023 14:53

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.

Business 33
Postad: 4 dec 2023 20:09

så borde jag ta bort loopen och ska den ersättas med något eller bara tas bort

Svara
Close