Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: IF-OR lause. Tarvitaan apua

javerkki [18.12.2007 15:38:12]

#

Terve. Eli yritän tarkistaa, että jos muuttuja lippu ei ole '' ja
lop muuttuja ei ole joko x, y tai z, niin tulostetaan virhettä.

En nyt saa mitenkään tehtyä tätä if-or lausetta:

pseudoa:

JOS muuttuja nimeltä lippu ne '' JA lop muuttuja ne (x TAI y TAI z ) {
Tulosta virhe!

koodina (perl)

if (($lippu ne '') && ($lop ne 'x' || 'y' || 'z')){
print "Virhe";
}

Eli tulostetaan virhe jos lippu ei ole '' (tyhjä) ja lop ei ole x, y tai z.
Missä menee pieleen?

Anteeksi meni väärälle alueelle

jlaire [18.12.2007 15:53:18]

#

Kannattaa käyttää säännöllistä lauseketta:

if ($lippu ne '' and $lop !~ /^[xyz]$/) {
    print "Virhe";
}

javerkki [18.12.2007 16:01:30]

#

Funktio. Kiitos vastauksesta.

Voitko vielä neuvoa, että miten säännöllisisssä lausekkaissa saan määriteltyä
x, y, ja z:n sijaan merkkijonoja?

Tein tyhmästi, kun en kirjoittanut oikeanlaista esimerkkiä:
Eli $lop olisi joko: ace, doc tai smil.

jlaire [18.12.2007 16:07:19]

#

Vaikka näin:

if ($lippu ne '' and $lop !~ /^(ace|doc|smil)$/) {
    print "Virhe";
}

javerkki [18.12.2007 16:11:17]

#

Tuhannet kiitokset funktio!

Metabolix [18.12.2007 22:13:32]

#

Pieleen menee siinä, että tuo ehtosi on ryhmiteltynä ($lop ne 'x') || ('y') || ('z'). Kuten tästä näkyy, haluamaasi lopputulokseen päästään lisäämällä muihinkin väleihin tuo "$lop ne".

Säännölliset lausekkeet tuskin selkeyttävät tai nopeuttavat koodia, luultavasti juuri toisin päin.

jlaire [19.12.2007 09:27:17]

#

Metabolix kirjoitti:

Säännölliset lausekkeet tuskin selkeyttävät tai nopeuttavat koodia, luultavasti juuri toisin päin.

Nopeudella tuskin on kovin paljoa merkitystä tässä.

Kuvittelisin, että Perl-ohjelmoijat osaavat lukea säännöllisiä lausekkeita ihan sujuvasti. Ainakin minusta se on paljon selkeämpi kuin

if ($lippu ne '' and $lop ne 'ace' && $lop ne 'doc' && $lop ne 'smil') {
    print "Virhe";
}

Tosin jos käyttää Perl 6:tta tai esim. tätä lisäosaa Perl 5:een, saa tuostakin tavasta ihan selkeän:

if ($lippu ne '' and $lop ne all qw<ace doc smil>) {
    print "Virhe";
}

Vastaus

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

Tietoa sivustosta