dancer_69 Δημοσ. 7 Μαΐου 2021 Δημοσ. 7 Μαΐου 2021 Θέλω να κάνω μεταφορά κάποιων μεθόδων python σε gdscript(που είναι αρκετά όμοια με την python) και έχω μια απορία σε σχέση με μια συνάρτηση για να μπορέσω να κάνω τη μεταφορά. Η συνάρτηση είναι η παρακάτω: def cover_up(mat): new = [] for j in range(c.GRID_LEN): partial_new = [] for i in range(c.GRID_LEN): partial_new.append(0) new.append(partial_new) done = False for i in range(c.GRID_LEN): count = 0 for j in range(c.GRID_LEN): if mat[i][j] != 0: new[i][count] = mat[i][j] if j != count: done = True count += 1 return new, done Η συνάρτηση αυτή επιστρέφει 2 τιμές(τον πίνακα new και την boolean done). Αυτό δεν υποστηρίζεται στην gdscript οπότε την μετέτρεψα ώστε να επιστρέφει array: [new, done] Τώρα σε μία άλλη συνάρτηση: def up(game): #print("up") # return matrix after shifting up game = transpose(game) game, done = cover_up(game) game, done = merge(game, done) game = cover_up(game)[0] game = transpose(game) return game, done χρησιμοποιείται και η cover_up. Στη δεύτερη συνάρτηση γίνεται ανάθεση τιμών σε δύο μεταβλητές μαζί(αν το λέω σωστά). Αυτές τις άλλαξα ως εξής: var done game = cover_up(game)[0] done = cover_up(game)[1] (μια επιμέρους ερώτηση είναι: το κάνω σωστά αυτό?) Η κύρια απορία μου είναι η γραμμή: game = cover_up(game)[0] Εδώ νομίζω ότι θέτει στο "game" ως τιμή το πρώτο στοιχείο της μεταβλητής "new" της "cover_up" που είναι η πρώτη τιμή που επιστρέφει η "cover_up" και είναι πίνακας. Το καταλαβαίνω σωστά ή το [0] εννοεί ολόκληρο τον πίνακα και άρα το "return new, done" στην "cover_up" είναι array στην ουσία?
archer100 Δημοσ. 7 Μαΐου 2021 Δημοσ. 7 Μαΐου 2021 To cover_up(game)[0] φαίνεται σωστό (στην python είναι σίγουρα σωστό) Καλό είναι ωστόσο να αλλάξεις τις ονομασίες των μεταβλητών και των παραμέτρων στις συναρτήσεις γιατί τα game, done φαίνεται να χρησιμοποιούνται με διφορούμενους τρόπους
dancer_69 Δημοσ. 7 Μαΐου 2021 Μέλος Δημοσ. 7 Μαΐου 2021 (επεξεργασμένο) Αναφέρεσαι σε αυτό που έχω κάνει: var done game = cover_up(game)[0] done = cover_up(game)[1] σε gdscript? Αυτή είναι η επιμέρους απορία που ρώτησα αν το έχω κάνει σωστά. Αυτό που μ' ενδιαφέρει περισσότερο είναι η γραμμή: game = cover_up(game)[0] στην python συνάρτηση. Αυτήν δεν ξέρω πως να αλλάξω ώστε να έχει την ίδια λειτουργία σε gdscript μιας και δεν καταλαβαίνω το [0] τι είναι. Το πρώτο στοιχείο του πίνακα "new" ή ολόκληρος ο πίνακας "new"? Επεξ/σία 7 Μαΐου 2021 από dancer_69
bilakos26 Δημοσ. 8 Μαΐου 2021 Δημοσ. 8 Μαΐου 2021 20 ώρες πριν, dancer_69 είπε Θέλω να κάνω μεταφορά κάποιων μεθόδων python σε gdscript(που είναι αρκετά όμοια με την python) και έχω μια απορία σε σχέση με μια συνάρτηση για να μπορέσω να κάνω τη μεταφορά. Η συνάρτηση είναι η παρακάτω: def cover_up(mat): new = [] for j in range(c.GRID_LEN): partial_new = [] for i in range(c.GRID_LEN): partial_new.append(0) new.append(partial_new) done = False for i in range(c.GRID_LEN): count = 0 for j in range(c.GRID_LEN): if mat[i][j] != 0: new[i][count] = mat[i][j] if j != count: done = True count += 1 return new, done Η συνάρτηση αυτή επιστρέφει 2 τιμές(τον πίνακα new και την boolean done). Αυτό δεν υποστηρίζεται στην gdscript οπότε την μετέτρεψα ώστε να επιστρέφει array: [new, done] Τώρα σε μία άλλη συνάρτηση: def up(game): #print("up") # return matrix after shifting up game = transpose(game) game, done = cover_up(game) game, done = merge(game, done) game = cover_up(game)[0] game = transpose(game) return game, done χρησιμοποιείται και η cover_up. Στη δεύτερη συνάρτηση γίνεται ανάθεση τιμών σε δύο μεταβλητές μαζί(αν το λέω σωστά). Αυτές τις άλλαξα ως εξής: var done game = cover_up(game)[0] done = cover_up(game)[1] (μια επιμέρους ερώτηση είναι: το κάνω σωστά αυτό?) Η κύρια απορία μου είναι η γραμμή: game = cover_up(game)[0] Εδώ νομίζω ότι θέτει στο "game" ως τιμή το πρώτο στοιχείο της μεταβλητής "new" της "cover_up" που είναι η πρώτη τιμή που επιστρέφει η "cover_up" και είναι πίνακας. Το καταλαβαίνω σωστά ή το [0] εννοεί ολόκληρο τον πίνακα και άρα το "return new, done" στην "cover_up" είναι array στην ουσία? Αν το καταλαβαίνω και εγώ σωστά, πιστεύω ότι επιστρέφει την πρώτη τιμή του πίνακα, μιας και αναφέρεσαι σε array.
dancer_69 Δημοσ. 8 Μαΐου 2021 Μέλος Δημοσ. 8 Μαΐου 2021 Κι εγώ προς τα εκεί κλίνω αλλά επειδή δεν γνωρίζω πως λειτουργεί η επιστροφή πολλών τιμών σε μία μέθοδο στην python, γι' αυτό και ανέφερα μήπως επιστρέφονται ως array. Πάντως στην gdscript που δεν υποστηρίζεται η επιστροφή περισσότερων τιμων από 1, την μέθοδο αυτή την έκανα να επιστρέφει array: return [new, done] Έτσι λοιπόν η game = cover_up(game)[0] εφ' όσον επιστρέφεται array, νομίζω ότι έτσι: game = (cover_up(game)[0])[0] θα παίρνω το πρώτο αντικείμενο του πίνακα. Το "cover_up(game)[0]" είναι το πρώτο αντικείμενο της array, άρα ο πίνακας new και προσθέτοντας το [0] παίρνω το πρώτο αντικείμενο του πίνακα. Το σκέφτομαι σωστά?
ralloss Δημοσ. 9 Μαΐου 2021 Δημοσ. 9 Μαΐου 2021 Αν κατάλαβα σωστά , θες κάτι τέτοιο.. func cover_up(param): .... return [someArray, someBoolean] # έτσι παίρνεις ξεχωριστά τα στοιχεία που επιστρέφει η function var someArray = cover_up(param)[0] var someBoolean = cover_up(param)[1] # έτσι παίρνεις κατευθείαν το πρώτο στοιχείο του πίνακα που επιστρέφει η function var first_element_of_someArray = cover_up(game)[0][0] 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα