· 6 years ago · Nov 12, 2019, 01:32 PM
1import argparse
2import random
3import time
4import math
5import pprint
6import sqlite3
7
8conn = sqlite3.connect('BD_Tournament.sqlite')
9c = conn.cursor()
10pp = pprint.PrettyPrinter(width=120)
11
12c.execute('''
13Create table if not exists Tournament (
14tournament int NOT NULL,
15stage int NOT NULL,
16match int NOT NULL,
17round int NOT NULL,
18p1name varchar(50) NOT NULL,
19p2name varchar(50) NOT NULL,
20p1point int NOT NULL,
21p2point int NOT NULL,
22winner varchar(50) NOT NULL
23);
24''')
25
26c.execute('Select max(tournament) From Tournament')
27curtour = c.fetchall()[0][0]
28if curtour is None:
29 curtour = 1
30else:
31 curtour += 1
32
33parser = argparse.ArgumentParser()
34parser.add_argument("roundnumber", type=int)
35parser.add_argument("playersnumber", type=int)
36args = parser.parse_args()
37roundnum = args.roundnumber
38playersnum = args.playersnumber
39
40namegen = [
41 ["Колян", 0],
42 ["Владик", 0],
43 ["Димка", 0],
44 ["Антон Сергеевич", 0]
45]
46
47stages = int(math.log2(playersnum) + 1)
48names = [['' for x in range(playersnum)] for y in range(stages)]
49
50for i in range(playersnum):
51 k = round(random.random() * 100) % 4
52 namegen[k][1] += 1
53 name = namegen[k][0] + str(namegen[k][1])
54 names[0][i] = name
55
56
57def player(curstage, player):
58 name = names[curstage][player]
59 while True:
60 yield round(random.random() * 10), name
61
62
63name1, name2 = '', ''
64curstage = 0
65k = playersnum / 2
66j = 0
67s = 0
68for i in range(playersnum - 1):
69 playerOne = player(curstage, s)
70 playerTwo = player(curstage, s + 1)
71 p1wins = 0
72 p2wins = 0
73 print("Match " + str(i + 1))
74 print()
75 r = 1
76 while r < roundnum + 1:
77 x, name1 = next(playerOne)
78 y, name2 = next(playerTwo)
79 # time.sleep(2)
80 print("Round " + str(r))
81 print(name1 + ": " + str(x))
82 print(name2 + ": " + str(y))
83 print()
84 if x > y:
85 print(name1 + " win!")
86 p1wins += 1
87 Data = [(curtour, curstage + 1, j + 1, r, name1, name2, x, y, name1)]
88 c.executemany('''Insert into Tournament values(?,?,?,?,?,?,?,?,?)''', Data)
89 conn.commit()
90 elif x < y:
91 print(name2 + " win!")
92 p2wins += 1
93 Data = [(curtour, curstage + 1, j + 1, r, name1, name2, x, y, name2)]
94 c.executemany('''Insert into Tournament values(?,?,?,?,?,?,?,?,?)''', Data)
95 conn.commit()
96 else:
97 print("Friendship win! Rematch!")
98 r -= 1
99 r += 1
100 print()
101 # time.sleep(2)
102 print("Match is over!")
103 if p1wins > p2wins:
104 print(name1 + " win match!")
105 names[curstage + 1][j] = name1
106 elif p1wins < p2wins:
107 print(name2 + " win match!")
108 names[curstage + 1][j] = name2
109 if j == k - 1:
110 k = k / 2
111 curstage += 1
112 j = 0
113 s = 0
114 else:
115 j += 1
116 s += 2
117 print()
118print(names[stages - 1][0] + " win tournament!")
119print()
120for i in range(stages - 1, -1, -1):
121 k = playersnum
122 for j in range(k):
123 print(names[i][j], end=" ")
124 k /= 2
125 print()
126
127c.execute('Select * From Tournament')
128pp.pprint(c.fetchall())
129
130c.execute('''
131With temp as
132(Select tournament, max(stage) stage From Tournament Group by tournament)
133
134Select t.tournament, winner
135From Tournament t join temp on t.tournament = temp.tournament
136Where t.stage = temp.stage
137''')
138pp.pprint(c.fetchall())
139
140conn.close()