Найти - Пользователи
Полная версия: Жуть как нужна помощь!!!!!Завтра оччет сдавать!!!
Начало » Центр помощи » Жуть как нужна помощь!!!!!Завтра оччет сдавать!!!
1
Глупышка
Мне нужно написать программу на Python. Но я не могу…на Паскале написала…а на Питоне не получается…ПОМОГИТЕ!!!!!!
В шашечном эндшпиле остались белая дамка и две черные пешки,позиции которых известны. Ход белых. Сможет ли дамка срубить одну или сразу обе пешки?
Программа на Паскале есть,если нужно,то скину.
Заранее спасибо)))
Глупышка
Программа на паскале))))
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
Одиночные числа это наименования столбцов и строк
Глупышка
Создание доски….а как дальше
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)
Глупышка
Прошу помогите….а то из-за этой глупости не хочу вылетать из инста…нам дали на изучение питона 10 дней так что поймите правильноо
Actor
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....'
вроде работает. за мелкие ошибки и быдлокод не пинать
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB