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

Απορία για python συνάρτηση(για μετατροπή σε gdscript)


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 στην ουσία?

 

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

To 

cover_up(game)[0]

φαίνεται σωστό (στην python είναι σίγουρα σωστό)

Καλό είναι ωστόσο να αλλάξεις τις ονομασίες των μεταβλητών και των παραμέτρων στις συναρτήσεις γιατί τα game, done φαίνεται να χρησιμοποιούνται με διφορούμενους τρόπους

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

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

Αναφέρεσαι σε αυτό που έχω κάνει:

    var done
    game = cover_up(game)[0]
    done = cover_up(game)[1]

σε gdscript?

Αυτή είναι η επιμέρους απορία που ρώτησα αν το έχω κάνει σωστά.

Αυτό που μ' ενδιαφέρει περισσότερο είναι η γραμμή:

game = cover_up(game)[0] 

στην python συνάρτηση.

Αυτήν δεν ξέρω πως να αλλάξω ώστε να έχει την ίδια λειτουργία σε gdscript μιας και δεν καταλαβαίνω το [0] τι είναι. Το πρώτο στοιχείο του πίνακα "new" ή ολόκληρος ο πίνακας "new"?

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

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. 

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

Κι εγώ προς τα εκεί κλίνω αλλά επειδή δεν γνωρίζω πως λειτουργεί η επιστροφή πολλών τιμών σε μία μέθοδο στην 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] παίρνω το πρώτο αντικείμενο του πίνακα. Το σκέφτομαι σωστά?

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

Αν κατάλαβα σωστά , θες κάτι τέτοιο..

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]

 

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

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

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

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

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

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

Σύνδεση

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

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