誰かがここでコードゴルフを行い、ハックトリックを使用してコードの使用量を最小限に抑えています。
<
定期的な比較演算子です。 2つのオペランドに基づいて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]
は、5または6の場合はo
、それ以外の場合はスペースを選択します。
C[r&1]
は、2,4および6の場合はo
を、それ以外の場合はスペースを選択します。全てにおいて
、それは、ダイとしてr
プラスワンを印刷します。 r = 1
は2つのピップを与えますが、r = 6
の結果はピップになります。 (関数内の文字列の建物を包む)
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|
-----
これが正確に何であるそのためのコードを修正
はすべて
r
テストをインクリメントし、奇数/偶数のテストを反転する必要が私は探していた。ありがとうございました –