我正在学习使用Exercism在Python 3.x上进行编码。我必须编写条件代码(在辅助文件上)以根据主要函数发送的单词返回字符串:
用户功能:
def two_fer(name):
if name:
string = "One for " + name + ", one for me."
else:
string = "One for you, one for me."
return string
主要功能:
class TwoFerTest(unittest.TestCase):
def test_no_name_given(self):
self.assertEqual(two_fer(), 'One for you, one for me.')
def test_a_name_given(self):
self.assertEqual(two_fer("Alice"), "One for Alice, one for me.")
def test_another_name_given(self):
self.assertEqual(two_fer("Bob"), "One for Bob, one for me.")
问题是,对于主函数中的第一个条件,它会无条件调用two_fer()
,这会导致失败。
应该不修改主功能,仅通过用户功能可以解决问题吗?
谢谢。
答案 0 :(得分:2)
您可以更改:
def two_fer(name):
收件人:
def two_fer(name=None):
默认情况下将其命名为None
答案 1 :(得分:1)
如果为name
提供默认值"you"
,则可以在没有显式参数的情况下调用函数,并且完全摆脱if
语句。
def two_fer(name="you"):
return "One for " + name + ", one for me"
或更妙的是,
def two_fer(name="you"):
return "One for {}, one for me".format(name)
答案 2 :(得分:0)
您可以使用默认参数,即None(无),并检查函数是否接收到任何参数。
用户功能:
def two_fer(name = None):
if name != None:
string = "One for " + name + ", one for me."
else:
string = "One for you, one for me."
return string
如果在没有任何参数的情况下调用two_fer方法,则以上代码将执行else部分。
答案 3 :(得分:0)
使用如下所示的默认参数
def two_fer(name=None):
if name:
s = "One for " + name + ", one for me."
else:
s = "One for you, one for me."
return s
还有一个提示,请避免将变量名分配为关键字,例如就您而言,它是一个标准库,因此最好避免使用它。