2016-11-01 15 views
-1

我想寫一個函數來確定一個字母是否出現在列表的某一行和列上。在列表中的這個位置上是否有一封信?

#Input: 

lst2 = [['.', 'W', 'W', 'E', 'E'], 
     ['.', '.', '.', '.', 'f'], 
     ['A', 'A', 'A', '.', 'f']] 

#Output: is_space_occupied(0, 1, lst2) should return True because 'W' is present on that spot 
     while is_space_occupied(1, 1, lst2) should return False because '.' is present on 
     that spot and not a letter. 

這是我的代碼至今:

def letter_on_spot(row,col,lst): 
A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 
for row in lst: 
    for col in lst: 
     if col == A: 
      return True 
     else: 
      return False 

編輯:我得到外面函數返回爲錯誤的返回true,我不知道如果我的功能才能正常工作

+0

那麼,有什麼問題呢? – MooingRawr

+0

我的代碼無法正常工作,並且出現錯誤我希望有人能夠看到可能出現的問題。我被告知這可以用2 for循環和if-else語句完成,但不能找出它 – warrior4223

+0

在你的問題中發佈你的錯誤。 – MooingRawr

回答

1

這裏有兩個問題。

首先,你循環不必要;您爲列表提供索引,因此您只需檢查帶有這些索引的值是否包含在字符串A內。不需要遍歷每個元素只是爲了檢查一個;索引名單lst

二,col == A將永遠失敗(除非col = 'ABCD..yz')。當您應該檢查A是否包含colin運算符時,您比較它們的值。

總之,你可以在你的功能更改爲:

def letter_on_spot(row,col,lst): 
    A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 
    return lst[row][col] in A 

,並得到想要的結果 - True/False基於給定索引的內容。

理想情況下,應執行一些錯誤檢查以便現在允許導致IndexError s的索引;玩的列表中是否有len,這樣的事情:

def letter_on_spot(row,col,lst): 
    A = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 
    if row >= len(lst) or col >= len(lst[row]): 
     return False  
    return lst[row][col] in A 

哪裏,試圖訪問lst之前,你檢查的範圍是可以接受的對列表lst的長度的長度測試子目錄lst[row]

+0

謝謝吉姆,這是完美的作品,但我怎麼能這個函數返回假,如果信件不在位置或者如果它是一個非字母字符 – warrior4223

+0

我真的建議使用'str.isalpha()'。意圖可以說是更清楚,並且沒有機會忘記一個或多個角色。 – rainer

+0

@ warrior4223如果一個字母不在'lst [row] [col]'指定的位置,你會因'in'檢查失敗而返回'False'。如果它是非字母字符?你的意思是標點符號? –

0

您可以使用索引來訪問列表元素:

x = [10, 11, 12, 13] 
x[1] # => 11 

同樣的作品列表的列表:

lst2 = [['.', 'W', 'W', 'E', 'E'], 
     ['.', '.', '.', '.', 'f'], 
     ] 
lst2[2] # => ['A', 'A', 'A', '.', 'f'] 
lst2[2][1] # => 'A' 

現在,所有你需要做的是檢查是否符號存在字符。 Python提供str.isalpha()爲:

lst2[0][1].isalpha() # => True 
lst2[1][1].isalpha() # => False 

注意str.isalpha()也將返回True字符串與一個以上的字符。如果這是值得關注的,只是檢查字符串的長度,你可以得到(例如"hello".isalpha()回報True。)使用len()

0

我不知道究竟是你錯了代碼,但更短的替代方案如下:

def letter_on_spot(row,col,lst): 
    return lst2[row][col].isalpha() 
+0

不需要額外的括號或調用'str'類的方法。 'return lst2 [row] [col] .isalpha()'會做。 –

+0

謝謝!我修改了它! – spyrostheodoridis

0

letter_on_spot(行,列,LST)有兩個整數(希望)和一個列表作爲輸入

讓過這一步一步:

for row in lst: 

相同LST說每個小名單

for col in lst: 

對於第一個中的每個較小列表而言都是如此,這是您的第一個問題;我們想通過行的元素,不LST

if col == A: 

假設我們解決了上述問題,是我們檢查,如果山坳是與A相同,或者我們檢查,如果山坳是一個

,我們可以用下面的訪問善堂的元素,並檢查其上書:

if lst[row][col] in A: 
    return True 
else: 
    return False 
相關問題