Python ohjelmoinnin osaajat
def testaa(testi):
if (len(testi) < 5) or (testi.isdigit() == False) or (testi.isalpha() == False):
return False
else:
return True
-----------------------------------
# python3.2 ohjelma.py
Anna testattava sana: Testi
Sana ei kelpaa.
Anna testattava sana: 234234
Sana ei kelpaa.
Anna testattava sana: Testisana11234
Sana ei kelpaa.
Anna testattava sana:
Jää ikuiseen luuppiin koska antaa arvon False jokaiseen sanaan.
Kommentit (14)
[quote author="Vierailija" time="11.06.2015 klo 16:38"]
no toki koska (testi.isdigit() == False) or (testi.isalpha() == False):
[/quote]"Tehtäväsi onkin luoda tähän päämoduuliin sopiva tarkastaja-moduuli. Tee moduuli, jossa on testaa-niminen funktio, joka vastaanottaa syötteen. Jos syöte on alle 5 merkkiä pitkä, sisältää pelkästään kirjaimia tai pelkästään numeroita, palauttaa ohjelma False. Muussa tapauksessa ohjelma palauttaa arvon True. Ohjelma lopetetaan kun käyttäjä antaa ensimmäisen sopivan syötteen. "
Eikös tuo ole oikein? Palauttaa Falsen jos pituus < 5 tai kirjaimet = False tai numerot = False
ei taida kelvata. En ole Pythonia koskaan koodannut, mutta veikkaanpa, että isDigit palauttaa falsen kun yksinkin kirjain on merkkijonossa ja sama isAlpha numeron kohdalla eli jos pitäisi kuitenkin hyväksyä kirjaimien ja numeroiden yhdistelmä niin tuo ei toimi.
Ahaa tässä ketjussa on pelkkiä miehiä :-D
Anna testattava sana: Testi
testi.isdigit() == False
Anna testattava sana: 234234
testi.isalpha() == False
Anna testattava sana: Testisana11234
molemmat == False
[quote author="Vierailija" time="11.06.2015 klo 16:55"]
Anna testattava sana: Testi
testi.isdigit() == False
Anna testattava sana: 234234
testi.isalpha() == False
Anna testattava sana: Testisana11234
molemmat == False
[/quote]
ja Testisana11234 palauttaa truen, no sittenhän tuo toimii noin.
isdigit == true ja
isalpha == true
falsejen sijaan
[quote author="Vierailija" time="11.06.2015 klo 16:51"]
ei taida kelvata. En ole Pythonia koskaan koodannut, mutta veikkaanpa, että isDigit palauttaa falsen kun yksinkin kirjain on merkkijonossa ja sama isAlpha numeron kohdalla eli jos pitäisi kuitenkin hyväksyä kirjaimien ja numeroiden yhdistelmä niin tuo ei toimi.
[/quote]Tämä taitaa olla ongelma.
Lisäsin alkuun:
print(len(test))
print(test.isdigit() == False)
print(test.isalpha())
jotta näen mitä arvoja tulee:
# python3.2 ohjelma.py
Anna testattava sana: Testi
5
True
True
Sana ei kelpaa.
Anna testattava sana: 234234
6
False
False
Sana ei kelpaa.
Anna testattava sana: Testisana11234
14
True
False
Sana ei kelpaa.
Anna testattava sana:
[quote author="Vierailija" time="11.06.2015 klo 16:58"]
[quote author="Vierailija" time="11.06.2015 klo 16:55"]
Anna testattava sana: Testi
testi.isdigit() == False
Anna testattava sana: 234234
testi.isalpha() == False
Anna testattava sana: Testisana11234
molemmat == False
[/quote]
ja Testisana11234 palauttaa truen, no sittenhän tuo toimii noin.
[/quote]
isalpha() ja isdigit() toteutuvat vain jos merkkijo on pelkkiä numeroita tai kirjaimia.
korjaus:
def testaa(test):
print(len(test))
print(test.isdigit())
print(test.isalpha())
if (len(test) < 5) or (test.isalpha() == False) or (test.isdigit() == False):
return False
else:
return True
# python3.2 ohjelma.py
Anna testattava sana: Testi
5
False
True
Sana ei kelpaa.
Anna testattava sana: 234234
6
True
False
Sana ei kelpaa.
Anna testattava sana: Testisana11234
14
False
False
Sana ei kelpaa.
Anna testattava sana:
Vaihdat nyt vaan tämän:
if (len(test) < 5) or (test.isalpha() == False) or (test.isdigit() == False):
muotoon:
if (len(test) < 5) or (test.isalpha() == True) or (test.isdigit() == True):
Kun molemmat ovat 'False', ei testisana ole pelkkiä numeroita tai kirjaimia.
Ohjelmoinnissa or-lause tarkoittaa, että jompikumpi tai molemmat pätee. Ei joko-tai.
Oikea tapa löytyi:
def testaa(test):
if (len(test) > 4) and (test.isalpha() == False) and (test.isdigit() == False):
return True
else:
return False
[quote author="Vierailija" time="11.06.2015 klo 17:14"]
Ohjelmoinnissa or-lause tarkoittaa, että jompikumpi tai molemmat pätee. Ei joko-tai.
[/quote]
Niin, ja kun kumpikaan ei päde, niin kaikki on hyvin. isalpha() on True, kun merkkijono on pelkkiä kirjaimia. isdigit() on True, kun merkkijono on pelkkiä numeroita. Kun kumpikaan ei ole True, on kyseessä halutunlainen merkkijono.
no toki koska (testi.isdigit() == False) or (testi.isalpha() == False):