6 svar
47 visningar
kristoffer2020 är nöjd med hjälpen!
kristoffer2020 8
Postad: 19 maj 2020

Hur ändrar man värden i en poängtabell?

Hej!

Jag har kodat för en tabell mha Turtle och vill kunna lägga in poäng för olika spelare i en tabell. Jag kan lägga in poängen första gången men kan inte uppdatera poängen för varje spelare vid de senare omgångarna. Hur kan jag tänka för att koda ett fungerande poängsystem? Kan jag göra en lista mef poängen för de olika spelarna? Probelemet är att spelarnas index ändras när andra spelare åker ut? Ska jag istället använda variabler?

Just nu har jag skrivit:

b= 0
for x in range (antalspelare):
  if c == spelare[x-1]:
  a.goto((100),(25(x*+1)))
  b=0+10
  a.write(b)

Eftersom jag har skrivit b=0 så värdet noll varje omgång innan innan den nya poängen ges. Jag behöver någon att diskuter lite.

Är tacksam för lite tips.

Det finns alltså (minst) två bitar information för varje spelare: antal poäng, och huruvida spelaren är kvar i spelet. Istället för att ta bort spelare skulle du kunna ha ytterligare en lista med True/False värden, som berättar huruvida spelaren med det indexet är i spel eller inte. Sen när du loopar genom spelarindex kan du titta i den listan för att se om du ska skippa den spelaren eller inte.

Men ju fler bitar information du behöver lagra om en spelare, desto bättre är det att titta på andra strukturer. Att hålla många listor igång parallellt blir lätt lite stökigt. Istället kan man göra en dictionary, eller en egen objekttyp.

cjan1122 Online 198
Postad: 19 maj 2020

Inte helt säker på att jag förstår exakt vad du menar men kolla näst sista raden. b=0+10 är ju samma sak som b=10 vilket aldrig kommer ändras. Testa att byta till b=b+10 eller b+=10. Båda dessa lägger till 10 på värdet som b hade innan vilket innebär att poängen borde ackumuleras under programmets gång.

kristoffer2020 8
Postad: 19 maj 2020
Skaft skrev:

Det finns alltså (minst) två bitar information för varje spelare: antal poäng, och huruvida spelaren är kvar i spelet. Istället för att ta bort spelare skulle du kunna ha ytterligare en lista med True/False värden, som berättar huruvida spelaren med det indexet är i spel eller inte. Sen när du loopar genom spelarindex kan du titta i den listan för att se om du ska skippa den spelaren eller inte.

Men ju fler bitar information du behöver lagra om en spelare, desto bättre är det att titta på andra strukturer. Att hålla många listor igång parallellt blir lätt lite stökigt. Istället kan man göra en dictionary, eller en egen objekttyp.

Kan man använda loopar i en dictionary och vad menas med en egen objekttyp?

Ja, man kan iterera en dict, lägga till och ta bort.

spelare = {'A':0, 'B':0, 'C':0, 'D':0}
print(spelare)
sökt = 'A'
for namn in spelare:
    if sökt == namn:
        spelare[namn] += 10 # ändra poäng
spelare['E'] = 0 # lägg till spelare
print(spelare)
del spelare['B'] # ta bort spelare
print(spelare)

Man kan istället skapa en egen klass (objekttyp) om man kan använda objektorienterad programmering.

kristoffer2020 8
Postad: 19 maj 2020 Redigerad: 19 maj 2020
Lindehaven skrev:

Ja, man kan iterera en dict, lägga till och ta bort.

spelare = {'A':0, 'B':0, 'C':0, 'D':0}
print(spelare)
sökt = 'A'
for namn in spelare:
    if sökt == namn:
        spelare[namn] += 10 # ändra poäng
spelare['E'] = 0 # lägg till spelare
print(spelare)
del spelare['B'] # ta bort spelare
print(spelare)

Man kan istället skapa en egen klass (objekttyp) om man kan använda objektorienterad programmering.

Hur gör jag om antalet spelare är en variabel som anges av input? Jag har sparat alla spelares namn i en lista.

Det är en omväg att först ha namnen i en lista och sedan lägga dem i en dictionary, men så här kan man göra:

spelarnamn = ['A', 'B', 'C', 'D', 'E']
spelare = {}
antalspelare = int(input('Antal?'))
for i in range(antalspelare):
    spelare[spelarnamn[i]] = 0
print(spelare)

Svara Avbryt
Close