[PYTHON] Mathe-Puzzle zum Trainieren des Gehirns des Programmierers Q03 Drehen Sie die Karte um

Problemzusammenfassung

Drehen Sie zum ersten Mal jede zweite Karte um 100 Karten, zum zweiten Mal alle zwei Karten um und fragen Sie schließlich nach der umgedrehten Karte.

Code

#Q03 Drehen Sie die Karte um

cards0 = [-1]*100 #Der Erste. 1=Tabelle, -1=zurück
cards = [-1, 1]*50  #Zweite
step = 3 #Wie viele Blätter müssen umgedreht werden?

#Drehen Sie die Karte für jeden Schritt um. Beenden Sie, wenn keine Karten mehr umgedreht werden müssen
while cards0 != cards:
    cards0 = cards[:]
    for i in range(step-1, len(cards), step):
        cards[i] *=  -1
    step += 1

#Zeigen Sie, wie viele Karten umgedreht sind
backs = [i+1 for i in range(len(cards)) if cards[i] == -1]
print(backs)

Referenz

Sequenzgenerierung

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

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

Referenz: https://note.nkmk.me/python-list-initialize/

Kopie des Arrays

In Python ~~ Da die Kopie des Arrays als Referenz übergeben wird ~~ Listentyp ist ** veränderbares ** Objekt, ~~ beim Erstellen einer Kopie ~~ Weil die einfache Variablenzuweisung ein Objekt gemeinsam nutzt, ohne eine Kopie des Objekts zu erstellen , Wenn Sie den Listeninhalt einer Variablen ändern, wird auch der Listeninhalt der anderen Variablen geändert.

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

~~ Wenn Sie einen Wert übergeben möchten ~~ Verwenden Sie Slices, wenn Sie eine unabhängige Kopie erstellen möchten.

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

Referenz: https://qiita.com/hrs1985/items/4e7bba39a35056de4e73

Veränderlich und unveränderlich

Es ist möglich, den Wert je nach Objekt zu ändern. Ein Objekt, dessen Wert geändert werden kann, wird als veränderbar bezeichnet. Objekte, deren Werte nach ihrer Erstellung nicht mehr geändert werden können, werden als unveränderlich bezeichnet.

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

Veränderlich: Listen, Wörterbücher, Mengen usw. Unveränderlich: Zahlen, Saiten, Taples usw.

Dies bedeutet, dass beim Versuch, den Wert eines unveränderlichen Objekts zu ändern, ein neues Objekt erstellt wird. Veränderbare Objekte ändern den Wert vorhandener Objekte. Daher ist das Verhalten beim Kopieren von Variablen unterschiedlich.

Unveränderliches Beispiel


a=b=1
print(id(a)) # 140716556333904
a=2
print(id(a)) #140716556333936 ★ Ein neues Objekt wird erstellt
print(b) #1 ★ Änderungen in a wirken sich nicht auf b aus

Veränderliches Beispiel


a=b=['hoge']
print(id(a)) #2667037271944
a[0] = 'fuga'
print(id(a)) #2667037271944 ★ Bestehende Objekte werden geändert
print(b) #['fuga']★ Änderungen in einem Affekt b

Listeneinschlussnotation

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

Ist das gleiche wie

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

Referenz: https://note.nkmk.me/python-list-comprehension/

Recommended Posts

Mathe-Puzzle zum Trainieren des Gehirns des Programmierers Q03 Drehen Sie die Karte um
Mathe-Puzzle zum Trainieren des Gehirns des Programmierers Q04 Schnitzen eines Stocks
Mathe-Puzzle zum Trainieren des Gehirns des Programmierers Q01 "Wiederholung in Dezimalzahl"
Mathematik-Puzzle zum Trainieren des Gehirns des Programmierers Q06 (modifizierte Version) Koratz 'Vorhersage
Mathematik-Puzzle zum Trainieren des Gehirns des Programmierers Q08 Ausgezeichneter Reinigungsroboter
Mathe-Puzzle, um das Gehirn des Programmierers zu trainieren Q05 Zahlen Sie immer noch bar?