Python 函数不';与测试结果不符
我应该运行文件Python 函数不';与测试结果不符,python,unit-testing,Python,Unit Testing,我应该运行文件assign2\u partI\u test\u文件,并得到下面的结果。我就是不能得到正确的结果 我的代码: def to_string(my_list, sep=', '): result = ' ' msg = 'List is: ' for char in my_list: str_list1 = ['r', 'i', 'n', 'g', 'i', 'n', 'g'] if my_list == str_list1:
assign2\u partI\u test\u文件
,并得到下面的结果。我就是不能得到正确的结果
我的代码:
def to_string(my_list, sep=', '):
result = ' '
msg = 'List is: '
for char in my_list:
str_list1 = ['r', 'i', 'n', 'g', 'i', 'n', 'g']
if my_list == str_list1:
result = msg + sep.join(my_list)
return result
我的输出:
Start testing!
length Test
Start Testing!
length Test
List length: 7
List length: 0
to_string Test
List is: r, i, n, g, i, n, g
List is: r-i-n-g-i-n-g
None # (THIS IS SUPPOSED TO DISPLAY: List is: )
测试代码:
import list_function
print("\nStart Testing!")
str_list1 = ['r', 'i', 'n', 'g', 'i', 'n', 'g']
str_list2 = ['r', 'e', 'd']
empty = []
print("\nlength Test")
print("List length:", list_function.length(str_list1))
print("List length:", list_function.length(empty))
print("\nto_string Test")
string = list_function.to_string(str_list1)
print(string)
string = list_function.to_string(str_list1, sep='-')
print(string)
print(list_function.to_string(empty))
print("\nEnd Testing!\n")
我将以评论的形式回答这个问题:
def to_string(my_list, sep=', '):
result = ' '
# only needed because of the odd return
msg = 'List is: '
# fine, but you only use it once, so why not put the literal there?
for char in my_list:
# why loop?
str_list1 = ['r', 'i', 'n', 'g', 'i', 'n', 'g']
# hard-coded the test...
if my_list == str_list1:
# ...so you guarantee it only works for one input - why?!
result = msg + sep.join(my_list)
# this line is useful
return result
# but only inside the for loop?!
您可以将函数缩短为一行(您几乎已经编写了!),这样做的好处是,它将变得毫无意义,并且可以正常工作
下面是一个与函数输出匹配的简化函数:
def to_string(my_list, sep=', '):
if my_list == ['r', 'i', 'n', 'g', 'i', 'n', 'g']: # test case
return 'List is: ' + sep.join(my_list)
elif len(my_list) > 0: # any other non-empty list
return ' '
else: # empty list
return None
这能让事情更清楚吗?这三种情况之间真的应该有这么大(或任何)区别吗?为什么不在
elif
和else
部分编写其他条件?您为一个条件编写了代码,即仅当my_list==str_list1
时。但在其他情况下会发生什么呢?例如empty
列表?你可能也想检查一下
def to_string(my_list, sep=', '):
result = ' '
msg = 'List is: '
str_list1 = ['r', 'i', 'n', 'g', 'i', 'n', 'g']
if my_list == str_list1:
result = msg + sep.join(my_list)
elif my_list == []: ## you can also use "len(my_list) == 0:"
result = msg
return result
现在,出现问题的原因是
None#(应该显示:List IS:)
是for
循环。for char in my_List:
仅在my_List
为非空时运行。但是,当您传递空列表时,for
循环将不会执行,因为它没有可迭代的内容 您已经得到了有用的测试代码,它清楚地向您显示了问题;如果输入为空列表,则代码不会执行正确的操作。那么你试着做些什么来修复它呢?请注意,您当前的代码只返回for
循环中中的任何内容;也许你应该仔细想想。好吧,我试了一天超过一半的时间。这是最接近的,我能达到预期的输出。@Macrick认真地看我的回答,如果你没有意图,就不要回答。真的不谢谢你。@Macrick你在期待什么?这不是一个代码编写服务,我试图强调你的错误。实际上,您已经编写了正确的代码,然后莫名其妙地用一堆毫无逻辑意义的东西将其包围起来。谢谢,我将进一步探索。Cheers@Macrick欢迎如果你认为我的回答对你有帮助,那么别忘了在离开时投票并接受它!:)