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

Poistettu sisältö Lisätty sisältö
Raimondo (keskustelu | muokkaukset)
Raimondo (keskustelu | muokkaukset)
Rivi 672:
# Toteutetaan tiedoston hajottaminen välitallennuspaikkoihin ja kokoaminen takaisin lähtötiedostoon ilman sisällön modifiointia.
# Lisätäät toimintaan sisältörivien modifiointi.
 
==== Ensimmäisen vaiheen ratkaisu ====
Seuraava ohjelma lukee kommentteja sisältävän shakkilautamallineen syötetiedostosta 'asema0.txt', siistii sen "standardimuotoiseksi" ja tallettaa sen tulostiedostoon 'asema1.txt'. Toteutus poikkeaa hiukan edellä kuvatusta sanallisesta ideointivaiheen kuvauksesta.
 
;Koodi:
 
# -*- coding: cp1252 -*-
 
#-----------------------------------------------------------
# Testilohko, joka tulostaa alkuperäisen tiedoston sisällön
#-----------------------------------------------------------
 
# 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)
 
#--------------------------------------------------------
# Ohjelmalohko, joka lukee syötetiedoston, siistii
# sen vakiomuotoiseksi ja tallettaa tulostiedostoon
#--------------------------------------------------------
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äinen otsikkorivi.
 
for j in range(0,3): # Siistitään 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' # 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()
# Tulostetaan merkkijono s_peliasema
print " \n ==== asema1.txt ==== \n"
print(tulos)
 
;Testitulosteet:
 
>>>
==== asema0.txt ====
 
{{Š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
|
}}
 
==== asema1.txt ====
 
{{Šakkilauta|=
|
|
|=
|rd|nd|bd|qd|kd|bd|nd|rd|=
|pd|pd|pd|pd|pd|pd|pd|pd|=
| | | | | | | | |=
| | | | | | | | |=
| | | | | | | | |=
| | | | | | | | |=
|pl|pl|pl|pl|pl|pl|pl|pl|=
|rl|nl|bl|ql|kl|bl|nl|rl|=
|
}}
 
>>>
 
 
==== Toisen vaiheen ratkaisu ====
Ratkaisu on työnalla. Nyt ohjelmaan lisätään parametrointi ja parametrinä annetun siirron toteutus. Siirron toteutus voidaan ohjelmoida kahdessa vaiheessa
# Parametri annetaan pitkällä algebrallisella notaatiolla, jolloin siitä saadaan sekä lähtö että kohderuutu.
# Parametri annetaan lyhyellä algebrallisella notaatiolla, jolloin lähtöruutu pitää päätellä nappulakirjaimen ja kohderuudun sekä mahdollisen lisävihjeen perusteella.
# Lopuksi ohjelmaan voidaan lisätä vielä annetun siirron oikeellisuuden tarkistus.
 
 
===Aiheesta muualla===