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)
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/
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
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
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