pmav99 Δημοσ. 16 Ιανουαρίου 2017 Δημοσ. 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 Δημοσ. 16 Ιανουαρίου 2017 Εγώ κατάλαβα ότι θέλει να πάρει επιστροφή τα ονόματα των μεταβλητών και όχι τις τιμές. Αν θέλουμε τιμές είναι άλλο πρόβλημα πιο απλό.
iceblade Δημοσ. 16 Ιανουαρίου 2017 Δημοσ. 16 Ιανουαρίου 2017 d = {i:int(input("Give {}".format(i))) for i in 'abc'} print(sorted(d, key=d.get)) 1
pmav99 Δημοσ. 16 Ιανουαρίου 2017 Δημοσ. 16 Ιανουαρίου 2017 @iceblade, είπαμε χωρίς standard library και γιατί dict και όχι σκέτο generator; Τη μνήμη δεν τη σκεφτόμαστε; print(sorted((int(input('Give %s: ' % c)) for c in 'abc'))) 1
Moderators Kercyn Δημοσ. 16 Ιανουαρίου 2017 Moderators Δημοσ. 16 Ιανουαρίου 2017 Στην python 4 αυτά θα γίνονται και σε μισή γραμμή wtf
iceblade Δημοσ. 16 Ιανουαρίου 2017 Δημοσ. 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 Δημοσ. 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 Δημοσ. 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
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα