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

Poistettu sisältö Lisätty sisältö
Raimondo (keskustelu | muokkaukset)
Raimondo (keskustelu | muokkaukset)
Rivi 109:
 
==== Ensimmäisen vaiheen ratkaisu ====
Seuraava ohjelma lukee kommentteja sisältävän shakkilautamallineen parametrinä annetusta syötetiedostosta 'asema0.txt', siistii sen "standardimuotoiseksi" ja tallettaa sen parametrinä annettuun tulostiedostoon 'asema1.txt' Parametrinä annetulla siirtotekstillä ei tehdä muuta kuin tulostetaan se sellaisenaan näkyviin. ToteutusAllaesitetty poikkeaakoodi hiukanon nyt tehty funktioksi ja edelläse kuvatustaon sanallisestatalletettu ideointivaiheenmoduuliin kuvauksestashakkibotti.py
 
Toteutus poikkeaa hiukan edellä kuvatusta sanallisesta ideointivaiheen kuvauksesta.
 
;Koodi:
Rivi 115 ⟶ 117:
<source lang="Python">
# -*- coding: cp1252 -*-
def shakkisiirto (asema0, asema1, siirto='ei siirtoa'):
#-----------------------------------------------------------
 
# Testilohko, joka tulostaa alkuperäisen tiedoston sisällön
# -*- coding: cp1252 -*-
#-----------------------------------------------------------
 
# Avataan tiedosto asema0.txt lukemista varten
f_syote = open(asema0, 'r')
# Luetaan koko tiedosto merkkijonoksi s_peliasema
syote = f_syote.read()
# Suljetaan tiedosto f_peliaema - tiedosto voidaan sulkea heti kun se on luettu
f_syote.close()
# Tulostetaan merkkijono s_peliasema
print " \n ==== Syotetiedosto ==== \n"
print(syote)
 
#--------------------------------------------------------
print(' ==== Siirto ==== \n')
print(siirto)
 
#--------------------------------------------------------
# Avataan tiedosto asema0.txt lukemista varten
f_syote = open('asema0.txt', 'r')
# Luetaan koko tiedosto merkkijonoksi s_peliasema
syote = f_syote.read()
# Suljetaan tiedosto f_peliaema - tiedosto voidaan sulkea heti kun se on luettu
f_syote.close()
# Tulostetaan merkkijono s_peliasema
print " \n ==== asema0.txt ==== \n"
print(syote)
 
f_tulos = open(asema1, 'w') # Tyhjennetaan
#--------------------------------------------------------
f_tulos.close() # tulostiedosto.
# Ohjelmalohko, joka lukee syötetiedoston, siistii
f_tulos = open(asema1, 'a') # Avataan kirjoitusta varten.
# sen vakiomuotoiseksi ja tallettaa tulostiedostoon
f_rivi = open(asema0, 'r') # Avataan lukemista varten.
#--------------------------------------------------------
f_tulos = open('asema1.txt', 'w') # Tyhjennetään
f_tulos.close() # tulostiedosto.
f_tulos = open('asema1.txt', 'a') # Avataan kirjoitusta varten.
f_rivi = open('asema0.txt', 'r') # Avataan lukemista varten.
 
rivi = f_rivi.readline() # Luetaan ja tulostetaan
f_tulos.write(rivi) # ensimmäinenensimmainen otsikkorivi.
 
for j in range(0,3): # SiistitäänSiistitaan muut otsikkorivit.
rivi = f_rivi.readline()
for i in range(len(rivi)):
if rivi[i]=='|':
rivi=rivi[i:]
break
f_tulos.write(rivi)
lauta = '87654321' # Siistitaan laudan rivit.
for j in range(len(lauta)):
rivi = f_rivi.readline()
for i in range(len(rivi)):
if rivi[i]=='|':
rivi=rivi[i:]
break
f_tulos.write(rivi)
rivi = f_rivi.readline() # poistetaan sarakekommentit
rivi = f_rivi.readline() # siistitaan alaotsikkorivi
for i in range(len(rivi)):
if rivi[i]=='|':
Rivi 148 ⟶ 170:
break
f_tulos.write(rivi)
rivi = f_rivi.readline() # siistitaan loppurivi
lauta = '87654321' # Siistitään laudan rivit.
for j in range(len(lauta)):
rivi = f_rivi.readline()
for i in range(len(rivi)):
if rivi[i]=='|}':
rivi=rivi[i:]
break
f_tulos.write(rivi)
rivi = f_rivi.readline() # poistetaan sarakekommentit
rivi = f_rivi.readline() # siistitään alaotsikkorivi
for i in range(len(rivi)):
if rivi[i]=='|':
rivi=rivi[i:]
break
f_tulos.write(rivi)
rivi = f_rivi.readline() # siistitään loppurivi
for i in range(len(rivi)):
if rivi[i]=='}':
rivi=rivi[i:]
break
f_tulos.write(rivi)
 
f_rivi.close() # suljetaan tiedosto
f_tulos.close() # suljetaan tiedosto
 
#-----------------------------------------------------------
# Testilohko, joka lukee ja tulostaa tulostiedoston sisällön
#-----------------------------------------------------------
 
# Avataan tiedosto asema1.txt lukemista varten
f_tulos = open('asema1.txt', '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"
# Tulostetaan merkkijono s_peliasema
print(tulos)
print " \n ==== asema1.txt ==== \n"
print(tulos)
</source>
 
;Testikutsu:
Esimerkiksi seuraavalla testikutsulla
 
<source lang="Python">
# -*- coding: cp1252 -*-
from shakkibotti import shakkisiirto
shakkisiirto('asema0.txt', 'asema1.txt', '1.e2-e4')
</source>
 
saadaan seuraava testituloste
 
;Testitulosteet:
 
<source lang="Python">
>>>
==== asema0.txtSyotetiedosto ====
 
{{Šakkilauta|=
Rivi 212 ⟶ 226:
}}
 
==== Siirto ====
 
1.e2-e4
==== asema1.txtTulostiedosto ====
 
{{Šakkilauta|=
Rivi 231 ⟶ 248:
 
>>>
</source>
 
==== Toisen vaiheen ratkaisu ====