写了几遍的python源码(考虑到时间因素 没有增加server和client 功能):

(阶段I代码如下:实现两轮自动按不同键值筛选和复活赛传递.

python 已经算是代码简化之王了,处理起赛程代码来还是要超出上百行,杯具吖,不过既然是第一次拿python写.py源程序 缺乏经验 原谅自己了。



import  random
import  string
import  msvcrt 
import  sys

class  player:
    name
= ""
    num
= 0
    totalWin
= 0
    compNum
= 0
    sex
= 0   # '0' is female,'1' is male
    ScoreList = range( 15 )
    RivalList
= range( 15 )
    
def   __init__ (self,_name,_num,_sex):
        self.name
= _name
        self.num
= _num
        self.sex
= _sex
    
def  Record(self,score,RivalNum):
        self.compNum
= self.compNum + 1
        self.ScoreList[self.compNum]
= score
        self.RivalList[self.compNum]
= RivalNum
        
if (score > 0):
            self.totalWin
= self.totalWin + 1

def  getPlayersFromFile(path):
    
""" To get the students-list of the path """

    str 
=  file(path).read()
    str 
=  str.replace( " \n " , " ; " )
    num 
=  str.count( " ; " ) + 1
    str 
=  str.split( " ; " )
    list 
=  [elem.split( " , " for  elem  in  str ]
    
if  list[ - 1 ] == [ '' ]:
        num
= num - 1
        
del  list[ - 1 ]

    playerList
= [player(list[0][ 1 ],string.atoi(list[0][0]),string.atoi(list[0][ 2 ]))]
    
for  i  in  range( 1 ,num):
        playerList.append(player(list[i][
1 ],string.atoi(list[i][0]),string.atoi(list[i][ 2 ])))
    
return  (playerList,num)

def  swap(a,b):
    
return  (b,a)



class  competition:
    playerList 
=  []
    winPlayerList 
=  []
    winNum
= 0
    winNumberList
= []
    failPlayerList 
=  []
    failNum
= 0
    failNumberList
= []
    th
= 0
    playerNumber
= 0
    directUp 
=- 1
    
def   __init__ (self,_playerList,_num,_index):
        self.playerList
= _playerList
        self.playerNumber
= _num
        self.th
= _index



                

    
def  setDirectUp(self):
        
if (self.playerNumber % 2 == 0):
            
print   " move! "
            
return   1
        
        b
= 0
        
for  i  in  self.playerList:
            
if (i.sex == 0):
                b
= b + 1
            
else :
                
break
        
if (b % 2 != 0):
            
print   " !!!! "
            self.directUp
= b - 1
        
else :
            
# print "move!"
            self.directUp = self.playerNumber - 1
        

    
def  setRival(self,isRandom = 1 ,index = 1 ): #  index(1,2)=(sex,totalWin)
         if (isRandom == 1 ):
            random.shuffle(self.playerList)
        k
= 0

        
for  i  in  range( 1 ,self.playerNumber):
            
if (index == 1 ):
                
while ((k < self.playerNumber  and  k < i) and (self.playerList[i].sex == 0)):
                
                    
if (self.playerList[k].sex == 1 ):
                        (self.playerList[i],self.playerList[k])
= swap(self.playerList[i],self.playerList[k])
                        k
= k + 1
                        
break
                    k
= k + 1
                    
            
if (index == 2 ):
                
while (k < self.playerNumber):
                    
if (self.playerList[k].totalWin > self.playerList[i].totalWin):
                        (self.playerList[i],self.playerList[k])
= swap(self.playerList[i],self.playerList[k])
                        k
= k + 1
                        
break
                    k
= k + 1
        self.setDirectUp()                    
       
    
def  search(self,i):
        
for  e  in  range(self.playerNumber):
            
if (self.playerList[e].num == i):
                
return  self.playerList[e]
        
return  0
    
def  findList(self,list,value):
        
for  i  in  list:
            
if (value == i):
                
return   1
        
return  0
    
def  setResult(self,winNumList):
        k
= []
        f
= []
        
if (self.directUp !=- 1 ):
            winNumList.append(self.playerList[
- 1 ].num)
            
# print "%d:",self.playerList[self.directUp].num
        self.winNumberList = winNumList
        
for  i  in  winNumList:
            m
= self.search(i)
            
if ( not  m):
                
print   " !!- "
                
return  0
            
else :
                k.append(m)
        numList
= []
        
for  i  in  self.playerList:
            numList.append(i.num)
        
for  i  in  numList:

            v
= self.findList(winNumList,i)
            
if ( not  v):
                m
= self.search(i)
                
if (m):
                    f.append(m)
                    self.failNumberList.append(m)
                
else :
                    
print   " \nERROR In Finding %d!!!!! " %  i
                
        self.winPlayerList
= k
        self.failPlayerList
= f
        self.winNum
= self.playerNumber / 2 + self.playerNumber % 2
        self.failNum
= self.playerNumber / 2
        
return   1
            

def  stoList(list):        
    t
= 0

    t
= list.count( ' , ' ) + 1
    list
= list.split( " , " )
    listM
= []
    
for  i  in  range(t):
        listM.append(string.atoi(list[i]))
    
return  listM


def  printResult(comp):
    
print   " \nWinners: "
    
for  i  in  comp.winPlayerList:
        
print   " %02d,%s "   % (i.num,\
                        i.name)
    
print   " \nTBA: "
    
for  i  in  comp.failPlayerList:
        
print   " %02d,%s "   % (i.num,\
                        i.name)

def  isInList(list,i): # whether i in list
     for  e  in  list:
        
if (e == i):
            
return   1
    
return  0
def  belongList(list,subList): # whether subList belongs to list 
     for  e  in  subList:
        
if ( not  isInList(list,e)):
            
return  0
    
return   1

def  runComp(comp,p,num,th):
    
# print Init Player List
    comp  =  competition(p,num,th)
    comp.setRival(0,
1 )
    te
= 0
    
# print "!!%d"%comp.directUp
     if (comp.directUp !=- 1 ):
        
        te
= comp.playerList[comp.directUp]
        comp.playerList.append(te)
        
del (comp.playerList[comp.directUp])
        
    
print   " \n\nInit Player List for [%f]Group\n "   %  comp.th 
    
for  i  in  range(0,comp.playerNumber - 1 , 2 ):

        
print   " (%02d,%s) - (%02d,%s) "   % (comp.playerList[i].num,comp.playerList[i].name,\
                                 comp.playerList[i
+ 1 ].num,comp.playerList[i + 1 ].name)

    
if (comp.directUp !=- 1 ):            
        
print   " direct promotion:(%02d,%s) "   % (comp.playerList[comp.playerNumber - 1 ].num,\
                                         comp.playerList[comp.playerNumber
- 1 ].name)       
    
return  comp


def  runCompResult(comp):
    list
= ""
    
# while(1):
     print   " Please enter[%d] winner's numbers such as '5,7,2,9,11 " % comp.th
    sys.stdout.write(
' >>> ' )
    list
= raw_input()
        
    
""" print "Please enter ditto again for assurance:"
        sys.stdout.write('>>>')
        list2=raw_input()

        
        if((list==list2) and belongList(comp.winNumberList,list) ):
            print "Correct."
            break
        print "Your two inputs aren't equal,please enter again! "
    
"""
        
            
    list
= stoList(list)
    comp.setResult(list)
    printResult(comp)
    
    

    
if   __name__   ==   " __main__ " :

    (p,num)
= getPlayersFromFile( " g:\\cs_1.log " )
    comp1
= 0
    comp2
= 0
    comp3
= 0
    comp4
= 0
    comp5
= 0
    comp6
= 0
    comp7
= 0
    comp8
= 0
    comp9
= 0


    comp1
= runComp(comp1,p,num, 1 )
    runCompResult(comp1)

    
print   " %d,%d " % (comp1.winNum,  comp1.failNum)
    comp2
= runComp(comp2,comp1.winPlayerList,comp1.winNum, 2.1 )
    comp3
= runComp(comp3,comp1.failPlayerList,comp1.failNum, 2.2 )
  
    runCompResult(comp2)
    runCompResult(comp3)
    
    
# comp4=competition(comp2.winPlayerList,comp2.winNum,4.1)#jump to directly 4.1th 

    comp5
= runComp(comp5,comp2.failPlayerList,comp2.failNum, 3.1 )
    comp6
= runComp(comp6,comp3.winPlayerList,comp3.winNum, 3.2 )  
    comp7
= runComp(comp7,comp3.failPlayerList,comp3.failNum, 3.3 )


    runCompResult(comp5)       
    runCompResult(comp6)
    runCompResult(comp7)



    comp7
= runComp(comp7,comp7.winPlayerList,comp7.winNum, 3.32 )
    runCompResult(comp7)

    comp8
= runComp(comp8,comp2.winPlayerList + comp5.winPlayerList + comp6.winPlayerList + comp7.winPlayerList,\
                      comp2.winNum
+ comp5.winNum + comp6.winNum + comp7.winNum, 4.1 )

    runCompResult(comp8)

    j
= 0
    
while ( 1 ):
        
if (comp8.winNum >= 2 ):
            comp9
= runComp(comp9,comp8.winPlayerList,comp8.winNum, 5 + j + 0.1 )
            runCompResult(comp9)
            comp8
= comp9
            j
= j + 1
        
else :
            
break

    
    



已经用于实际班级乒乓球比赛,缺点如下:

1 每一大轮一定要等到所有人都比赛完才开始随机下一轮选手,导致先比完的人只能等待而不能提前进入下一轮预先随机。

2 没有提供临场替换选手和取消选手的功能,导致中场退出的人只能被假设处理。

但都不是运行时致命缺点。