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

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

Δημοσ.

Καλησπερα ,

εχω μια 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...

πως μπορω να το κανω αυτο?

 

  • Like 1
Δημοσ. (επεξεργασμένο)

Για να κάνεις αυτό που θέλεις, πρέπει να παίρνεις ένα-ένα τα ψηφία από την πρώτη λίστα με τους αριθμούς και εναλλάξ να παίρνεις ένα σύμβολο από την λίστα με τα σύμβολα. 

Τι από τα αποπάνω σε δυσκολεύει; 

Επεξ/σία από DrKo
Δημοσ. (επεξεργασμένο)
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

 

Επεξ/σία από archer100
  • Thanks 1
Δημοσ.
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

 

Φίλε μου αυτό ακριβώς ήθελα. 

Σε ευχαριστώ πολύ 

Δημοσ.

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

 

  • Like 1
Δημοσ. (επεξεργασμένο)

Για την ιστορία, μπορεί να γίνει ως εξής:

>>> 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. 

Επεξ/σία από DrKo
Δημοσ.
1 ώρα πριν, DrKo είπε

Οπότε γλιτώνουμε όλα τα παραπάνω και γίνεται σε μία γραμμή, άντε δύο με το shuffle. 

Δεν έχει σημασία μόνο το μέγεθος 😆

Δημοσ.
9 ώρες πριν, k33theod είπε

Δεν έχει σημασία μόνο το μέγεθος 😆

Συνηθισμένο από όσους δεν το έχουν το μέγεθος. 

Δημοσ.
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 για τη μη αναγνωσιμοτητα του κωδικα και ομολογω πως καποιες φορες ειχαν δικιο. Επομενως, οι απλες και ευαναγνωστες λυσεις ειναι ισως προτιμοτερες για καποιον αρχαριο, ωστε να καταλαβαινει τι κανει ο κωδικας βημα-βημα

 

Δημοσ.
1 ώρα πριν, archer100 είπε

Ωραια τα one-liners αλλα δεν ειναι τοσο βοηθητικα σε καποιον αρχαριο, μαλλον σαν κινεζικα φαινονται (map και lambda μαζι σε αρχαριο;;!!) .

Προσωπικα ειμαι φαν των one-liner αλλα καποιες φορες εχω φαει κραξιμο στο stackoverflow για τη μη αναγνωσιμοτητα του κωδικα και ομολογω πως καποιες φορες ειχαν δικιο. Επομενως, οι απλες και ευαναγνωστες λυσεις ειναι ισως προτιμοτερες για καποιον αρχαριο, ωστε να καταλαβαινει τι κανει ο κωδικας βημα-βημα

 

Δεν διαφωνώ, αλλά νόμιζα ότι εάν κάποιος μπορεί να καταλάβει τα one-liners, τότε δεν θα είχε πρόβλημα να καταλάβει ότι το:

13 ώρες πριν, DrKo είπε

Για την ιστορία, μπορεί να γίνει ως εξής

δείχνει πως αυτό που ακολουθεί δεν είναι για αρχάριο και δεν είναι καν σαν προτεινόμενη καλύτερη λύση για αναγνωσιμότητα.

 

Μάλλον έκανα λάθος. 

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

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

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

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

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

Σύνδεση

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

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