# Python: Numbers (Solutions)¶

1. Solutions:

a = 12
b = 23
print a, b
print type(a), type(b)          # int, int

c = 34L
d = 45L
print c, d
print type(c), type(d)          # long, long

x = 21.0
y = 14.f
print x, y
print type(x), type(y)          # float, float

2. Solutions:

print a, b, c, d, x, y

print a, ";", b, ";", c, ";", ...

3. Solutions:

# simple operations:

product = a * b                # int * int
print product
print type(product)            # int

difference = c - d              # long - log
print difference
print type(difference)          # long

# division and integer division between various numeric types:

quotient = x / y               # float / float
print quotient
print type(quotient)           # float

result = a // b              # int // int
print result
print type(result)           # int

result = c // d              # long // long
print result
print type(result)           # long

result = x // y              # float // float
print result
print type(result)           # float

# more complex examples, where the result type
# is the more complex type between the types
# of the operands:

result = a * c               # int * long
print result
print type(result)           # long

result = b * y               # int * float
print result
print type(result)           # float

result = x * d               # float * long
print result
print type(result)           # float

# here the type is automatically defined
# based on the magnitude of the result:

result = 2**0                # int**int
print result
print type(result)           # int

result = 2**0                # int*int
print result
print type(result)           # *** long!!! ***

result = 2**1.2              # int*float
print result
print type(result)           # float

result = 2**-2               # int*int
print result
print type(result)           # *** float!!! ***

result = 4**0.5              # int*float
print result
print type(result)           # float

result = 2**0.5              # int*float
print result
print type(result)           # float

4. Solutions:

>>> print 10 / 12
0
>>> print 10 / 12.0
0.833333333333
>>> print 10 // 12
0
>>> print 10 // 12.0
0.0


As you see, integer division is consistent with types: when it is applied to floats, the result is also a float, but truncated to the integer 0.

5. Solutions:

>>> 10 % 3
1
>>> 10 % 3.0
1.0


As you see, % returns the remainder of 10 / 3:

10 = 3*3 + 1
#          ^
#       remainder


Operand types don’t influence the value of the result, only its type.

6. Solution:

pi = 3.141592
r = 2.5

circumference = 2 * pi * r
print circumference

area = 2 * pi * r**2
print area

area = 2 * pi * r * r
print area

volume = (4.0 / 3.0) * pi * r**3
print volume


Be careful: 4 / 3 != 4.0 / 3.0.

7. Solution:

a, b = 100, True

a2 = a
b2 = b
b = a2
a = b2

print a, b


or:

a, b = 100, True

x = a
a = b
b = x

print a, b

8. Solution:

gene1_start, gene1_end = 10, 20
gene2_start, gene2_end = 30, 40

# handy pictogram:
#
# 5'                            3'
# ~~~~~xxxxxxxx~~~~~xxxxxxx~~~~~>
#     10      20   30     40
#      \______/     \_____/
#       gene_1       gene_2

# two options
condition_1 = (10 <= pos <= 20)
condition_1 = (pos >= 10 and pos <= 20)

condition_2 = (30 <= pos <= 40)

condition_3 = (10 <= pos <= 40)

# two options
condition_4 = condition_3 and not (condition_1 or condition_2)
condition_4 = (20 <= pos <= 40)

condition_5 = pos < 10 or pos > 40
# Be careful:
#
#   pos < 10 and pos > 40
#
# doesn't make sense: it's always False!

condition_6 = condition_1 or condition_2

condition_7 = (0 <= pos <= 20)


Test the code with multiple values of position, in order to check that conditions have been correctly formulated: True when the position satisfies the condition, and False otherwise.

9. Solution:

all_the_three = t and u and v

t_or_u_but_not_both = (t or u) and not (t and u)

# NOTE: here backslash at the end of lines are used to start a new line, you can ignore them.

one_of_three_false = \
(t and u and not v) or \
(t and not u and v) or \
(not t and u and v)

one_of_three_true = \
(t and not u and not v) or \
(not t and u and not v) or \
(not t and not u and v)


Again, the code needs to be tested with different values of t, u and v. There are 8 possible combinations:

t, u, v = False, False, False
t, u, v = False, False, True
t, u, v = False, True, False
t, u, v = False, True, True
# ...

10. Solution:

replication_time = 20
total_time= 480

final_bacteria = 2**(total_time//replication_time)
print final_bacteria