На столе лежат сто монет. За ход одному игроку разрешается взять до десяти монет. Проигрывает тот игрок, которому нечего взять.
import random
# случайный выбор игрока и передача хода
def player_choise(players):
player = random.choice(players)
print('Первый ход достался: ', player, '\n-----------------------------------\n')
check_summ(player)
# проверка суммы и определение проигравшего игрока
def check_summ(player):
if summ < 100:
check_count(player)
else:
print('\n-----------------------------------\nИГРА ОКОНЧЕНА\nПРОИГРАЛ: ', player)
# проверка допустимого диапазона ввода
def check_count(player):
if summ <= 90:
max_enter = 10
else:
max_enter = 100 - summ
player_move(player, max_enter)
# ход игрока
def player_move(player, max_enter):
global summ
x = None
print('Монет забрано / осталось: ', summ, '/', 100 - summ)
print('Вы можете забрать до', max_enter, 'монет')
print('Ходит игрок: ', player.upper())
while x not in range(1, max_enter + 1):
x = int(input('Введите количество монет: '))
summ += x
print('\n')
player_change(player)
# смена игроков
def player_change(player):
if (players.index(player) + 2) > len(players):
player = players[0]
check_summ(player)
else:
player = players[players.index(player) + 1]
check_summ(player)
summ = 0
players = ['Cat', 'Dog', 'Spider', 'Mouse']
player_choise(players)
initGame(players) //Заводим игроков и даем право первого хода
while(check_summ): //перед каждым ходом проверяем оставшуюся сумму
playerMove()
playerChange()
endGame() //выводим результаты игры
def playerChange():
playerActive = players[playerActive-len(players)+1].index()
import random
from itertools import cycle
def game():
bank = 100
while bank > 0:
bank -= yield bank
print("...осталось", bank)
print("game over!")
yield None
def player(name):
print("Я", name, "!")
have = 0
rest = yield 0
while have < 100500:
take = random.randint(1, min(10, rest))
have += take
print(name, "взял" + name[7:8], take)
rest = yield take
if rest is None:
print(name, "лошара!")
break
if name[0] == 'К' and random.random() > .5:
print("Да ну вас нафег, пусть за меня Вася играет!")
yield from player("Вася")
def play(game, *players):
take = None
[p.send(None) for p in players]
for player in cycle(players):
try:
rest = game.send(take)
take = player.send(rest)
except StopIteration:
break
play(game(), player("Ослик"), player("Суслик"), player("Паукан"), player("Кисонька"))
import random
import itertools
def take_coins(max_coins):
while True:
raw_coins = input('возьмите монеты[{}..{}]'.format(1, max_coins))
try:
coins = int(raw_coins)
if not 1 <= coins <= max_coins:
raise ValueError()
except ValueError as ex:
print('неверные данные')
else:
return coins
def game(coins, players):
players = random.sample(players, len(players))
for player in itertools.cycle(players):
if coins == 0:
print('игрок {} проиграл'.format(player))
break
else:
print('{} ходит'.format(player))
coins -= take_coins(min(10, coins))
print('осталось {} монет'.format(coins))
if __name__ == '__main__':
game(coins=100, players=['Вася', 'Петя'])