写了几遍的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 没有提供临场替换选手和取消选手的功能,导致中场退出的人只能被假设处理。
但都不是运行时致命缺点。
(阶段I代码如下:实现两轮自动按不同键值筛选和复活赛传递.
python 已经算是代码简化之王了,处理起赛程代码来还是要超出上百行,杯具吖,不过既然是第一次拿python写.py源程序 缺乏经验 原谅自己了。







































































































































































































































































































已经用于实际班级乒乓球比赛,缺点如下:
1 每一大轮一定要等到所有人都比赛完才开始随机下一轮选手,导致先比完的人只能等待而不能提前进入下一轮预先随机。
2 没有提供临场替换选手和取消选手的功能,导致中场退出的人只能被假设处理。
但都不是运行时致命缺点。