from random import random # návrh programu metodou shora dolů # první úroveň: def main(): printIntro() probA, probB, n = getInputs() winsA, winsB = simNGames(n, probA, probB) printSummary(winsA, winsB) # druhá úroveň: def printIntro(): print('Tento program simuluje hru racquetballu mezi dvěma hráči "A" a "B".') print('Schopnosti každého hráče jsou dány pravděpodobností', end=' ') print('(číslem mezi 0 a 1),') print('že daný hráč vyhraje podání. Hráč "A" vždy začíná.\n') def getInputs(): a = float(input("Pravděpodobnost výhry hráče A při podání? ")) b = float(input("Pravděpodobnost výhry hráče B při podání? ")) n = int(input("Kolik her máme simulovat? ")) return a, b, n def printSummary(winsA, winsB): n = winsA + winsB print("\nSimulovaných her:", n) print("Výhry hráče A: %d (%0.1f %%)" % (winsA, 100.0 * winsA / n)) print("Výhry hráče B: %d (%0.1f %%)" % (winsB, 100.0 * winsB / n)) def simNGames(n, probA, probB): winsA, winsB = 0, 0 for i in range(n): scoreA, scoreB = simOneGame(probA, probB) if scoreA > scoreB: winsA += 1 else: winsB += 1 return winsA, winsB # třetí úroveň: def simOneGame(probA, probB): scoreA, scoreB = 0, 0 serving = "A" while not gameOver(scoreA, scoreB): if serving == "A": if random() < probA: scoreA += 1 else: serving = "B" else: if random() < probB: scoreB += 1 else: serving = "A" return scoreA, scoreB def gameOver(scoreA, scoreB): return scoreA == 15 or scoreB == 15 if __name__ == '__main__': main()