2020-04
10

判断a是不是b的幂

By xrspook @ 23:59:43 归类于: 扮IT

Think Python 2第六章的某道原题是这样的:

Exercise 4: A number, a, is a power of b if it is divisible by b and a/b is a power of b. Write a function called is_power that takes parameters a and b and returns True if a is a power of b. Note: you will have to think about the base case.

版本A的中文翻译

练习4:一个数字a为b的权(power),如果a能够被b整除,并且a/b是b的权。写一个叫做is_power 的函数接收a和b作为形式参数,如果a是b的权就返回真。注意:要考虑好基准条件。

版本B的中文翻译

习题6-4:当数字a能被b整除,并且a/b是b的幂时,它就是b的幂。编写一个叫is_power的函数,接受两个参数a和b,并且当a是b的幂时返回True。注意:你必须要想好基础情形。

研究这道题到底在说什么,我纠结了起码1个小时。什么叫做权?幂来幂去,还有“它”,你真的知道那指代的是什么?我相信翻译这本书的人都一定是编程老手,但你们真的有琢磨过中文表述是否恰当吗?幸好我没买人民邮电出版社出版的Think Python 2中文版,貌似从某些页面看来,翻译也会让我非常吐槽。

还是直接看英文原文比较好懂,那段话我会这么翻译:

如果a能被b整除,且a/b是b的幂,那么a是b的幂(例如:2**3=8,即2的3次幂等于8,a=8, b=2)。编写一个名叫is_power的函数,以a和b为形式参数接收数据,如果a是b的幂,返回True。注意:要考虑好基准条件。

研究这道题在说什么研究了好长时间,随便输入几个显而易见的测试数据也挺顺利, 但要把情况想周全貌似很不简单。a == 0的情况有人想到了,但万一作死的写了b == 0呢!测试过好几个网友的编程,b == 0几乎全部挂了…… 我承认,这样测试过分了。

1
2
3
4
5
6
7
8
9
10
11
12
def is_power(a, b):
    if a == 0 or b == 0 or a%b != 0: # a和b的特殊情况先杀死
        return False
    elif a == 1 or a == b: 
        return True
    else:        
        return is_power(a/b, b) # 被除数a为0会死循环,除数b不能为0
a = 4 # int(input('a is '))
b = 2 # int(input('b is '))
print('a =', a)
print('b =', b)
print(is_power(a, b))
© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress