0

我有一个打印乘法表的程序。

def print_tables(input):
    for i in xrange(1,11):
        print "%s x %s = %s" %(input, i, input*i)

user_input = raw_input("What do you want multiplied ten fold? ")

if(user_input.isdigit()):
    print_tables(int(user_input))

else:
    print_tables(user_input)

如果用户输入一个字符串"a",我希望输出是:

a x 1 = a
a x 2 = aa
a x 3 = aaa
a x 4 = aaaa
a x 5 = aaaaa
a x 6 = aaaaaa
a x 7 = aaaaaaa
a x 8 = aaaaaaaa
a x 9 = aaaaaaaaa
a x 10 = aaaaaaaaaa

在和块中调用print_tables函数对我来说确实有点多余。ifelse

print_tables无论参数类型如何,Python 中有没有更好的方法来调用函数?

4

3 回答 3

3
print_tables(int(user_input) if user_input.isdigit() else user_input)
于 2012-09-21T07:34:45.300 回答
3

一种好方法是:

if user_input.isdigit():
    user_input = int(user_input)

print_tables(user_input)

也就是说,有一个电话,但将不同的案例集中到一个变量中。

于 2012-09-21T07:42:22.460 回答
1
def mul(x, y):
    try:
        return int(x) * y
    except ValueError:
        return x * y

def print_tables(input):
    for i in xrange(1,11):
        print "%s x %s = %s" %(input, i, mul(input, i))

user_input = raw_input("What do you want multiplied ten fold? ")
print_tables(user_input)

解释:print_tables它本身不是类型感知的,也就是说,它在不同参数的类型上没有不同的行为。应该是多态的乘法。因此,pythonic 的方法是明确这一点。

再想一想,如果你有一个函数让你对如何调用它摸不着头脑,不要试图以任何一种方式解决问题。只需消除该功能!

def _print_table(s):
    for i in xrange(1,11):
        print "%s x %s = %s" %(s, i, i * s)

def print_str_table(s):
    return _print_table(str(s))

def print_int_table(s):
    return _print_table(int(s))

user_input = raw_input("What do you want multiplied ten fold? ")
if user_input.isdigit():
    print_int_table(user_input)
else:
    print_str_table(user_input)

正如他们所说,

放弃任何让你怀疑的东西,而放弃任何让你怀疑的东西

于 2012-09-21T08:16:35.737 回答