Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: isalnum()

rosie [08.08.2013 22:55:39]

#

Hei mulla olisi ongelma tuon isalnum():n kanssa! Oon koittanu montaa erilaista silmukkaa ja eri tavoin tuota isalnum() kohtaa soveltaa, mutten saa mitään toimimaan. Tehtävänä on siis tarkistaa valmiissa tiedostossa olleita merkkijonoja rivi kerrallaan, sisältävätkö ne ei-alfanumeerista tietoa ja tulostaa vastaukset tämän tyylisesti:
"no2no123non4 kelpaa salasanaksi.
noq234n5ioqw#% sisältää virheellisiä merkkejä."

Tähän mennessä nämä osiot toimii jotenkuten, mutta poistin loput tuolta välistä, kun eivät tulostaneet mitään:

# -*- coding: utf-8 -*-

tiedosto = open("merkkijonoja.txt","r")
sisalto = tiedosto.readline()
ehto = sisalto.isalnum()


if ehto == False:
	print(sisalto," sisältää virheellisiä merkkejä.", end = '')

else:
	print(sisalto," kelpaa salasanaksi.", end = '')

tiedosto.close()

Vinkkejä? Kiitos!

vesikuusi [08.08.2013 23:05:20]

#

Voisitko kertoa tarkemmin, mitä ohjelma nyt tekee, ja mitä sen pitäisi tehdä? Tuossahan luet tiedostosta vain yhden rivin.

rosie kirjoitti:

Tähän mennessä nämä osiot toimii jotenkuten, mutta poistin loput tuolta välistä, kun eivät tulostaneet mitään:

Mitä tarkoitat? Mitkä loput?

samip [09.08.2013 01:49:27]

#

Vähän offtopic mutta miksi noq234n5ioqw#% ei kelpaisi salasanaksi?

Pekka Karjalainen [09.08.2013 11:17:07]

#

rosie kirjoitti:

Vinkkejä? Kiitos!

Vinkki ykkönen on, että voit testata ohjelman pienien osien toimintaa erikseen ja katsoa, että saatko niistä odotettuja tuloksia. Jos ohjelmasi rakennusosat ovat jo viallisia, ei niiden kokonaisuuskaan voi toimia oikein. Tätä taitoa tarvit myöhemmin.

Vinkki kakkonen tuli Vesikuuselta jo. Tarvitset silmukan käydäksesi jokaisen salasanan lävitse.

Vinkki kolmonen. Tiedoston readline-metodi voi jättää rivin loppuun rivinvaihdon, jolloin testi isalnum() on aina epätosi. Rivinvaihtomerkki kun ei ole kirjain tai numero. Vilkaisin jopa Pythonin dokumentaatiota, ja näyttäisi olevan, että tämän se readline() tekee.

Ratkaisu tähän on käyttää merkkijonon strip()-metodia, joka poistaa tämän rivinvaihdon ja muut tyhjät merkit (kuten välilyönnit) tekstin alusta ja lopusta.

# sisalto on muuttuja, mihin luet yhden rivin kerrallaan
salasana = sisalto.strip()

Samip: Kyseessä on ohjelmointiharjoitus. Näin samankaltaisen kysymyksen toisella foorumilla, joten jostakin kurssitehtävästä tai kirjasta tämä varmaankin tulee.

Chiman [10.08.2013 17:12:24]

#

Lisävinkki: Merkkijonon rstrip-metodi (right strip) sopii hyvin tähän, etenkin kun täsmentää sille, että haluaa poistaa vain lopun rivinvaihdon. Python-komentoriviä on hyvä käyttää yksittäisten komentojen testaamiseen:

>>> 'ale \n'.rstrip('\n')
'ale '

Käytännössä .strip('\n') hoitaisi saman asian, mutta rstrip on loogisesti osuvampi.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta