Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
tennis
import random import time import sys class team(object): def __init__(self,skill,name): self.skill=skill self.points=0 self.name=name def getSkill(self): return self.skill def getName(self): return self.name class match(object): def __init__(self,team1,team2,serveBonus,simulation): self.team1=team1 self.team2=team2 self.skill1=team1.getSkill() self.skill2=team2.getSkill() self.sets1=0 self.sets2=0 self.games1=0 self.games2=0 self.points1=0 self.points2=0 self.server=1 self.serveBonus=serveBonus self.simulation=simulation def get_team1(self): return self.team1 def get_team2(self): return self.team2 def scoresPoint(self): s1=self.skill1 s2=self.skill2 if self.server==1: tot=self.skill1+(self.skill1*self.serveBonus)+self.skill2 return (random.random()*tot) > self.skill2 if self.server==0: tot=self.skill2+(self.skill2*self.serveBonus)+self.skill1 return random.random()*tot < self.skill1 def playPoint(self): if self.scoresPoint(): self.points1+=1 else: self.points2+=1 def getGameScore(self): if self.simulation=="OFF":print self.team1.getName()+" "+str(self.games1)+" - "+str(self.games2)+" "+self.team2.getName() def swapServe(self): self.server=abs(self.server-1) def resetPoints(self): self.points1=0 self.points2=0 self.getGameScore() def resetGames(self): self.games1=0 self.games2=0 def playgame(self): while self.points1<4 and self.points2<4: if self.points1==3 and self.points2==3: return self.playDeuce() self.playPoint() if self.points1==4: self.games1+=1 if self.server==0: if self.simulation=="OFF":print self.team1.getName()+" breaks!" self.resetPoints() return if self.points2==4: self.games2+=1 if self.server==1: if self.simulation=="OFF":print self.team2.getName()+" breaks!" self.resetPoints() return def playDeuce(self): j= self.get_team1() k= self.get_team2() while True: if self.points1==self.points2: self.points1=0 self.points2=0 self.playPoint() if self.points1==2: self.games1+=1 self.resetPoints() return if self.points2==2: self.games2+=1 self.resetPoints() return def playSet(self): j= self.get_team1() k= self.get_team2() if self.sets1==0 and self.sets2==0: if self.simulation=="OFF":print "Welcome! Today we see the mighty "+ self.team1.getName().upper()+" take on the indomitable "+self.team2.getName().upper() if self.simulation=="OFF":print "The players are warming up, and we should be underway any moment" if random.random()>0.5: self.server=1 s=self.team1.getName() else: self.server=0 s=self.team2.getName() if self.simulation=="OFF":print s +" to serve\n" if self.sets1==self.sets2 and self.sets1>0: if self.simulation=="OFF":print "\n"+self.team1.getName()+ " v "+self.team2.getName()+": "+str(self.sets1)+ " sets all" if self.sets1>self.sets2: if self.simulation=="OFF":print "\n"+self.team1.getName()+ " leads "+self.team2.getName()+" "+str(self.sets1)+ " sets to "+ str(self.sets2) if self.sets1<self.sets2: if self.simulation=="OFF":print "\n"+self.team2.getName()+ " leads "+self.team1.getName()+" "+str(self.sets2)+ " sets to "+ str(self.sets1) if self.simulation=="OFF":print "Starting set "+str(1+self.sets1+self.sets2) while True: if self.games1==6 and self.games2==6: if self.sets1==2 and self.sets2==2: if self.simulation=="OFF":print "no tiebreak in final set" pass else: if self.simulation=="OFF":print "scores level! Entering tiebreak...." self.resetPoints() return self.playTiebreak() self.playgame() self.swapServe() if self.games1>=6 and self.games1>(self.games2+1): self.sets1+=1 self.resetGames() if self.simulation=="OFF":print self.team1.getName() + " wins set" return if self.games2>=6 and self.games2>(self.games1+1): self.sets2+=1 self.resetGames() if self.simulation=="OFF":print self.team2.getName() + " wins set" return def playTiebreak(self): while True: if self.points1>=6 and self.points1==self.points2: while True: if (self.points1+self.points2)%2==1:self.swapServe() if self.points1==self.points2: if self.simulation=="OFF":print "Score "+str(self.points1)+"-"+str(self.points2)+" in tiebreak!!" self.playPoint() if self.points1>=(self.points2+2): self.sets1+=1 self.games1+=1 if self.simulation=="OFF":print self.team1.getName() + " wins set "+str(self.points1)+" - "+str(self.points2) +" in tiebreak" self.resetPoints() self.resetGames() return if self.points2>=(self.points1+2): self.sets2+=1 self.games2+=1 if self.simulation=="OFF":print self.team2.getName() + " wins set "+str(self.points1)+" - "+str(self.points2) +" in tiebreak" self.resetPoints() self.resetGames() return if (self.points1+self.points2)%2==1:self.swapServe() self.playPoint() if self.points2>=7 and self.points2>(self.points1+1): self.sets2+=1 self.games2+=1 if self.simulation=="OFF":print self.team2.getName() + " wins set"+str(self.points1)+" - "+str(self.points2) +" in tiebreak" self.resetPoints() self.resetGames() return if self.points1>=7 and self.points1>(self.points2+1): self.sets1+=1 self.games1+=1 if self.simulation=="OFF":print self.team1.getName() + " wins set "+str(self.points1)+" - "+str(self.points2) +" in tiebreak" self.resetPoints() self.resetGames() return def playMatch(self): j= self.get_team1() k= self.get_team2() while self.sets1<=3 and self.sets2<=3: self.playSet() if self.sets1==3: if self.simulation=="OFF":print self.team1.getName().upper() + " WINS MATCH!" return 1 if self.sets2==3: if self.simulation=="OFF":print self.team2.getName().upper() + " WINS MATCH!" return 0 def simulate(n,s1,p1,s2,p2,serveBonus): counter=0.0 c=0.0 while counter<n: wimbledonFinal=match(team(s1,p1),team(s2,p2),serveBonus,simulation="ON") c+=wimbledonFinal.playMatch() counter+=1 print p1 + " won "+ str(int(c))+"("+str(round((c/counter)*100,1))+"%) of simulated matches" def runApp(number,player1,skill1,player2,skill2,serveBonus):#take input file if number==1: simulation="OFF" match(team(skill1,player1),team(skill2,player2),serveBonus,simulation="OFF").playMatch() else: simulation="ON" simulate(number,skill1,player1,skill2,player2,.5) for line in sys.stdin: eval(line)
run
|
edit
|
history
|
help
0
test
my first code
u
Gardener
single_digit_5
Code2
a
daily score
Gettinginput from users
trial