Meddelande
På gamla.pluggakuten.se kan du fortfarande läsa frågorna och svaren som ställts, men du kan inte skapa ett nytt konto eller nya trådar. Nya frågor och nytt konto skapar du på det nya forumet, välkommen dit!
Python Kulstötning, flera vinnare (Objektorientering)
- Progfrågor
- Medlem
Offline
- Registrerad: 2016-10-24
- Inlägg: 1
Python Kulstötning, flera vinnare (Objektorientering)
Tjena! Jag har en uppgift med en del angivna specifikationer. Lite generellt om uppgiften: Man läser in en textfil med olika tävlande där man angivit medelvärde samt standardavvikelse på deras kast. Man kan sedan bestämma hur många tävlingar man vill köra. Sedan kastar de tävlande kulan 6 gånger var per tävling, och den med längst kast koras som vinnare. Efter det så ska vinnarens namn printas ut samt dennes resultat, och det ska lagras i statistiken som printas när alla tävlingar är över.
Jag har kommit en bra bit på vägen, men en specifikation har jag det struligt med. Då kulstötningskasten mäts med 1 cm marginal, så kan två stötare få samma resultat. Då ska båda anges som vinnare, och båda ska få en vinst i statistiken.
Här är min nuvarande(fungerande) kod. Hur och vart kan jag göra så att två tävlande kan vinna samtidigt, och att de båda lagras som vinnare i statistiken?
--------------------------------------------------------------------------------------------------------------------------
import random
#Kulstötar & Tävlings class
filnamn=input('Vilken fil vill du hämta tävlande från?: ')
class Kulstötare:
def __init__(self,namn,medelvärde,standardavvikelse):
self.namn = namn
self.medelvärde = medelvärde
self.stdavk = standardavvikelse
self.bästa = 0
self.vinster = 0
def __str__(self):
tävlande = "\nTävlande: " +self.namn + "\nVinster: " + str(self.vinster)
return tävlande
def kast(self):
self.resultat = []
for i in range(0,6):
kast = random.normalvariate(self.medelvärde,self.stdavk)
self.resultat.append(kast)
self.bäst = max(self.resultat)
return self.bäst
class Tävling():
def main(self):
self.lästävlandefrånfil()
self.tävling()
self.ordnastats()
self.stats()
def lästävlandefrånfil(self):
fil = open(filnamn, 'r')
rad = fil.readline()
self.tävlande = []
while rad != '-':
rad = rad.rstrip('\n')
delar = rad.split(',')
namn = delar[0]
medelvärde = float(delar[1])
standardavvikelse = float(delar[2])
nms = Kulstötare(namn, medelvärde,standardavvikelse)
self.tävlande.append(nms)
rad = fil.readline()
return self.tävlande
def tävling(self):
while True:
try:
x=int(input("Hur många tävlingar?"))
break
except ValueError:
print("Du kan bara ange siffror.")
for omgångar in range(0,x):
for tävlande in self.tävlande:
tävlande.kast()
bästkast = max(self.tävlande, key = lambda kast: kast.bäst)
bästkast.vinster += 1
print("Segrare: ", bästkast.namn, "\nResultat: ", "{0:.2f}".format(bästkast.bäst))
def ordnastats(self):
return self.tävlande.sort(key=lambda tävlande:tävlande.vinster, reverse=True)
def stats(self):
for vinster in range(len(self.tävlande)):
print(self.tävlande[vinster])
t=Tävling()
t.main()
-------------------------------------------------------------------------------------------------------------------------
- Henrik E
- Medlem
Offline
- Registrerad: 2015-09-22
- Inlägg: 3189
Re: Python Kulstötning, flera vinnare (Objektorientering)
I stället för bästkast = max... bör det väl stå vinnare= max... (bästa deltagaren)
Gör sen en slinga for tävlande in self.tävlande: if tävlande.bäst=vinnare.bäst: osv