Perl Script με palindromes - που'χει κολλήσει ... !!!

Γενικά θέματα για τις γλώσσες προγραμματισμού που δεν καλύπτονται από τις άλλες περιοχές της κατηγορίας.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
mariel19
Δημοσιεύσεις: 49
Εγγραφή: 08 Φεβ 2004 17:13
Τοποθεσία: www.liv.ac.uk

Perl Script με palindromes - που'χει κολλήσει ... !!!

Δημοσίευση από mariel19 » 10 Νοέμ 2009 02:43

Έψαξα πολύ για να βρω κάποιο θέμα ... αντίστοιχο με Perl programming αλλά δεν βρήκα κάτι σχετικό ...
οπότε λέω να διατυπώσω εδώ τον προβληματισμό μου ... (Σε περίπτωση που οι admins θεωρούν ότι πρέπει να μεταφερθεί, ας το κάνουν... )

έχω φτιάξει το παρακάτω script, του οποίου αντικειμενικός σκοπός είναι να ελέγχει για palindromes. Επίσης, θα πρέπει να μπορεί ο χρήστης να εισάγει μέχρι και 5 strings, και να τους βγάζει το αποτέλεσμα στην σελίδα (html) αλλά να μπορεί να δώσει ακόμα και 2 inputs και να πάρει αποτέλεσμα.. Το string μπορεί να είναι μία λέξη ή μια πρόταση ή ακόμα κι αριθμός, με οποιονδήποτε χαρακτήρα, σημεία στίξης, κτλ (τα οποία φυσικά θα τα "πετάει έξω" καθώς θα διαβάζει το input.. )

Λοιπόν .. ο κώδικας μου είναι ο παρακάτω .. :

Κώδικας: Επιλογή όλων

#!/usr/bin/perl

