Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω φτιάξει αυτό το πρόγραμμα που κωδικοποιεί ένα αλφαριθμιτικό με τον κώδικα του καίσαρα .Η εργασία απαιτεί να γίνει με συνάρτηση .Το πρόγραμμα τρέχει κανονικά χωρίς συνάρτηση αλλάοταν το βάζω μέσα

υπάρχει κάποιο πρόβλημα.Το έχω βρει αλλά δεν ξέρω πως διορθώνεται .Μαλλον επειδη οριζω τη λιστα 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)


 

Δημοσ.

Εμένα μια χαρά μου δουλεύει.
Στον κώδικα που δίνεις δεν καλείς την συνάρτηση.

Btw, το συνηθισμένο είναι να μην εκτυπώνουμε μέσα στις συναρτήσεις, αλλά να επιστρέφουμε κάποια τιμή.

Θα μπορούσες να επιστρέφεις το string και στο main πρόγραμμα να το εκτυπώνεις:

print(encode("Some text", 1))
Δημοσ.

 

Εμένα μια χαρά μου δουλεύει.

Στον κώδικα που δίνεις δεν καλείς την συνάρτηση.

 

Btw, το συνηθισμένο είναι να μην εκτυπώνουμε μέσα στις συναρτήσεις, αλλά να επιστρέφουμε κάποια τιμή.

Θα μπορούσες να επιστρέφεις το string και στο main πρόγραμμα να το εκτυπώνεις:

print(encode("Some text", 1))

Ευχαριστώ πολύ για την διευκρίνιση 

Δημοσ.

Έχω φτιάξει αυτό το πρόγραμμα που κωδικοποιεί ένα αλφαριθμιτικό με τον κώδικα του καίσαρα .Η εργασία απαιτεί να γίνει με συνάρτηση .Το πρόγραμμα τρέχει κανονικά χωρίς συνάρτηση αλλάοταν το βάζω μέσα

υπάρχει κάποιο πρόβλημα.Το έχω βρει αλλά δεν ξέρω πως διορθώνεται .Μαλλον επειδη οριζω τη λιστα 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)

Ο ίδιος κώδικας είναι απλά σε πιο "καθαρή" μορφή :P

Δημοσ.
    [text[i] = ord(text[i]) for i in range(len(text))]

Ο ίδιος κώδικας είναι απλά σε πιο "καθαρή" μορφή :P

 

Όταν μάθαινα 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 (εκτός των άλλων).

  • Like 1
Δημοσ.

Όταν μάθαινα 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 είναι ωραίο... γμτο... 

Δημοσ.

Μα το συγκεκριμένο παράδειγμα σχολίασα, στο οποίο δημιουργείται λίστα χωρίς λόγο και προσωπικά δεν μου φαίνεται και readable. Στα υπόλοιπα προφανώς και προτιμούμε list/whatever comprehension.

Btw, δεν είπα ότι λέει κάτι το ότι είναι top voted, είπα απλά ότι συμφωνώ με την top voted.

Δημοσ.

Εθάρουνα ότι εσχολίασες όλο το list_one_line_τα_σπάει_όλα_σε_μία_γραμμή . 

 

Μαζί σου τότε... αλλά personally σε μία γραμμή γιατί μου αρέσει :P 

Δημοσ.

Μάλλον μπερδεύτηκες απ' την απάντηση που ξεκινούσε με "You should indeed avoid using list comprehensions", ενώ προφανώς παρέλειψε να διευκρινίσει "στην συγκεκριμένη περίπτωση".

Δημοσ.

Πριν μιλήσουμε για list comprehensions, iteration με

 for i in range(len(text)) 

είναι τελείως unpythonic. Pythonic είναι το:

for i in text

ή

for i, j in enumerate(text)

αν χρειάζεσαι και το index εκτός από το element του iterable

  • Like 2

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...