Условия задачи:

 

Игра "Камень, ножницы, бумага". Напишите программу, которая дает пользователю возможность поиграть с компьютером в игру "Камень, ножницы, бумага". Программа должна работать следующим образом. 
1. Когда программа запускается, генерируется случайное число в диапазоне от 1 до 3. Если число равняется 1, то компьютер выбрал камень. Если число равняется 2, то компьютер выбрал ножницы. Если число равняется 3, то компьютер выбрал бумагу.
(Пока не показывайте выбор компьютера.)
2. Пользователь вводит на клавиатуре выбранный вариант "камень", "ножницы" или "бумага".
3. Выбор компьютера выводится на экран.
4. Победитель выбирается согласно следующим правилам:
- если один игрок выбирает камень, а другой игрок выбирает ножницы, то побежда­ет камень (камень разбивает ножницы);
- если один игрок выбирает ножницы, а другой игрок выбирает бумагу, то побеж­дают ножницы (ножницы режут бумагу);
- если один игрок выбирает бумагу, а другой игрок выбирает камень, то побеждает бумага (бумага заворачивает камень);
- если оба игрока делают одинаковый выбор, то для определения победителя нужно
сыграть повторный раунд.

 

Решение задачи:

from random import randint
#Интересная задача. В начал создаем функцию которая будет
#определять что "выбрал" комп. Потом создаем функцию с опредленим
#победился куда передаем выбор компа и игрока. В этой функции
#сразу определяем есть ли ничья, есла да то пишем сообщения,
#что бы отправить на второй раунд. Можно сделать интересней через булеву функцию.

def main():
	def get_comp_choice():
		comp_choice = randint(1,3)
		if comp_choice == 1:
			return 'камень'
		elif comp_choice == 2:
			return 'ножницы'
		else:
			return 'бумага'
	def get_winer(value1, value2):
		print(f'Компьютер выбрал {value2}')
		if value1 == value2:
			print('Ничья! Попробуйте еще раз')
			return 'new game'
		else:
			if value1 == 'камень':
				if value2 == 'ножницы':
					print('Вы выиграли')
				else:
					print('Выиграл компьютер')
			elif value1 == 'ножницы':
				if value2 == 'бумага':
					print('Вы выиграли')
				else:
					print('Выиграл компьютер')
			else:
				if value2 == 'камень':
					print('Вы выиграли')
				else:
					print('Выиграл компьютер')
	winner = 'new game'
	while winner == 'new game':
		user = input('Введите на выбор камень, ножницы или бумага: ')
		while user != 'камень' and user != 'ножницы' and user != 'бумага':
			print('Вы ошиблись в написании, попробуйте еще раз')
			user = input('Введите на выбор камень, ножницы или бумага: ')
		comp_choice = get_comp_choice()
		winner = get_winer(user, comp_choice)
main()

#второй вариант. теперь функция вобора победителя булева и возвращает первое
#значение это флаг продолжать ли игру если ничья или нет. а второй уже кто
#победил и потом это проверяется через if

def main():
	def get_comp_choice():
		comp_choice = randint(1,3)
		if comp_choice == 1:
			return 'камень'
		elif comp_choice == 2:
			return 'ножницы'
		else:
			return 'бумага'
	def get_winer(value1, value2):
		print(f'Компьютер выбрал {value2}')
		if value1 == value2:
			print('Ничья! Попробуйте еще раз')
			return True, False
		else:
			if value1 == 'камень':
				if value2 == 'ножницы':
					return False, True
				else:
					return False, False
			elif value1 == 'ножницы':
				if value2 == 'бумага':
					return False, True
				else:
					return False, False
			else:
				if value2 == 'камень':
					return False, True
				else:
					return False, False
	game = True
	while game:
		user = input('Введите на выбор камень, ножницы или бумага: ')
		while user != 'камень' and user != 'ножницы' and user != 'бумага':
			print('Вы ошиблись в написании, попробуйте еще раз')
			user = input('Введите на выбор камень, ножницы или бумага: ')
		comp_choice = get_comp_choice()
		game, winner = get_winer(user, comp_choice)
	if winner:
		print('Вы выиграли')
	else:
		print('Выиграл  компьютер')
main()

#Варинат три еще изящней. но мы используем метод nonlocal тот метод позволяет
#менять переменную которая находится во внешней  функции очень похож на global
#Устанавливаем флаг True yf проведение игры если ничья флаг не меняется а если
# есть победитель флаг меняется на False  и цикла прекращается

def main():
	def get_comp_choice():
		comp_choice = randint(1,3)
		if comp_choice == 1:
			return 'камень'
		elif comp_choice == 2:
			return 'ножницы'
		else:
			return 'бумага'
	def get_winer(value1, value2):
		print(f'Компьютер выбрал {value2}')
		if value1 == value2:
			print('Ничья! Попробуйте еще раз')
		else:
			nonlocal game
			game = False
			if value1 == 'камень':
				if value2 == 'ножницы':
					return  True
				else:
					return  False
			elif value1 == 'ножницы':
				if value2 == 'бумага':
					return  True
				else:
					return  False
			else:
				if value2 == 'камень':
					return  True
				else:
					return  False
	game = True
	while game:
		user = input('Введите на выбор камень, ножницы или бумага: ')
		while user != 'камень' and user != 'ножницы' and user != 'бумага':
			print('Вы ошиблись в написании, попробуйте еще раз')
			user = input('Введите на выбор камень, ножницы или бумага: ')
		comp_choice = get_comp_choice()
		winner = get_winer(user, comp_choice)
	if winner:
		print('Вы выиграли')
	else:
		print('Выиграл  компьютер')
main()