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_plus_abs_b(-1, 4)
3
>>> a_plus_abs_b(-1, -4)
3
"""
if b < 0:
f = sub
else:
f = add
return f(a, b)
a+b的绝对值,不能使用abs函数,定义一个新的函数f,若b<0,则f=sub,若b>0,则f=add最后返回f(a,b).
def two_of_three(i, j, k):
"""Return m*m + n*n, where m and n are the two smallest members of the
positive numbers i, j, and k.
>>> 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
"""
return add(min(i,j,k)*min(i,j,k),min(max(i,j),max(i,k),max(j,k))*min(max(i,j),max(i,k),max(j,k)))
此题限制较多,由于不能定义新的变量只能使用i,j,k三个变量,使用min和max函数要找出这三个数中的两个较小值,最小值直接使用min(i,j,k)即可找出,而第二小值可以先两两比较较大值,再再返回的三组较大值中找出最小值,即可找到第二小值。
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 ***"
for i in range(n-1,0,-1):
if n % i == 0:
return i;
此题要找出最大公因数,即可倒序循环,判断是否为因数输出即可
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
>>> b = hailstone(1)
1
>>> b
1
"""
"*** YOUR CODE HERE ***"
count = 1
while n != 1:
print(n)
count += 1
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
print(n)
return count
由于count至少有一个,即本身,则在定义时,就把他初始值设置为1,然后按要求循环,加1即可。