thiva7 Δημοσ. 24 Νοεμβρίου 2021 Δημοσ. 24 Νοεμβρίου 2021 Καλησπερα , εχω μια function η οποια μου επιστρέφει αριθμους με αυτο το τροπο [1,2,5,9,10,5] κλπ και εχω αυτο [1,2,5,9,10,5]= ["+" , "-"] θελω να φτιαξω ενα str που να εχει τα [1,2,5,9,10,5] ανακατεμενα 1 + 2 - 5 - 9 + 10 - 5... πως μπορω να το κανω αυτο? 1
DrKo Δημοσ. 24 Νοεμβρίου 2021 Δημοσ. 24 Νοεμβρίου 2021 (επεξεργασμένο) Για να κάνεις αυτό που θέλεις, πρέπει να παίρνεις ένα-ένα τα ψηφία από την πρώτη λίστα με τους αριθμούς και εναλλάξ να παίρνεις ένα σύμβολο από την λίστα με τα σύμβολα. Τι από τα αποπάνω σε δυσκολεύει; Επεξ/σία 24 Νοεμβρίου 2021 από DrKo
archer100 Δημοσ. 24 Νοεμβρίου 2021 Δημοσ. 24 Νοεμβρίου 2021 (επεξεργασμένο) 1 ώρα πριν, thiva7 είπε Καλησπερα , εχω μια function η οποια μου επιστρέφει αριθμους με αυτο το τροπο [1,2,5,9,10,5] κλπ και εχω αυτο [1,2,5,9,10,5]= ["+" , "-"] θελω να φτιαξω ενα str που να εχει τα [1,2,5,9,10,5] ανακατεμενα 1 + 2 - 5 - 9 + 10 - 5... πως μπορω να το κανω αυτο? Το μπλονταρισμενο ειναι λαθος. Αν καταλαβα καλα, θελεις τα νουμερα της λιστας σε τυχια σειρα και με τυχαιο συμβολο αναμεσα τους. Αν ναι, τοτε, μπορεις να κανεις κατι τετοιο: l = [1,2,5,9,10,5] import random used=[] nums = list(range(len(l))) res='' for i in range(len(l)): x = random.choice([k for k in nums if k not in used]) res += str(l[x]) used.append(x) if i < len(l)-1: res = res + ' ' + random.choice(['+', '-']) + ' ' print(res) #'2 - 1 - 5 + 10 + 9 + 5' #'1 + 10 - 2 + 5 - 5 - 9' #'10 + 1 + 9 + 5 - 5 - 2' #etc Επεξ/σία 24 Νοεμβρίου 2021 από archer100 1
thiva7 Δημοσ. 24 Νοεμβρίου 2021 Μέλος Δημοσ. 24 Νοεμβρίου 2021 3 ώρες πριν, archer100 είπε Το μπλονταρισμενο ειναι λαθος. Αν καταλαβα καλα, θελεις τα νουμερα της λιστας σε τυχια σειρα και με τυχαιο συμβολο αναμεσα τους. Αν ναι, τοτε, μπορεις να κανεις κατι τετοιο: l = [1,2,5,9,10,5] import random used=[] nums = list(range(len(l))) res='' for i in range(len(l)): x = random.choice([k for k in nums if k not in used]) res += str(l[x]) used.append(x) if i < len(l)-1: res = res + ' ' + random.choice(['+', '-']) + ' ' print(res) #'2 - 1 - 5 + 10 + 9 + 5' #'1 + 10 - 2 + 5 - 5 - 9' #'10 + 1 + 9 + 5 - 5 - 2' #etc Φίλε μου αυτό ακριβώς ήθελα. Σε ευχαριστώ πολύ
k33theod Δημοσ. 25 Νοεμβρίου 2021 Δημοσ. 25 Νοεμβρίου 2021 Για την ιστορία μόνο, για να ανακατέψεις μία λίστα υπάρχει η shuffle. Οπότε γλυτώνουμε πολλές από τις παραπάνω πράξεις και μεταβλητές def create_random_calcs(numbers, prajeis): result='' random.shuffle(numbers) for number in numbers: result+=str(number) result+=random.choice(prajeis) return result[:-1] Παίρνει τα στοιχεία της ανακατεμένης λίστας ή ότι άλλο είναι και βάζει ανάμεσα μία τυχαία πράξη. Επιστρέφει το string εκτός το τελευταίο σύμβολο. Δεν λειτουργεί με αρνητικούς. 1
DrKo Δημοσ. 25 Νοεμβρίου 2021 Δημοσ. 25 Νοεμβρίου 2021 (επεξεργασμένο) Για την ιστορία, μπορεί να γίνει ως εξής: >>> from random import shuffle, choice >>> from heapq import merge >>> from itertools import count >>> >>> a = [1,2,5,9,10,5] >>> shuffle(a) >>> counter = count() >>> list(merge(a, [choice(["+", "-"]) for _ in a], key=lambda _: next(counter)))[:-1] [5, '-', 10, '-', 1, '-', 5, '-', 9, '-', 2] >>> Ή, ακόμα πιο λιτά: >>> from random import shuffle >>> a = [1,2,5,9,10,5] >>> shuffle(a) >>> ''.join(list(map(lambda x: f"{x}{choice(['+', '-'])}", a)))[:-1] '5-1-9+2-5-10' Οπότε γλιτώνουμε όλα τα παραπάνω και γίνεται σε μία γραμμή, άντε δύο με το shuffle. Επεξ/σία 25 Νοεμβρίου 2021 από DrKo
k33theod Δημοσ. 25 Νοεμβρίου 2021 Δημοσ. 25 Νοεμβρίου 2021 1 ώρα πριν, DrKo είπε Οπότε γλιτώνουμε όλα τα παραπάνω και γίνεται σε μία γραμμή, άντε δύο με το shuffle. Δεν έχει σημασία μόνο το μέγεθος 😆
DrKo Δημοσ. 26 Νοεμβρίου 2021 Δημοσ. 26 Νοεμβρίου 2021 9 ώρες πριν, k33theod είπε Δεν έχει σημασία μόνο το μέγεθος 😆 Συνηθισμένο από όσους δεν το έχουν το μέγεθος.
archer100 Δημοσ. 26 Νοεμβρίου 2021 Δημοσ. 26 Νοεμβρίου 2021 12 ώρες πριν, DrKo είπε Για την ιστορία, μπορεί να γίνει ως εξής: >>> from random import shuffle, choice >>> from heapq import merge >>> from itertools import count >>> >>> a = [1,2,5,9,10,5] >>> shuffle(a) >>> counter = count() >>> list(merge(a, [choice(["+", "-"]) for _ in a], key=lambda _: next(counter)))[:-1] [5, '-', 10, '-', 1, '-', 5, '-', 9, '-', 2] >>> Ή, ακόμα πιο λιτά: >>> from random import shuffle >>> a = [1,2,5,9,10,5] >>> shuffle(a) >>> ''.join(list(map(lambda x: f"{x}{choice(['+', '-'])}", a)))[:-1] '5-1-9+2-5-10' Οπότε γλιτώνουμε όλα τα παραπάνω και γίνεται σε μία γραμμή, άντε δύο με το shuffle. Ωραια τα one-liners αλλα δεν ειναι τοσο βοηθητικα σε καποιον αρχαριο, μαλλον σαν κινεζικα φαινονται (map και lambda μαζι σε αρχαριο;;!!) . Προσωπικα ειμαι φαν των one-liner αλλα καποιες φορες εχω φαει κραξιμο στο stackoverflow για τη μη αναγνωσιμοτητα του κωδικα και ομολογω πως καποιες φορες ειχαν δικιο. Επομενως, οι απλες και ευαναγνωστες λυσεις ειναι ισως προτιμοτερες για καποιον αρχαριο, ωστε να καταλαβαινει τι κανει ο κωδικας βημα-βημα
DrKo Δημοσ. 26 Νοεμβρίου 2021 Δημοσ. 26 Νοεμβρίου 2021 1 ώρα πριν, archer100 είπε Ωραια τα one-liners αλλα δεν ειναι τοσο βοηθητικα σε καποιον αρχαριο, μαλλον σαν κινεζικα φαινονται (map και lambda μαζι σε αρχαριο;;!!) . Προσωπικα ειμαι φαν των one-liner αλλα καποιες φορες εχω φαει κραξιμο στο stackoverflow για τη μη αναγνωσιμοτητα του κωδικα και ομολογω πως καποιες φορες ειχαν δικιο. Επομενως, οι απλες και ευαναγνωστες λυσεις ειναι ισως προτιμοτερες για καποιον αρχαριο, ωστε να καταλαβαινει τι κανει ο κωδικας βημα-βημα Δεν διαφωνώ, αλλά νόμιζα ότι εάν κάποιος μπορεί να καταλάβει τα one-liners, τότε δεν θα είχε πρόβλημα να καταλάβει ότι το: 13 ώρες πριν, DrKo είπε Για την ιστορία, μπορεί να γίνει ως εξής δείχνει πως αυτό που ακολουθεί δεν είναι για αρχάριο και δεν είναι καν σαν προτεινόμενη καλύτερη λύση για αναγνωσιμότητα. Μάλλον έκανα λάθος.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα