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

python αρχαριος


yolobot

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

@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()
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Εγώ κατάλαβα ότι θέλει να πάρει επιστροφή τα ονόματα των μεταβλητών και όχι τις τιμές. Αν θέλουμε τιμές είναι άλλο πρόβλημα πιο απλό.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 

@iceblade,

είπαμε χωρίς standard library :P

και γιατί dict και όχι σκέτο generator; Τη μνήμη δεν τη σκεφτόμαστε; :P

print(sorted((int(input('Give %s: ' % c)) for c in 'abc')))

 

Αμέσως εσύ να πεταχτείς να κάνεις τις δύο γραμμές μία  :P. Είπε θέλει τα ονόματα των μεταβλητών όχι τα values  :-D

Άμα δε θέλει standard library κρατάμε τον ίδιο κώδικα κ reimplement τη sorted  :P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
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 όπου ονόματα οχημάτων οι μεταβλητές και όπου ταχύτητα η τιμές τους

Επεξ/σία από k33theod
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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