Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2011 13:28:21

Глупышка
От:
Зарегистрирован: 2011-07-07
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Жуть как нужна помощь!!!!!Завтра оччет сдавать!!!

Мне нужно написать программу на Python. Но я не могу…на Паскале написала…а на Питоне не получается…ПОМОГИТЕ!!!!!!
В шашечном эндшпиле остались белая дамка и две черные пешки,позиции которых известны. Ход белых. Сможет ли дамка срубить одну или сразу обе пешки?
Программа на Паскале есть,если нужно,то скину.
Заранее спасибо)))



Офлайн

#2 Июль 7, 2011 19:22:23

Глупышка
От:
Зарегистрирован: 2011-07-07
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Жуть как нужна помощь!!!!!Завтра оччет сдавать!!!

Программа на паскале))))
procedure Error (msg:string);
begin
writeln;
writeln (msg);
write ('Нажмите ENTER для выхода из программы');
reset (input); readln; halt;
end;

procedure ReadXY (msg:string; var x,y:integer);
var n:integer;
begin
repeat
writeln;
write (msg);
{$I-}read(n);{$I+}
if (IoResult<>0) or (n<11) or (n>88) then begin
writeln ('Недопустимый ввод! Введите координату клетки от 11 до 88');
continue;
end;
x := n div 10;
y := n mod 10;
if (x>8) or (y>8) then begin
writeln ('Ни одна из координат не может быть больше 8');
continue;
end;
if (x+y) mod 2 = 1 then begin
writeln ('Вы ввели координаты белой клетки, допустимы только черные');
continue;
end;
break;
until false;
end;

function OnEdge (x,y:integer):boolean;
begin
if (x=1) or (x=8) or (y=1) or (y=8) then OnEdge:=true
else OnEdge:=false;
end;

function Coord (x,y:integer):integer;
begin
Coord:=x*10+y;
end;

function OnDiag (x1,y1,x2,y2:integer):integer;
{Если шашки на одной диагонали, вернет расстояние в клетках
между ними, иначе 0}
var n:integer;
begin
n:=abs(Coord(x1,y1)-Coord(x2,y2));
if n mod 11=0 then OnDiag:=n div 11
else if n mod 9=0 then OnDiag:=n div 9
else OnDiag:=0;
end;

function DifferentSides(x1,y1,x0,y0,x2,y2:integer):boolean;
{истина, если (x0,y0) лежит между остальными 2 точками}
var n1,n0,n2:integer;
begin
n1:=Coord (x1,y1); n2:=Coord (x2,y2); n0:=Coord (x0,y0);
if (n1<n0) and (n0<n2) or (n2<n0) and (n0<n1) then DifferentSides:=true
else DifferentSides:=false;
end;

function CrossDiag(x1,y1,x2,y2,x0,y0:integer):boolean;
{Ищем точки пересечения (x,y) диагоналей шашек перебором -
для точки пересечения характерно то, что она принадлежит
диагоналям обеих шашек}
var x,y,k:integer;
begin
if (OnDiag(x1,y1,x2,y2)>0) then begin
{На одной диагноали не надо искать}
CrossDiag:=false;
Exit;
end;
x:=1; k:=0;
while x<9 do begin
if x mod 2=1 then y:=1 else y:=2;
while y<9 do begin {Перебор всех черных клеток доски}
if (OnDiag (x,y,x1,y1)>0) and (OnDiag (x,y,x2,y2)>0) then begin
if DifferentSides(x,y,x1,y1,x0,y0)=true then begin
CrossDiag:=true;
Exit;
end;
inc(k);
if k=2 then break; {Всего не более 2 точек пересечения}
end;
inc (y,2);
end;
inc(x);
end;
CrossDiag:=false;
end;

var x0,y0,x1,y1,x2,y2:integer;
is1,is2:boolean;

begin
{Вводим и проверяем координаты}
ReadXY ('Координаты дамки: ‘,x0,y0);
ReadXY (’Координаты 1-й шашки: ‘,x1,y1);
ReadXY (’Координаты 2-й шашки: ‘,x2,y2);
if (Coord(x0,y0)=Coord(x1,y1)) or (Coord(x0,y0)=Coord(x2,y2)) or
(Coord(x1,y1)=Coord(x2,y2)) then
Error (’Все 3 клетки должны быть разными!');
is1:=(OnEdge(x1,y1)=false) and (OnDiag (x1,y1,x2,y2)<>1) and
(OnDiag(x1,y1,x0,y0)>0);
is2:=(OnEdge(x2,y2)=false) and (OnDiag (x1,y1,x2,y2)<>1) and
(OnDiag(x2,y2,x0,y0)>0);
write ('Шашка 1 ‘);
if is1=true then writeln (’ рубится напрямую')
else if (is2=true) and (CrossDiag(x2,y2,x1,y1,x0,y0)=true)
and (OnEdge(x1,y1)=false) then writeln (' рубится после второй')
else writeln (' НЕ рубится');
write ('Шашка 2 ‘);
if is2=true then writeln (’ рубится напрямую')
else if (is1=true) and (CrossDiag(x1,y1,x2,y2,x0,y0)=true)
and (OnEdge(x2,y2)=false) then writeln (' рубится после первой')
else writeln (' НЕ рубится');
writeln;
write ('ENTER для выхода');
reset (input); readln;
end.


Вид шахматной доски
8 28 48 68 88
7 17 37 57 77
6 26 46 66 86
5 15 35 55 75
4 24 44 64 84
3 13 33 53 73
2 22 42 62 82
1 11 31 51 71
1 2 3 4 5 6 7 8
Одиночные числа это наименования столбцов и строк



Офлайн

#3 Июль 7, 2011 23:24:55

Глупышка
От:
Зарегистрирован: 2011-07-07
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Жуть как нужна помощь!!!!!Завтра оччет сдавать!!!

Создание доски….а как дальше
import sys
from copy import deepcopy
sys.setrecursionlimit = 1000000
doska = [ for i in xrange(8)]
def print_doska(doska):
for i in doska:
print i
print ‘————————’
print_doska(doska)
horse =
n = input()
doska[horse][horse] = -1
print_doska(doska)
def step(N,n,x,y,doska):
if n == 0:
print_doska(doska)
else:
if x>=2 and y>=1:
step1 = deepcopy(doska)
step1 = N-n
step(N,n-1,x-2,y-1,step1)
if x>=2 and y<=6:
step2=deepcopy(doska)
step2 = N-n
step(N,n-1,x-2,y+1,step2)
if x>=1 and y<=5:
step3=deepcopy(doska)
step3=N-n
step(N,n-1,x-1,y+2,step3)
if x<=6 and y<=5:
step4=deepcopy(doska)
step4 = N-n
step(N,n-1,x+1,y+2,step4)
if x<=5 and y<=6:
step5=deepcopy(doska)
step5=N-n
step(N,n-1,x+2,y+1,step5)
if x<=5 and y>=1:
step6=deepcopy(doska)
step6=N-n
step(N,n-1,x+2,y-1,step6)
if x<=6 and y>=2:
step7=deepcopy(doska)
step7=N-n
step(N,n-1,x+1,y-2,step7)
if x>=1 and y>=2:
step8=deepcopy(doska)
step8=N-n
step(N,n-1,x-1,y-2,step8)
step(n,n,horse,horse,doska)



Офлайн

#4 Июль 7, 2011 23:49:56

Глупышка
От:
Зарегистрирован: 2011-07-07
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Жуть как нужна помощь!!!!!Завтра оччет сдавать!!!

Прошу помогите….а то из-за этой глупости не хочу вылетать из инста…нам дали на изучение питона 10 дней так что поймите правильноо



Офлайн

#5 Июль 8, 2011 15:57:12

Actor
От:
Зарегистрирован: 2010-10-10
Сообщения: 39
Репутация: +  0  -
Профиль  

Жуть как нужна помощь!!!!!Завтра оччет сдавать!!!

import sys
from math import fabs

def error(msg):
print msg
print 'Fatal erroe'
sys.exit()

def readxy(msg):
while True:
print msg
n = input()

if not ((type(n) == int) and (11 <= n) and (n <= 88)):
print 'IO error. Enter a number from 11 to 88'
continue
x = int(str(n)[0])
y = int(str(n)[1])
if divmod(x+y,2)[1] == 1:
print "You've entered the coordinates of white fields, but only black fields are avaliable"
continue
print x, y
return x, y

break


def onedge(x, y):
if x == 1 or x == 8 or y == 1 or y == 8: return True
else: return False

def coord(x, y):
return x*10 + y

def ondiag(x1, y1, x2, y2):
n = fabs(coord(x1,y1)-coord(x2,y2))
if divmod(n, 11)[1] == 0: return divmod(n, 11)[0]
elif divmod(n, 9)[1] == 0: return divmod(n, 9)[0]
else: return 0

def differentsides(x1, y1, x0, y0, x2, y2):
n1 = coord(x1, y1)
n2 = coord(x2, y2)
n0 = coord(x0, y0)
if (n1 < n0 and n0 < n2) or (n2 < n0 and n0 < n1): return True
else: return False

def crossdiag(x1, y1, x2, y2, x0, y0):
if ondiag(x1, y1, x2, y2) > 0: return False
x, k = 1, 0
while x < 9:
if divmod(x, 2)[1] == 1: y = 1
else: y = 2
while y < 9:
if ondiag(x, y, x1, y1) > 0 and ondiag(x, y, x2, y2) > 0:
if differentsides(x, y, x1, y1, x0, y0) == True:
return True
sys.exit()
k = k + 1
if k == 2: break
y = y + 2
x = x + 1

x0,y0,x1,y1,x2,y2,is1,is2 = 0,0,0,0,0,0,True,True
x0, y0 = readxy('King coord: ')
x1, y1 = readxy('Draught #1: ')
x2, y2 = readxy('Draught #2: ')
if coord(x0, y0) == coord(x1, y1) or coord(x0, y0) == coord(x2, y2) or \
coord(x1, y1) == coord(x2, y2):
error('All 3 fields must be different!')
is1 = (onedge(x1, y1) == False) and (ondiag(x1, y1, x2, y2) <> 1) and \
(ondiag(x1, y1, x0, y0) > 0)
is2 = (onedge(x2, y2) == False) and (ondiag(x1, y1, x2, y2) <> 1) and \
(ondiag(x2, y2, x0, y0) > 0)
print 'Draught #1'
if is1 == True: print 'rubitsya na pryamuyu O_o //hard to translate...'
elif is2 == True and crossdiag(x2, y2, x1, y1, x0, y0) == True and \
onedge(x1, y1) == False: print 'rubitsya posle vtoroy O_o //hard to translate....'
else: print 'ne rubitsya O_o //hard to translate....'
print 'Draught #2'
if is2 == True: print 'rubitsya na pryamuyu O_o //hard to translate....'
elif is1 == True and crossdiag(x1, y1, x2, y2, x0, y0) == True and \
onedge(x2, y2) == False: print 'rubitsya posle pervoy O_o //hard to translate....'
else: print 'ne rubyatsa O_o //hard to translate....'
вроде работает. за мелкие ошибки и быдлокод не пинать



Отредактировано (Июль 8, 2011 15:57:46)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version