Ero sivun ”Python 2/Wikishakkisivu” versioiden välillä

Poistettu sisältö Lisätty sisältö
Raimondo (keskustelu | muokkaukset)
Ei muokkausyhteenvetoa
Raimondo (keskustelu | muokkaukset)
Rivi 120:
 
==== Ensimmäisen vaiheen ratkaisu ====
{{hidden begin|title=Toinen karvalakkiversio|toggle=right}}
 
Seuraava ohjelma lukee kommentteja sisältävän shakkilautamallineen parametrinä annetusta syötetiedostosta asema0, siistii sen "standardimuotoiseksi" ja tallettaa sen parametrinä annettuun tulostiedostoon asema1. Parametrinä annetulla siirtotekstillä ei tehdä muuta kuin tulostetaan se sellaisenaan näkyviin. Allaesitetty koodi on nyt tehty funktioksi ja se on talletettu moduuliin shakkibotti.py
 
Rivi 260 ⟶ 262:
>>>
</source>
{{hidden end|toggle=right}}
 
 
{{hidden begin|title=Kolmas karvalakkiversio|toggle=right}}
 
Seuraava ohjelma lukee kommentteja sisältävän shakkilautamallineen parametrinä annetusta syötetiedostosta asema0, tallettaa yläotsikkorivit sellaisenaan tulostiedosyoon, talletaa sisältörivit matriisiin, suorittaa siirron matriisissa (vasta testioperaation), tallettaa muokatun matriisin tulostiedostoon (tämä osa ei toimi vielä oikein) ja tallettaa alaotsikkorivit sellaisenaan tulostiedostoon.
 
;Koodi:
<source lang="Python">
# -*- coding: cp1252 -*-
import numpy as N
def shakkisiirto (asema0, asema1, siirto='ei siirtoa'):
#------------------------------------------------------------------
# Syotetiedoston testiluku ja tulostus
#------------------------------------------------------------------
f_syote = open(asema0, 'r') # Avataan lukemista varten
syote = f_syote.read() # Luetaan tiedosto merkkijonoksi
f_syote.close() # Suljetaan tiedosto
print " \n ==== Syotetiedosto ==== \n"
print(syote) # Tulostetaan merkkijono
 
#---------------------------------------------------------------------------------------
# Matriisin sl eli shakkilauta alustus ruutujen posititiotunuksilla, seka sisaltorivien
# alku- ja loppuosen tilavarauksilla. Matriisin sisalto ylikirjoitetaan myohemmin alkuaseman
# mukaisella sisaltodatalla.
#------------------------------------------------------------------------------------------
 
sl = N.array(([' ', 'a8', 'b8', 'c8', 'd8', 'e8', 'f8', 'g8', 'h8', ' '],
[' ', 'a7', 'b7', 'c7', 'd7', 'e7', 'f7', 'g7', 'h7', ' '],
[' ', 'a6', 'b6', 'c6', 'd6', 'e6', 'f6', 'g6', 'h6', ' '],
[' ', 'a5', 'b5', 'c5', 'd5', 'e5', 'f5', 'g5', 'h5', ' '],
[' ', 'a4', 'b4', 'c4', 'd4', 'e4', 'f4', 'g4', 'h4', ' '],
[' ', 'a3', 'b3', 'c3', 'd3', 'e3', 'f3', 'g3', 'h3', ' '],
[' ', 'a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2', 'h2', ' '],
[' ', 'a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1', ' ']))
 
#-------------------------------------------------------------------------------------------
# Matriisin solujen indeksit
#--------------------------------------------------------------------------------------------
 
