2014-11-05 62 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 2014-11-05 08:08:53

+0

好吧,我嘗試了超過一天的一半。這是最接近的,我可以達到預期的輸出。 – Macrick 2014-11-05 08:40:00

+0

@麥克瑞克看到我的回答 – 2014-11-05 10:05:17

回答

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 2014-11-05 09:08:22

+0

@Macrick你期待什麼?這不是一個代碼寫作服務,我試圖強調你的錯誤。實際上你寫了正確的代碼,然後用一堆沒有邏輯意義的東西莫名其妙地包圍它。 – jonrsharpe 2014-11-05 09:11:34

+0

好的,謝謝。再見 – Macrick 2014-11-05 09:31:08

0

爲什麼不在elifelse部分寫下其他條件?你已經寫了一個條件,即只有當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 2014-11-05 11:52:31

+0

@Macrick歡迎。如果你認爲我的回答對你有幫助,那麼在離開時不要忘記注意並接受它! :) – 2014-11-05 11:54:30