6 svar
199 visningar
kristoffer2020 behöver inte mer hjälp
kristoffer2020 176
Postad: 19 maj 2020 16:24

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.

Skaft 2373 – F.d. Moderator
Postad: 19 maj 2020 16:41

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 416
Postad: 19 maj 2020 16:43

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 176
Postad: 19 maj 2020 23:52
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?

Lindehaven 820 – Lärare
Postad: 20 maj 2020 00:20

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 176
Postad: 20 maj 2020 01:07 Redigerad: 20 maj 2020 01:08
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.

Lindehaven 820 – Lärare
Postad: 20 maj 2020 03:03

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
Close