2016-03-16 15 views
5

I napotkał następujący:Jaki jest cel porównywania indeksów w Pythonie?

r = random.randint(1,6) 
C = "o " 
s = '-----\n|' + C[r<1] + ' ' + C[r<3] + '|\n|' + C[r<5] 
print(s + C[r&1] + s[::-1]) 

Kiedy wykonywany w stanie spoczynku, to wysyła ASCII umrzeć z wartością losową.

Jak to działa, a dokładniej, co symbole porównania (< i &) osiągają wewnątrz indeksów?

Odpowiedz

7

Ktoś tu gra w golfa i używa hackowskich sztuczek, aby zminimalizować ilość użytego kodu.

  • < jest regularnym operatorem porównania; zwraca True lub False na podstawie dwóch argumentów. Typ Python bool jest podklasą int i ,, która jest interpretowana jako liczba całkowita. Jako taki C[r<1] albo wybiera C[0] lub .

  • & jest bitową operator nie operator porównania; & 1 zamaskowuje numer do ostatniego bitu, skutecznie testując, czy liczba jest nieparzysta czy parzysta (ostatni bit jest ustawiony, czy nie). Więc jeśli r jest nieparzysta, użyto C[1], w przeciwnym razie jest C[0].

Złamanie tej dół:

  • C jest ciągiem z o i kosmicznych bohaterów
  • C[r<1] rozgrywki albo o lub spacja na podstawie pogoda jest mniejszy niż 1. Nigdy nie jest (Zapewnia to random.randint(1,6), czyli zawsze an o. To wydaje się być błędem lub niedopatrzeniem w kodzie.
  • C[r<3] wybiera miejsce na 1 i 2, w innym przypadku na o.
  • C[r<5] wybiera o dla 5 lub 6, spacja w przeciwnym razie.
  • C[r&1] wybiera o dla 2, 4 i 6, w innym miejscu.

W sumie, drukuje rplus jeden jako matrycy. r = 1 daje dwa pipsy, a r = 6 w siedem pipsów, być może w formie stylizowanej?

Mocowanie kod, który wymaga inkrementacji wszystkie r testy i odwracanie parzyste/nieparzyste Test:

s = '-----\n|' + C[r<2] + ' ' + C[r<4] + '|\n|' + C[r<6] 
print(s + C[1-r&1] + s[::-1]) 

Demo (owijanie budynek ciąg w funkcji):

>>> import random 
>>> def dice(r, C='o '): 
...  s = '-----\n|' + C[r<2] + ' ' + C[r<4] + '|\n|' + C[r<6] 
...  print(s + C[1-r&1] + s[::-1]) 
... 
>>> for i in range(1, 7): 
...  dice(i) 
... 
----- 
| | 
| o | 
| | 
----- 
----- 
|o | 
| | 
| o| 
----- 
----- 
|o | 
| o | 
| o| 
----- 
----- 
|o o| 
| | 
|o o| 
----- 
----- 
|o o| 
| o | 
|o o| 
----- 
----- 
|o o| 
|o o| 
|o o| 
----- 
+0

to właśnie Szukałem. Dziękuję Ci –