# alkuosa a b c d e f g h loppuosa
# 8 sl[0][0] sl[0][1] sl[0][2] sl[0][3] sl[0][4] sl[0][5] sl[0][6] sl[0][7] sl[0][8] sl[0][9]
# 7 sl[1][0] sl[1][1] sl[1][2] sl[1][3] sl[1][4] sl[1][5] sl[1][6] sl[1][7] sl[1][8] sl[1][9]
# 6 sl[2][0] sl[2][1] sl[2][2] sl[2][3] sl[2][4] sl[2][5] sl[2][6] sl[2][7] sl[2][8] sl[2][9]
# 5 sl[3][0] sl[3][1] sl[3][2] sl[3][3] sl[3][4] sl[3][5] sl[3][6] sl[3][7] sl[3][8] sl[3][9]
# 4 sl[4][0] sl[4][1] sl[4][2] sl[4][3] sl[4][4] sl[4][5] sl[4][6] sl[4][7] sl[4][8] sl[4][9]
# 3 sl[5][0] sl[5][1] sl[5][2] sl[5][3] sl[5][4] sl[5][5] sl[5][6] sl[5][7] sl[5][8] sl[5][9]
# 2 sl[6][0] sl[6][1] sl[6][2] sl[6][3] sl[6][4] sl[6][5] sl[6][6] sl[6][7] sl[6][8] sl[6][9]
# 1 sl[7][0] sl[7][1] sl[7][2] sl[7][3] sl[7][4] sl[7][5] sl[7][6] sl[7][7] sl[7][8] sl[7][9]
 
#-------------------------------------------------------------------------------------------
# Matriisin testitulostus
#--------------------------------------------------------------------------------------------
 
print " \n ==== Alustetun matriisin testitulostus ==== \n"
print sl[0][0], sl[0][1], sl[0][2], sl[0][3], sl[0][4], sl[0][5], sl[0][6], sl[0][7], sl[0][8], sl[0][9]
print sl[0][0], sl[1][1], sl[1][2], sl[1][3], sl[1][4], sl[1][5], sl[1][6], sl[1][7], sl[1][8], sl[1][9]
print sl[0][0], sl[2][1], sl[2][2], sl[2][3], sl[2][4], sl[2][5], sl[2][6], sl[2][7], sl[2][8], sl[2][9]
print sl[0][0], sl[3][1], sl[3][2], sl[3][3], sl[3][4], sl[3][5], sl[3][6], sl[3][7], sl[3][8], sl[3][9]
print sl[0][0], sl[4][1], sl[4][2], sl[4][3], sl[4][4], sl[4][5], sl[4][6], sl[4][7], sl[4][8], sl[4][9]
print sl[0][0], sl[5][1], sl[5][2], sl[5][3], sl[5][4], sl[5][5], sl[5][6], sl[5][7], sl[5][8], sl[5][9]
print sl[0][0], sl[6][1], sl[6][2], sl[6][3], sl[6][4], sl[6][5], sl[6][6], sl[6][7], sl[6][8], sl[6][9]
print sl[0][0], sl[7][1], sl[7][2], sl[7][3], sl[7][4], sl[7][5], sl[7][6], sl[7][7], sl[7][8], sl[7][9]
 
#----------------------------------------------------------
# Talletetaan syötetiedoston sisaltorivit matriisiin
#----------------------------------------------------------
f_tulos = open(asema1, 'w') # Tyhjennetaan tulostiedosto.
f_tulos.close()
f_tulos = open(asema1, 'a') # Avataan lisayskirjoitusta varten.
f_rivi = open(asema0, 'r') # Avataan lukemista varten.
 
for j in range(0,4): # Luetaan ja talletaan otsikkorivit tulostiedostoon.
rivi = f_rivi.readline()
f_tulos.write(rivi)
for j in range(0,8): # Luetaan ja talletaan sisaltorivit matriisiin
rivi = f_rivi.readline()
r = rivi.split('|')
sl[j] = r
 
#----------------------------------------------------------
# Mariisin sisalto ennen siirtoa
#----------------------------------------------------------
print ' \n ====sisaltomatriisi ennen sirtoa==== \n'
print sl
 
#--------------------------------------------------------
# Suoritetaan siirto
#--------------------------------------------------------
# Parametrina annetun siirtomerkinnan tulostus
print(' \n ==== Siirto ==== \n')
print(siirto)
# ==== Tama on vasta testisiirto!!!!!!!=====
# Seuraavat rivit pitaa korvata yleisella logiikalla.
sl[4][5] = sl[6][5] # e4 <- e2
sl[6][5] = ' ' # tyhjataan e2
 
#----------------------------------------------------------
# Mariisin sisallon testitulostus siirron jalkeen
#----------------------------------------------------------
print ' \n ====sisaltomatriisi siirron jalkeen==== \n'
print sl
 
#----------------------------------------------------------
# Talletaan muokattu matriisi tulostiedostoon
#----------------------------------------------------------
 
