我有一个打印乘法表的程序。
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
和if
块中调用else
函数对我来说确实有点多余。
有没有更好的方法在Python中调用print_tables
函数而不考虑参数类型?
答案 0 :(得分:3)
print_tables(int(user_input) if user_input.isdigit() else user_input)
答案 1 :(得分:3)
一个好方法是:
if user_input.isdigit():
user_input = int(user_input)
print_tables(user_input)
也就是说,有一个电话,但将不同的案例汇集到一个变量中。
答案 2 :(得分: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)
正如他们所说,
放弃任何让你怀疑的东西