[PYTHON] Puzzle mathématique pour entraîner le cerveau du programmeur Q03 Retourner la carte

Résumé du problème

Retournez 100 cartes toutes les autres cartes pour la première fois, toutes les deux cartes pour la deuxième fois, et enfin demandez la carte retournée.

Code

#Q03 Retournez la carte

cards0 = [-1]*100 #la première. 1=table, -1=retour
cards = [-1, 1]*50  #Seconde
step = 3 #Combien de feuilles retourner

#Retournez la carte à chaque étape. Fin quand il n'y a plus de cartes à retourner
while cards0 != cards:
    cards0 = cards[:]
    for i in range(step-1, len(cards), step):
        cards[i] *=  -1
    step += 1

#Montre combien de cartes sont retournées
backs = [i+1 for i in range(len(cards)) if cards[i] == -1]
print(backs)

référence

Génération de séquence

list1 = [0] * 3 
print(list1) # [0, 0, 0]

list2 = [0, 1] * 3
print(list2) # [0, 1, 0, 1, 0, 1]

Référence: https://note.nkmk.me/python-list-initialize/

Copie du tableau

En Python ~~ Puisque la copie du tableau est passée par référence ~~ Le type de liste est un objet ** mutable **, ~~ Lors d'une copie ~~ Parce qu'une simple affectation de variable partage un objet sans faire de copie de l'objet , Si vous modifiez le contenu de la liste d'une variable, le contenu de la liste de l'autre variable sera également modifié.

a = [1, 2, 3]
b = a
b[2] = 4
print(b) #[1, 2, 4]
print(a) #[1, 2, 4]

~~ Lorsque vous voulez passer par valeur ~~ Utilisez des tranches lorsque vous voulez faire une copie indépendante.

a = [1, 2, 3]
b = a[:]
b[2] = 4
print(b) #[1, 2, 4]
print(a) #[1, 2, 3]

Référence: https://qiita.com/hrs1985/items/4e7bba39a35056de4e73

Mutable et immuable

Il est possible de modifier la valeur en fonction de l'objet. Un objet dont la valeur peut être modifiée est appelé mutable. Les objets dont les valeurs ne peuvent pas être modifiées après leur création sont appelés immuables.

https://docs.python.org/ja/3/reference/datamodel.html

Mutable: listes, dictionnaires, ensembles, etc. Immuable: nombres, chaînes, taples, etc.

Cela signifie que si vous essayez de modifier la valeur d'un objet immuable, un nouvel objet sera créé. Les objets mutables modifient la valeur des objets existants. Par conséquent, le comportement lors de la copie de variables est différent.

Exemple immuable


a=b=1
print(id(a)) # 140716556333904
a=2
print(id(a)) #140716556333936 ★ Un nouvel objet est créé
print(b) #1 ★ Les changements dans a n'affectent pas b

Exemple de mutable


a=b=['hoge']
print(id(a)) #2667037271944
a[0] = 'fuga'
print(id(a)) #2667037271944 ★ Les objets existants sont modifiés
print(b) #['fuga']★ Changements dans un affect b

Notation d'inclusion de liste

backs = [i+1 for i in range(len(cards)) if cards[i] == -1]
print(backs)

Est le même que

backs=[]
for i in range(len(cards)):
    if cards[i] == -1:
        backs.append(i+1)
print(backs)

Référence: https://note.nkmk.me/python-list-comprehension/

Recommended Posts

Puzzle mathématique pour entraîner le cerveau du programmeur Q03 Retourner la carte
Puzzle mathématique pour entraîner le cerveau du programmeur Q04 Découper un bâton
Puzzle mathématique pour entraîner le cerveau du programmeur Q01 "Translittération en décimal"
Puzzle mathématique pour entraîner le cerveau du programmeur Q06 (version modifiée) Prédiction de Koratz
Puzzle mathématique pour entraîner le cerveau du programmeur Q08 Excellent robot de nettoyage
Puzzle mathématique pour former le cerveau du programmeur Q05 Vous payez toujours en espèces?