do {
print "\nPlease enter a possible palindrome or Ctr+C to exit the program: ";

chomp &#40; $palindrome = <STDIN> &#41;;

@palindrome = split&#40;/ \s /,  $palindrome &#41;;
@backwards = reverse&#40; @palindrome &#41;;
$sizeOfPalindrome = @palindrome;


for&#40; $i = 0; $i < $sizeOfPalindrome; $i++ &#41;
&#123;
	if&#40; @palindrome&#91;$i&#93; ne @backwards&#91;$i&#93; &#41;
	&#123;
		$pali = "";
		last;
	&#125;
	else
	&#123;
		$pali = "true";
	&#125;
		
&#125; 

if&#40; $pali &#41;&#123;
	print "\n\"$palindrome\" is a palindrome\n";
&#125;
else&#123;
	print "\n\"$palindrome\" is NOT a palindrome\n";

&#125;
&#125;
while&#40;$pali ne @palindrome&#41;;
@palindrome = split(/ \s /, $palindrome );
Πιστεύω ότι το πρόβλημά μου κυρίως εστιάζεται εδώ πέρα ... και μ' έχει παιδέψει όλη μέρα .. γιατί δεν μπορώ να καταλάβω πως πραγματικά πρέπει να γραφτεί ....

όπως το φαντάζομαι ότι θα πρέπει να λειτουργεί, λέω ότι θα παίρνει αρχικά το input value που δίνει ο user στην προκειμένη π.χ. μία πρόταση : "Madam, I'm Adam" και το "κόβει" σε λέξεις .. κι από κει παίρνει ένα ένα τα ψηφία, πετώντας έξω κόμματα, τελείες, θαυμαστικά, κεφαλαία-μικρά.. τα αντιστρέφει, τα συγκρίνει ... και ανάλογα αν είναι ίδια ή διαφορετικά δίνει και το αντίστοιχο επιθυμητό αποτέλεσμα..

όμως .. εδώ .. δεν συμβαίνει αυτό ... ; μήπως μπορεί κάποιος να με "ξεμπλοκάρει" ..;;; τι κάνω λάθος ... ; μήπως η όλη λογική που χρησιμοποιώ είναι λάθος ... ;
όποιος μπορεί ας με βοηθήσει...

Ευχαριστώ προκαταβολικά..! :evil:

zepolen
Δημοσιεύσεις: 18
Εγγραφή: 01 Σεπ 2008 15:57

Perl Script με palindromes - που'χει κολλήσει ... !!!

Δημοσίευση από zepolen » 10 Νοέμ 2009 15:20

Σαν ασκηση μου φαινεται, γιαυτο δεν θα σου πω την ανατηση, αλλα θα σου πω καποιες βοηθειες:

Το loop που κανεις iterate στο string με το $i δεν χρειαζεται μπορεις με πολυ πιο απλο τροπο να συγκρινεις 2 strings στο Perl.

Ξαναδιαβασε τι ακριβος ειναι το scalar και το array και πως δουλευουν, νομιζω πως δεν τα εχεις καταλαβει καλα ακομη.

Επισης πως ακριβως δουλευουν το reverse και split, η γραμμη αυτη δεν κανει αυτο που νομιζεις:

Κώδικας: Επιλογή όλων

@backwards = reverse&#40; @palindrome &#41;; 
Οριστε το ιδιο σε Python, για να παρεις μια ιδεα προς το flow:

Κώδικας: Επιλογή όλων

while 1&#58;
  print 'Enter a palindrome'
  line = raw_input&#40;&#41;
  if len&#40;line&#41; < 5&#58;
    print '5 chars needed'
    continue
  clean = &#91;c.lower&#40;&#41; for c in line if c.isalpha&#40;&#41;&#93;
  if clean == list&#40;reversed&#40;clean&#41;&#41;&#58;
    print '"%s" is a palindrome' % line
    break
  print '"%s" is NOT a palindrome' % line

Άβαταρ μέλους
mariel19
Δημοσιεύσεις: 49
Εγγραφή: 08 Φεβ 2004 17:13
Τοποθεσία: www.liv.ac.uk

Perl Script με palindromes - που'χει κολλήσει ... !!!

Δημοσίευση από mariel19 » 10 Νοέμ 2009 16:38

ναι άσκηση είναι ... δεν έχω ιδέα από python ... ούτε πρόκειται.. .. anyways ..
τέσπα θα το ψάξω κι αλλιώς .. .. ευχαριστώ πολύ για τη βοήθεια .. !!

Άβαταρ μέλους
manolism
Super Moderator
Δημοσιεύσεις: 6652
Εγγραφή: 25 Ιαν 2004 16:01
Τοποθεσία: Wild West
Επικοινωνία:

Perl Script με palindromes - που'χει κολλήσει ... !!!

Δημοσίευση από manolism » 10 Νοέμ 2009 18:07

Το μετέφερα εδώ που ταιριάζει καλύτερα

Άβαταρ μέλους
mariel19
Δημοσιεύσεις: 49
Εγγραφή: 08 Φεβ 2004 17:13
Τοποθεσία: www.liv.ac.uk

Perl Script με palindromes - που'χει κολλήσει ... !!!

Δημοσίευση από mariel19 » 11 Νοέμ 2009 02:04

ωραία ... έφτιαξα ένα scriptaki που πάνω κάτω δουλεύει γι'αυτό που θέλω ..

μήπως γνωρίζεις πως γίνεται να έχω μια φόρμα στο xhtml και να το καλώ .. ;

Άβαταρ μέλους
mariel19
Δημοσιεύσεις: 49
Εγγραφή: 08 Φεβ 2004 17:13
Τοποθεσία: www.liv.ac.uk

Perl Script με palindromes - που'χει κολλήσει ... !!!

Δημοσίευση από mariel19 » 17 Νοέμ 2009 18:31

Εχω το παρακάτω script το οποίο μου κάνει απόλυτα τη δουλειά που θέλω...
Ωστόσο .. .πως θα πρέπει να το μετατρέψω ώστε αντί να τρέχει σε terminal να καλείται από ένα html (me form + post action, τα έχω διαμορφώσει ήδη, αλλά αναμενόμενο να μην το τρέχει το script-άκι .. παρά μόνο αν το κάνω href και ανοίξει κάποιον interpreter) .. ;
και να επιτρέπει στον χρήστη να βάλει έως και 5 inputs.. ? (εδώ έχει do - while, άρα τρέχει .. ας πούμε για πάντα...επίσης έχω διαμορφώσει το input text, κτλ.. ) ..

κάποια βοήθεια...;

Κώδικας: Επιλογή όλων


#!/usr/bin/perl 
# palindrome.cgi 

do&#123;

    # read the input
    print "Type a word or phrase&#58; ";
    $line = <>;

    # strip out stuff that would disturb the palindrome comparison
    # and convert to lowercase...
    $line =~ s/\W//g; # removes space and nonalphanumerics
    $line =~ tr/A-Z/a-z/;  # converts to lowercase. Better&#58; lc&#40;$line&#41; !

    # get the list of letter and reverse it
    @letters = split //, $line;
    $reverse = join "", reverse @letters;

     #a palindrome is equal to its reverse or a one letter word.
    if&#40;@letters == 0&#41;&#123;
    print "End of session\n";
    &#125;
    elsif&#40;@letters == 1&#41;&#123;
    print "One letter palindrome, trivial!\n";
    &#125;


    if&#40;$reverse eq $line&#41;&#123;
    print "This is a palindrome.\n";
    &#125;
    else&#123;
    print "Not a palindrome.\n";
    &#125;
&#125;while&#40;$line&#41;;



Ευχαριστώ!

Απάντηση

Επιστροφή στο “γλώσσες προγραμματισμού - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες