Meddelande

Du befinner dig just nu på en äldre version av Pluggakuten, gamla.pluggakuten.se. Nya Pluggakuten lanserades den 6 februari 2017 och du finner forumet på www.pluggakuten.se.

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

 


Sidfot

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

Powered by Mattecentrum
 |  Denna sida använder cookies |  Kontakta oss |  Feedback |