guitarist2 Δημοσ. 20 Νοεμβρίου 2015 Δημοσ. 20 Νοεμβρίου 2015 Έχω φτιάξει αυτό το πρόγραμμα που κωδικοποιεί ένα αλφαριθμιτικό με τον κώδικα του καίσαρα .Η εργασία απαιτεί να γίνει με συνάρτηση .Το πρόγραμμα τρέχει κανονικά χωρίς συνάρτηση αλλάοταν το βάζω μέσα υπάρχει κάποιο πρόβλημα.Το έχω βρει αλλά δεν ξέρω πως διορθώνεται .Μαλλον επειδη οριζω τη λιστα l=[] μέσα στη συνάρτηση κάτι σημβαινειμε την τοπικοτητα της μεταβλητής(λιστας). text = input("Input the text for encoding:") key = int(input("Input a key between 1 and 25:")) def encode(text,key): text = list(text) l = [] x = 96 w = 0 for i in range(len(text)): text[i] = ord(text[i]) for i in text: if i == 32: l.append(i) elif (i + key) > 122: z = i + key - 122 w = x + z l.append(w) else : l.append(i + key) for i in range(len(l)): l[i] = chr(l[i]) l = "".join(l) print (l)
Ilias95 Δημοσ. 20 Νοεμβρίου 2015 Δημοσ. 20 Νοεμβρίου 2015 Εμένα μια χαρά μου δουλεύει.Στον κώδικα που δίνεις δεν καλείς την συνάρτηση.Btw, το συνηθισμένο είναι να μην εκτυπώνουμε μέσα στις συναρτήσεις, αλλά να επιστρέφουμε κάποια τιμή. Θα μπορούσες να επιστρέφεις το string και στο main πρόγραμμα να το εκτυπώνεις: print(encode("Some text", 1))
guitarist2 Δημοσ. 20 Νοεμβρίου 2015 Μέλος Δημοσ. 20 Νοεμβρίου 2015 Εμένα μια χαρά μου δουλεύει. Στον κώδικα που δίνεις δεν καλείς την συνάρτηση. Btw, το συνηθισμένο είναι να μην εκτυπώνουμε μέσα στις συναρτήσεις, αλλά να επιστρέφουμε κάποια τιμή. Θα μπορούσες να επιστρέφεις το string και στο main πρόγραμμα να το εκτυπώνεις: print(encode("Some text", 1)) Ευχαριστώ πολύ για την διευκρίνιση
groot Δημοσ. 20 Νοεμβρίου 2015 Δημοσ. 20 Νοεμβρίου 2015 Έχω φτιάξει αυτό το πρόγραμμα που κωδικοποιεί ένα αλφαριθμιτικό με τον κώδικα του καίσαρα .Η εργασία απαιτεί να γίνει με συνάρτηση .Το πρόγραμμα τρέχει κανονικά χωρίς συνάρτηση αλλάοταν το βάζω μέσα υπάρχει κάποιο πρόβλημα.Το έχω βρει αλλά δεν ξέρω πως διορθώνεται .Μαλλον επειδη οριζω τη λιστα l=[] μέσα στη συνάρτηση κάτι σημβαινειμε την τοπικοτητα της μεταβλητής(λιστας). text = input("Input the text for encoding:") key = int(input("Input a key between 1 and 25:")) def encode(text,key): text = list(text) x = 96 [text[i] = ord(text[i]) for i in range(len(text))] l = [i if i == 32 else x + (i + key - 122) if (i + key) > 122 else i + key for i in text] [l[i] = chr(l[i]) for i in range(len(l))] l = "".join(l) print (l) Ο ίδιος κώδικας είναι απλά σε πιο "καθαρή" μορφή
Ilias95 Δημοσ. 20 Νοεμβρίου 2015 Δημοσ. 20 Νοεμβρίου 2015 [text[i] = ord(text[i]) for i in range(len(text))] Ο ίδιος κώδικας είναι απλά σε πιο "καθαρή" μορφή Όταν μάθαινα python, είχα την απορία αν πρέπει να χρησιμοποιούνται τα list comprehensions με τέτοιο τρόπο, την οποία και εξέφρασα στο stack overflow: http://stackoverflow.com/questions/8695488/proper-use-of-list-comprehensions-python Τρία χρόνια μετά, συμφωνώ με την top voted απάντηση που πήρα. Οπότε θα έλεγα ότι το for i in range(len(text)): text[i] = ord(text[i]) είναι πιο readable (εκτός των άλλων). 1
groot Δημοσ. 20 Νοεμβρίου 2015 Δημοσ. 20 Νοεμβρίου 2015 Όταν μάθαινα python, είχα την απορία αν πρέπει να χρησιμοποιούνται τα list comprehensions με τέτοιο τρόπο, την οποία και εξέφρασα στο stack overflow: http://stackoverflow.com/questions/8695488/proper-use-of-list-comprehensions-python Τρία χρόνια μετά, συμφωνώ με την top voted απάντηση που πήρα. Οπότε θα έλεγα ότι το for i in range(len(text)): text[i] = ord(text[i]) είναι πιο readable (εκτός των άλλων). Μία top voted απάντηση δεν λέει κάτι από μόνη της επειδή είναι στο S.O. Καλό θα ήταν να γίνεται και μία έρευνα πιο πριν. Π.χ., εδώ: http://stackoverflow.com/questions/22108488/are-list-comprehensions-and-functional-functions-faster-than-for-loopsαλλά και όπου και εάν ψάξει κανείς για list comprehension VS for loop θα δει ότι είναι καλύτερα το list comprehension. Στο συγκεκριμένο παράδειγμα, ΜΟΝΟ στο for loop που δεν γίνεται build η list έχει κάποιο advance να χρησιμοποιήσεις κανονικό loop. Σε όλα τα άλλα είναι καλύτερο το list comprehension. Παρόλα αυτά, το one liner είναι ωραίο... γμτο...
Ilias95 Δημοσ. 21 Νοεμβρίου 2015 Δημοσ. 21 Νοεμβρίου 2015 Μα το συγκεκριμένο παράδειγμα σχολίασα, στο οποίο δημιουργείται λίστα χωρίς λόγο και προσωπικά δεν μου φαίνεται και readable. Στα υπόλοιπα προφανώς και προτιμούμε list/whatever comprehension.Btw, δεν είπα ότι λέει κάτι το ότι είναι top voted, είπα απλά ότι συμφωνώ με την top voted.
groot Δημοσ. 21 Νοεμβρίου 2015 Δημοσ. 21 Νοεμβρίου 2015 Εθάρουνα ότι εσχολίασες όλο το list_one_line_τα_σπάει_όλα_σε_μία_γραμμή . Μαζί σου τότε... αλλά personally σε μία γραμμή γιατί μου αρέσει
Ilias95 Δημοσ. 21 Νοεμβρίου 2015 Δημοσ. 21 Νοεμβρίου 2015 Μάλλον μπερδεύτηκες απ' την απάντηση που ξεκινούσε με "You should indeed avoid using list comprehensions", ενώ προφανώς παρέλειψε να διευκρινίσει "στην συγκεκριμένη περίπτωση".
iceblade Δημοσ. 22 Νοεμβρίου 2015 Δημοσ. 22 Νοεμβρίου 2015 Πριν μιλήσουμε για list comprehensions, iteration με for i in range(len(text)) είναι τελείως unpythonic. Pythonic είναι το: for i in text ή for i, j in enumerate(text) αν χρειάζεσαι και το index εκτός από το element του iterable 2
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα