pmav99 Δημοσ. 16 Ιανουαρίου 2017 Share Δημοσ. 16 Ιανουαρίου 2017 @k33theod Αντιλαμβάνομαι ότι αυτό που θέλεις είναι να βοηθήσεις, αλλά αυτά που προτείνεις δεν είναι σε καμία περίπτωση ο σωστός τρόπος για να λυθεί το πρόβλημα. @yolobot Ο μοναδικός τρόπος με τον οποίο κάνεις sort στην python είναι η χρήση της standard-library (η οποία χρησιμοποιεί τον αλγόριθμο timsort). Προφανώς αυτό που εξετάζεται στην συγκεκριμένη περίπτωση είναι η χρήση if/else κτλ. Αν έχεις μάθει συναρτήσεις, τότε καλό είναι να σπάσεις το πρόβλημα σε υπο-προβλήματα. Πχ def get_input(): """ Return 3 integers """ a = int(input("Δωσε α: ")) b = int(input("Δωσε β: ")) c = int(input("Δωσε γ: ")) return (a, b, c) def sort3(a, b, c): """ Sort 3 numbers (ascendingly). """ # add your own implementation return def main(): (a, b, c) = get_input() (a, b, c) = sort3(a, b, c) print("The numbers in ascending order are: (%d, %d, %d)" % (a, b, c)) if __name__ == "__main__": main() Τώρα για να γράψεις την sort3, το πιο σωστό (και εύκολο) είναι να γράψεις κάποια test πρώτα. Δηλαδή μπορείς να κάνεις μια άλλη συνάρτηση η οποία θα ελέγχει την υλοποίηση της sort3. Αυτό που θα χρειαστεί να μάθεις και πιθανά δεν ξέρεις είναι τι κάνει η assert. Πχ: def test_sort3(): # first test a, b, c = (1, 8, 4) assert sort3(a, b, c) == (1, 4, 8) # second test numbers = (8, 4, 1) assert sort3(a, b, c) == (1, 4, 8) # add more tests # ... test_sort3() 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
k33theod Δημοσ. 16 Ιανουαρίου 2017 Share Δημοσ. 16 Ιανουαρίου 2017 Εγώ κατάλαβα ότι θέλει να πάρει επιστροφή τα ονόματα των μεταβλητών και όχι τις τιμές. Αν θέλουμε τιμές είναι άλλο πρόβλημα πιο απλό. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
iceblade Δημοσ. 16 Ιανουαρίου 2017 Share Δημοσ. 16 Ιανουαρίου 2017 d = {i:int(input("Give {}".format(i))) for i in 'abc'} print(sorted(d, key=d.get)) 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
pmav99 Δημοσ. 16 Ιανουαρίου 2017 Share Δημοσ. 16 Ιανουαρίου 2017 @iceblade, είπαμε χωρίς standard library και γιατί dict και όχι σκέτο generator; Τη μνήμη δεν τη σκεφτόμαστε; print(sorted((int(input('Give %s: ' % c)) for c in 'abc'))) 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Moderators Kercyn Δημοσ. 16 Ιανουαρίου 2017 Moderators Share Δημοσ. 16 Ιανουαρίου 2017 Στην python 4 αυτά θα γίνονται και σε μισή γραμμή wtf Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
iceblade Δημοσ. 16 Ιανουαρίου 2017 Share Δημοσ. 16 Ιανουαρίου 2017 @iceblade, είπαμε χωρίς standard library και γιατί dict και όχι σκέτο generator; Τη μνήμη δεν τη σκεφτόμαστε; print(sorted((int(input('Give %s: ' % c)) for c in 'abc'))) Αμέσως εσύ να πεταχτείς να κάνεις τις δύο γραμμές μία . Είπε θέλει τα ονόματα των μεταβλητών όχι τα values Άμα δε θέλει standard library κρατάμε τον ίδιο κώδικα κ reimplement τη sorted Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
pmav99 Δημοσ. 16 Ιανουαρίου 2017 Share Δημοσ. 16 Ιανουαρίου 2017 IMHO Το να θέλει sorting βάσει του ονόματος της μεταβλητής δεν έχει κανένα νόημα. Ο yolobot νομίζω ήταν σαφής κιόλας. Ακόμα και αν ήθελε το όνομα της μεταβλητής, θα έπρεπε να το τσιμπήσει χρησιμοποιώντας κάτι τέτοιο: >>> my_var = 1 >>> local_vars = dict(**locals()) >>> for k, v in local_vars.items(): ... if v is my_var: ... var_name = k ... break ... >>> print(type(var_name)) <class 'str'> >>> print(var_name) my_var ή (ακόμα χειρότερα) να χρησιμοποιήσει eval. Άμα δε θέλει standard library κρατάμε τον ίδιο κώδικα κ reimplement τη sorted trivialities Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
k33theod Δημοσ. 16 Ιανουαρίου 2017 Share Δημοσ. 16 Ιανουαρίου 2017 (επεξεργασμένο) d = {i:int(input("Give {}".format(i))) for i in 'abc'} print(sorted(d, key=d.get)) d = {i:int(input(f"Give {i}")) for i in 'abc'} Χωρίς format python 3.6 Αυτό ήθελα να κάνω αλλά δεν μου έβγαινε με τίποτα yolobot Αν προτιμάς στην παρούσα φάση τα if μία σωστή λογική από βιβλίο για c είναι max=0 if a>b: if a>c: max=a else: max=c else: if b>c: max=b else: max=c Η ροή του κώδικα είναι σωστή πρέπει όμως να την προεκτείνεις μετά την εύρεση του max για να πάρεις το δεύτερο μεγαλύτερο To sort όμως για μένα είναι το σωστό. @k33theod Αντιλαμβάνομαι ότι αυτό που θέλεις είναι να βοηθήσεις, αλλά αυτά που προτείνεις δεν είναι σε καμία περίπτωση ο σωστός τρόπος για να λυθεί το πρόβλημα. Ο τρόπος ίσως είναι λίγο μη κατανοητός, αλλά η λογική να φύγουμε από τα if και να πάμε σε sort με αντιστοίχιση τιμών με μεταβλητές είναι το σωστό. IMHO Το να θέλει sorting βάσει του ονόματος της μεταβλητής δεν έχει κανένα νόημα. Ο yolobot νομίζω ήταν σαφής κιόλας. ¨Εχω τρία αυτοκίνητα και θέλω να τα κάτατάξω με βάση την τελική τους ταχύτητα πρέπει να πάρω audi γρηγορότερο από bmw γρηγορότερο από ford και όχι 250 γρηγορότερο από 230 γρηγορότερο από 210 όπου ονόματα οχημάτων οι μεταβλητές και όπου ταχύτητα η τιμές τους Επεξ/σία 16 Ιανουαρίου 2017 από k33theod Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα