Someone here is playing codes and using hacking tricks to minimize the amount of code used.
<
- regular comparison operator; it returns True
or False
based on two operands. The Python bool
type is a subclass of int
and True
is 1
, False
is 0
when interpreted as integers. As such, C[r<1]
either selects C[0]
or C[1]
.
&
is a bit-wise operator, not a comparison operator; & 1
masks the number to the last bit, effectively testing whether the number is odd or even (the last bit is set or not). Therefore, if r
is odd, C[1]
, otherwise C[0]
is.
Abort this:
C
is a string with the characters o
and a spaceC[r<1]
chooses either o
or a space based on the fact that it is less than 1. It never ( random.randint(1,6)
provides this), so there is always o
. This is apparently a bug or oversight in the code.C[r<3]
selects a space for 1 and 2, and o
otherwise.C[r<5]
selects o
for 5 or 6, a space otherwise.C[r&1]
selects o
for 2, 4, and 6, a space otherwise.
Altogether, it prints r
plus one as a stamp. r = 1
gives two pips, and r = 6
gives you seven points, perhaps how stylized?
To fix the code, this requires an increment of all r
tests and inversion of the odd / even test:
s = '-----\n|' + C[r<2] + ' ' + C[r<4] + '|\n|' + C[r<6] print(s + C[1-r&1] + s[::-1])
Demonstration (completion of a string in a function):
>>> 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| ----- ----- |oo| | | |oo| ----- ----- |oo| | o | |oo| ----- ----- |oo| |oo| |oo| -----
source share