Uploaded by sonia.evlanova

Лабораторная работа Питон

advertisement
Лабораторная работа
№5 «Решение
антагонистических
игр»
ФИО
Евланова С.А.
Группа
БИ-363
Проверил
Симонов А.Б.
Вариант
4
Оценка
Задача 1.
Запрограммировать следующую антагонистическую игру: компьютер и
игрок загадывают число 1 или 2. Если компьютер угадывает число игрока, он
получает столько, сколько загадал игрок (и компьютер). Если компьютер не
угадывает число, загаданное игроком, выигрыш игрока равен числу, которое
назвал компьютер (см. рисунок 1).
Рисунок 1 - основная программа
import random
computer=random.random()
if computer<(2/3):
chislo=1
else:
chislo=2
person=int(input("Сейчас пиграем в игру! Загадайте значение от 1 до 2:"))
print("\nВы загадали: ", person, "Компьютер загадал: ", chislo)
if chislo==person:
1
print("\nКомпьютер угадал ваше число!")
else:
print("\nКомпьютер не угадал ваше число!")
Решение задачи:
1) На основании знаний, полученных в рамках предмета «Исследования
операций», доказано, что оптимальное поведение компьютера –
загадывать 1 в 2/3 случаях и 2 в 1/3 случаях. Найдено оптимальное
поведение игрока.
import random
computer=random.random()
if computer<(2/3):
chislo=1
else:
chislo=2
2) Запрограммирована функция, которая генерирует 1 в 2/3 случаях и 2 в 1/3
случаях
import random
computer=random.random()
if computer<(2/3):
chislo=1
else:
chislo=2
person=int(input("Сейчас пиграем в игру! Загадайте значение от 1 до 2:"))
print("\nВы загадали: ", person, "Компьютер загадал: ", chislo)
2
if chislo==person:
print("\nКомпьютер угадал ваше число!")
WinOfComp=0
WinOfComp=WinOfComp+chislo
else:
print("\nКомпьютер не угадал ваше число!")
WinOfPerson=0
WinOfPerson=WinOfPerson+computer
print("Выигрыш ПК = ", WinOfComp, "Выигрыш Человека = ", WinOfPerson)
3) Сделана программа, которая будет загадывать число, считывать число,
загаданное игроком, и выдавать свое загаданное число, кто победил и
результат игры для каждого игрока (см. рисунок 2).
import random
x=0
while x<10:
computer=random.random()
if computer<(2/3):
chislo=1
else:
chislo=2
person=int(input("Сейчас пиграем в игру! Загадайте значение от 1 до
2:"))
print("\nВы загадали: ", person, "Компьютер загадал: ", chislo)
WinOfComp=0
WinOfPerson=0
if chislo==person:
3
print("\nКомпьютер угадал ваше число!")
WinOfComp=(chislo+1)
else:
print("\nКомпьютер не угадал ваше число!")
WinOfPerson=(person+1)
print("Выигрыш ПК = ", WinOfComp, "Выигрыш Человека = ",
WinOfPerson)
j=int(input("Хотите продолжить играть?\n1-да\n2-нет"))
if j==2:
break
Рисунок 2 - бесконечный цикл
Вывод: в данном задании была проведена работа по генерации чисел с
определенной вероятностью, в частности была сделана игра угадает ли ПК
загаданное число игрока.
Задача 2.
4
Запрограммировать следующую карточную игру: игрок и компьютер берут
карту. Для выбранной карты генерируется масть (в дальнейшем не играет роли)
и достоинство от 1 до 10, а также J,Q,K. Если получены две полностью
одинаковые карты, происходит их перегенерация. На основе сравнения
достоинства двух карт определяется, кто выиграл – компьютер или человек.
Решение задачи:
1)
Создана функция, которая генерирует одну из четырех мастей
(название либо обозначение масти в виде строки), с вероятностью ¼
каждую.
import random
masttt=int(random.random()*4)
print(masttt)
massst=int(random.random()*4)
print(massst)
2)
Создана функция, которая генерирует достоинство карты от 6
до 14 в виде числа. Сделана функция, которая на основе кода достоинства
карты генерирует его название в виде строки (заменяя 11 на J, 12 на Q, 13
на К, 14 на А).
def pobeda(person, mper, pc, mpc):
lmast = {6, 7, 8, 9, 10, 11, 12, 13, 14}
win
if (lmast[person]==lmast[pc])and(mper==mpc):
print("Карты полностью одинаковы!")
win = 9
elif (lmast[person]>lmast[pc]):
win = person
elif (lmast[person] == lmast[pc]):
win = 9
else:
win = pc
5
return win
3)
Создана программа, которая генерирует 2 карты, проверяет их
на совпадение и осуществляет перегенерацию карт, если они полностью
совпадают. Если они не совпадают, то карты выводятся на экран и
определяется, кто выиграл в игре (или произошла ничья). При этом,
выигрывает карта с наибольшим достоинством, но при этом считается, что
6 выигрывает у А (но не у других карт) (см. рисунок 3).
win = pobeda(person, mper, pc, mpc)
if(win == 9):
print("Ничья!!")
elif(win == person):
print("Вы победили!")
else:
print("Победил компьютер")
Вывод: полный листинг программы:
import random
def mastperson(per):
per=int(random.random()*4)
return per
def mastcomp(pc):
pc=int(random.random()*4)
return pc
def pobeda(person, mper, pc, mpc):
lmast = {6, 7, 8, 9, 10, 11, 12, 13, 14}
win
if (lmast[person]==lmast[pc])and(mper==mpc):
6
print("Карты полностью одинаковы!")
win = 9
elif (lmast[person]>lmast[pc]):
win = person
elif (lmast[person] == lmast[pc]):
win = 9
else:
win = pc
return win
nomerkart={'6','7', '8', '9', 'X', 'J', 'Q', 'K', 'A', 'N'}
lmast = {6, 7, 8, 9, 10, 11, 12, 13, 14}
color = {"Крести", "Черви", "Пики", "Буби"}
person=int(input("\nВыберете карту: 0-6\n1-7\n2-8\n3-9\n4-X\n5-J\n6Q\n7-K\n8-A" ))
pc=random.random()*9
mper = mastperson(0) #функция по выбору масти для человека
mpc = mastcomp(0) #функция по выбору масти для пк
print("Вы выбрали: ", nomerkart[person], " - ", color[mper])
print("Компьютер выбрал: ", nomerkart[pc], " - ", color[mpc])
#определение победителя
win = pobeda(person, mper, pc, mpc)
if(win == 9):
print("Ничья!!")
7
elif(win == person):
print("Вы победили!")
else:
print("Победил компьютер")
Рисунок 3 - итог программы 2
Вывод: в данном задании была проведена работа по генерации карт и их
дальнейшего сравнения, с определенным достоинством карт.
Дополнительное задание
Запрограммировать игру «Пьяница» в двух вариациях. В первой вариации
должна генерироваться колода (список), состоящая из всех карт в случайном
порядке. Выбираются 2 карты по очереди, при этом первая карта принадлежит
компьютеру, а вторая игроку. Если выиграл компьютер, то он получает обе
карты, если игрок – то обе карты получает игрок. Если происходит ничья, то 2
следующие карты убираются на «кон», и берутся еще 2, по которым
определяется победитель. Если победитель опять не определен, то действие
повторяется. Когда победитель будет определен, то он получает все карты,
которые были на кону, и которые были открыты игроками во время данного хода.
В первом варианте, игра ведется до исчерпания колоды, после чего
определяется, кто из игроков выиграл больше карт.
8
Во втором, у каждого из игроков ведется список выигранных карт в порядке
очередности. После исчерпания колоды игроки начинают аналогичным образом
сравнивать достоинства карт в своем списке, при этом в каждом ходу карты
кладутся в конец списка победителя. Игра ведется до исчерпания карт у одного
из игроков.
Полный листинг программы:
package com.company;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Random rand = new Random();
Scanner in = new Scanner(System.in);
char koloda[][] = {{'6','6','6','6','7','7','7','7', '8','8','8','8', '9','9','9','9',
'X','X','X','X', 'J','J','J','J', 'Q','Q','Q','Q', 'K','K','K','K',
'A','A','A','A'},{'ч','к','б','п','ч','к','б','п', 'ч','к','б','п', 'ч','к','б','п', 'ч','к','б','п',
'ч','к','б','п', 'ч','к','б','п', 'ч','к','б','п', 'ч','к','б','п'},{'1','1','1','1','2','2','2','2',
'3','3','3','3', '4','4','4','4', '5','5','5','5', '6','6','6','6', '7','7','7','7', '8','8','8','8',
'9','9','9','9'}};
for (int i = 0; i<3; i++) { //вывод первоначального массива
for (int j = 0; j<36; j++) {
System.out.print(" " + koloda[i][j]);
}
System.out.println();
}
for (int j = 0; j < 36; j++) { // перемешивание столбцов массива
int q = rand.nextInt(j+1);
char temp1 = koloda[0][j];
char temp2 = koloda[1][j];
char temp3 = koloda[2][j];
koloda[0][j] = koloda[0][q];
koloda[1][j] = koloda[1][q];
9
koloda[2][j] = koloda[2][q];
koloda[0][q] = temp1;
koloda[1][q] = temp2;
koloda[2][q] = temp3;
}
System.out.println("Преобразованный массив"); //вывод преобразованного
массива
for (int i = 0; i<3; i++) {
for (int j = 0; j<36; j++) {
System.out.print(" " + koloda[i][j]);
}
System.out.println();
}
int pc = 0;
int pe = 0;
for (int j = 0; j < 36; j=j+2) { //сравнение приоритета карт
if (koloda[2][j] > koloda[2][j+1]) {
System.out.println("Карта игрока: " + koloda[0][j] + " - " +
koloda[1][j]);
System.out.println("Карта Пк: " + koloda[0][j + 1] + " - " + koloda[1][j
+ 1]);
System.out.println("Человек выиграл\n");
pe++;
} else if (koloda[2][j] == koloda[2][j+1]) {
System.out.println("Карта игрока: " + koloda[0][j] + " - " +
koloda[1][j]);
System.out.println("Карта Пк: " + koloda[0][j + 1] + " - " + koloda[1][j
+ 1]);
System.out.println("Ничья\n");
pe++;
pc++;
} else {
System.out.println("Карта игрока: " + koloda[0][j] + " - " +
koloda[1][j]);
System.out.println("Карта Пк: " + koloda[0][j+1] + " - " +
koloda[1][j+1]);
System.out.println("Пк победил\n");
pc++;
}
}
10
if (pe > pc) { // определение победителя
System.out.println("Победил игрок");
} else if (pe == pc){
System.out.println("Ничья");
}else {
System.out.println("Победил пк");
}
}
}
Рисунок 4 - дополнительное задание
11
Download