擅长:python、mysql、java
<pre><code>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)
</code></pre>
<p>解释:<code>print_tables</code>本身不支持类型,也就是说,它在不同参数的类型上没有不同的行为。乘法应该是多态的。所以,一个pythonic的方法就是把这个明确化。你知道吗</p>
<p>再想一想,如果你有一个函数,让你挠头如何调用它,不要试图解决这两种方法的问题。把那个功能去掉!你知道吗</p>
<pre><code>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)
</code></pre>
<p>就像他们说的</p>
<blockquote>
<p>Abandon anything that gives you doubt for what gives you no doubt</p>
</blockquote>