2014-11-05 2 views
-1

Я должен запустить файл assign2_partI_test_file и получить результаты ниже. Я просто не могу получить правильные результаты.Функция не соответствует результатам тестирования

Мой код:

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") 
+0

Вашему вниманию предоставлен тестовый код, который четко показывает вам проблему; ваш код не подходит, если вход пустой список. Итак, что вы пытались сделать, чтобы исправить это? Обратите внимание, что ваш текущий код только 'возвращает' что-нибудь внутри цикла 'for'; возможно, вам стоит подумать об этом более осторожно. – jonrsharpe

+0

Хорошо, я пробовал больше, чем 1/2 дня. Это было самое близкое, я могу добраться до намеченного выхода. – Macrick

+0

@Macrick См. Мой ответ –

ответ

0

Я собираюсь ответить на этот вопрос более как обзор:

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 

это делает вещи яснее? Должна ли быть такая большая (или любая) разница между этими тремя случаями?

+0

Серьезно, не отвечайте, если у вас нет намерения. серьезно не спасибо. – Macrick

+0

@Macrick, что вы ожидали? Это не служба написания кода, и я попытался выделить ваши ошибки. Вы на самом деле написали правильный код, а затем необъяснимо окружили его кучей вещей, которые не имеют логического смысла. – jonrsharpe

+0

Хорошо, спасибо. Bye – Macrick

0

Почему вы не пишете других условий в 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 # (THIS IS SUPPOSED TO DISPLAY: List is:)for был цикл. for char in my_list: работает только тогда, когда my_list не пуст. Но когда вы проходили пустой список, цикл for не выполнялся, так как ему нечего было перебирать.

+0

Спасибо, IÍI исследуйте дальше. Приветствия – Macrick

+0

@Macrick Добро пожаловать. Если вы считаете, что мой ответ помог вам, тогда не забудьте упереться и принять его во время ухода! :) –

Смежные вопросы