有人在這裏打碼打高爾夫球,並使用hacky技巧來儘量減少使用的代碼量。
<
是一個常規比較運算符;它基於兩個操作數返回True
或False
。 Python bool
類型是int
的子類,當解釋爲整數時,True
是1
,False
是0
。因此,C[r<1]
要麼選擇C[0]
要麼選擇C[1]
。
&
是一個按位運算符,而不是比較運算符; & 1
將數字屏蔽到最後一位,有效測試數字是奇數還是偶數(最後一位是否設置)。所以如果r
是奇數,則使用C[1]
,否則爲C[0]
。
打破下來:
C
與o
和空格字符
C[r<1]
選秀權或者o
或基於羯羊它是小於1。它永遠不會是一個空間(一個字符串random.randint(1,6)
確保這一點),所以這是總是和o
。這似乎是代碼中的錯誤或疏忽。
C[r<3]
爲1和2選擇空間,否則爲o
。
C[r<5]
選擇一個o
爲5或6,否則爲空格。
C[r&1]
爲2,4和6挑選o
,否則爲空格。
在所有,它打印r
加一作爲模具。 r = 1
給你兩個點,而r = 6
結果七個點,也許作爲一個程式化的點?
固定的代碼,需要增加所有r
測試和反轉奇/偶測試:
s = '-----\n|' + C[r<2] + ' ' + C[r<4] + '|\n|' + C[r<6]
print(s + C[1-r&1] + s[::-1])
演示(包裹串建設一個功能):
>>> 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|
-----
這正是我在尋找。謝謝 –