A Plus Abs B
from operator import add, sub
def a_plus_abs_b(a, b):
"""Return a+abs(b), but without calling abs.
>>> a_plus_abs_b(2, 3)
5
>>> a_plus_abs_b(2, -3)
5
>>> # a check that you didn't change the return statement!
>>> import inspect, re
>>> re.findall(r'^\s*(return .*)', inspect.getsource(a_plus_abs_b), re.M)
['return f(a, b)']
"""
if b < 0:
f = sub
else:
f = add
return f(a, b)
Two of Three
def two_of_three(x, y, z):
"""Return a*a + b*b, where a and b are the two smallest members of the
positive numbers x, y, and z.
>>> two_of_three(1, 2, 3)
5
>>> two_of_three(5, 3, 1)
10
>>> two_of_three(10, 2, 8)
68
>>> two_of_three(5, 5, 5)
50
>>> # check that your code consists of nothing but an expression (this docstring)
>>> # a return statement
>>> import inspect, ast
>>> [type(x).__name__ for x in ast.parse(inspect.getsource(two_of_three)).body[0].body]
['Expr', 'Return']
"""
return x**2+y**2+z**2 - max(x, y, z)**2
Largest Factor
def largest_factor(n):
"""Return the largest factor of n that is smaller than n.
>>> largest_factor(15) # factors are 1, 3, 5
5
>>> largest_factor(80) # factors are 1, 2, 4, 5, 8, 10, 16, 20, 40
40
>>> largest_factor(13) # factor is 1 since 13 is prime
1
"""
"*** YOUR CODE HERE ***"
factor = n - 1
while n > 0:
if n % factor == 0:
return factor
factor -= 1
If Function vs Statement
这道题的关键在于,我不满足条件了,函数是否还会被执行?
可以看到, with_if_dunction
中使用的是call expression
,即便cond
返回为False
,第二个函数·true_func()·还是会被执行
def cond():
"*** YOUR CODE HERE ***"
return False
def true_func():
"*** YOUR CODE HERE ***"
print(42)
def false_func():
"*** YOUR CODE HERE ***"
print(47)
Hailstone
def hailstone(n):
"""Print the hailstone sequence starting at n and return its
length.
>>> a = hailstone(10)
10
5
16
8
4
2
1
>>> a
7
"""
"*** YOUR CODE HERE ***"
count = 0
while n != 1:
count += 1
print(n)
if n % 2 == 1:
n = n * 3 + 1
else:
n //= 2
return count