# === Tama ei viela toimi?????????? ===
# Matriisista saadaan tiedostoon vain
# ensimmaisen rivin ensimmainen ja viimeinen solu seka
# viimeisen rivin ensimmainen ja viimeinen solu.
for j in (0,7):
jono = str(sl[j])
for i in (0,9):
jono = jono[1:6] + '|' + str(sl[j][i])
f_tulos.write(jono)
 
#------------------------------------------------------------------
# Talletaan alaotsikkorivit (3 kpl) tulostiedostoon
#------------------------------------------------------------------
rivi = f_rivi.readline()
f_tulos.write(rivi)
rivi = f_rivi.readline()
f_tulos.write(rivi)
rivi = f_rivi.readline()
f_tulos.write(rivi)
f_rivi.close() # suljetaan tiedosto
f_tulos.close() # suljetaan tiedosto
 
#------------------------------------------------------------------
# Tulostiedoston testiluku ja tulostus
#------------------------------------------------------------------
# Avataan tiedosto asema1.txt lukemista varten
f_tulos = open(asema1, 'r')
# Luetaan koko tiedosto merkkijonoksi s_peliasema
tulos = f_tulos.read()
# Suljetaan tiedosto f_peliaema - tiedosto voidaan sulkea heti kun se on luettu
f_tulos.close()
print " \n ==== Tulostiedosto ==== \n"
print(tulos)
</source>
 
;Testitulostus:
 
<source lang="Python">
>>>
==== Syotetiedosto ====
 
{{Šakkilauta|=
|
|
|=
8 |rd|nd|bd|qd|kd|bd|nd|rd|=
7 |pd|pd|pd|pd|pd|pd|pd|pd|=
6 | | | | | | | | |=
5 | | | | | | | | |=
4 | | | | | | | | |=
3 | | | | | | | | |=
2 |pl|pl|pl|pl|pl|pl|pl|pl|=
1 |rl|nl|bl|ql|kl|bl|nl|rl|=
a b c d e f g h
|
}}
 
==== Alustetun matriisin testitulostus ====
 
a8 b8 c8 d8 e8 f8 g8 h8
a7 b7 c7 d7 e7 f7 g7 h7
a6 b6 c6 d6 e6 f6 g6 h6
a5 b5 c5 d5 e5 f5 g5 h5
a4 b4 c4 d4 e4 f4 g4 h4
a3 b3 c3 d3 e3 f3 g3 h3
a2 b2 c2 d2 e2 f2 g2 h2
a1 b1 c1 d1 e1 f1 g1 h1
====sisaltomatriisi ennen sirtoa====
 
[[' 8 ' 'rd' 'nd' 'bd' 'qd' 'kd' 'bd' 'nd' 'rd' '=\n']
[' 7 ' 'pd' 'pd' 'pd' 'pd' 'pd' 'pd' 'pd' 'pd' '=\n']
[' 6 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '=\n']
[' 5 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '=\n']
[' 4 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '=\n']
[' 3 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '=\n']
[' 2 ' 'pl' 'pl' 'pl' 'pl' 'pl' 'pl' 'pl' 'pl' '=\n']
[' 1 ' 'rl' 'nl' 'bl' 'ql' 'kl' 'bl' 'nl' 'rl' '=\n']]
==== Siirto ====
 
1.e2-e4
====sisaltomatriisi siirron jalkeen====
 
[[' 8 ' 'rd' 'nd' 'bd' 'qd' 'kd' 'bd' 'nd' 'rd' '=\n']
[' 7 ' 'pd' 'pd' 'pd' 'pd' 'pd' 'pd' 'pd' 'pd' '=\n']
[' 6 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '=\n']
[' 5 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '=\n']
[' 4 ' ' ' ' ' ' ' ' ' 'pl' ' ' ' ' ' ' '=\n']
[' 3 ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '=\n']
[' 2 ' 'pl' 'pl' 'pl' 'pl' ' ' 'pl' 'pl' 'pl' '=\n']
[' 1 ' 'rl' 'nl' 'bl' 'ql' 'kl' 'bl' 'nl' 'rl' '=\n']]
==== Tulostiedosto ====
 
{{Šakkilauta|=
|
|
|=
8 ||=
1 ||=
a b c d e f g h
|
}}
 
>>>
</source>
 
{{hidden end|toggle=right}}
 
==== Toisen vaiheen ratkaisu ====