2017-05-18 16 views
1
def is_reverse(word1, word2): 
    if len(word1) != len(word2): 
      return False 
      i = 0 
      j = len(word2) 

    while j > 0: 
        if word1[i] != word2[j]: 
          return False 
        i = i+1 
        j = j-1 

       return True 

is_reverse('pots', 'stop') 

我已經定義了上面的函數來檢查兩個給定的字是否相互匹配。Python中的縮進風格:反轉字功能

但是當我運行它時,它不斷提醒我縮進錯誤。

如何衡量在python中的縮進級別?

+0

這與縮進無關,但我認爲你想要做的是'j = len(word2) - '1'而不是'j = len(word2)'和'while j> = 0:'而不是'while'> 0:' – Silveris

回答

3

你可以看看Indentation Section in PEP8

在每個縮進層一般

使用4個空格。

(不要混合標籤和空格)。

當您啓動新塊的主體(例如,在您的if和`while)中時,請使主體相對於引入塊的行縮進4個空格。

所以,當你寫

if len(word1) != len(word2): 
    ... 
    ... 

如果一切發生的條件應該發生的,應該有4位相對if,例如。如果裏面還有另一個ifwhile,則會進一步增加其主體的縮進4個空格,等等。


作爲一個側面說明,注意,您可以檢查兩個詞是相互的反向匹配與

def is_reverse(word1, word2): 
    return word1 == reversed(word2) 
+1

或'word1 == word2 [:: - 1]' – Ludisposed

+0

@Ludisposed這就是正確 - 謝謝。 –

1

一般的規則是4空間縮進。

下面是適當的縮進的一個例子,在不改變原來的代碼:

def is_reverse(word1, word2): 
    if len(word1) != len(word2): 
     return False 
    i = 0 
    j = len(word2) 

    while j > 0: 
     if word1[i] != word2[j]: 
      return False 
     i = i+1 
     j = j-1 

    return True 
+0

對於OP的問題,這看起來確實是正確的格式。 –

1

在python壓痕問題,因爲它定義了哪個碼所屬一起(其完成,例如用其他語言的括號)。

因爲你的代碼是嚴重畸形的,請看看重新格式化代碼:

def is_reverse(word1, word2): 
    if len(word1) != len(word2): 
     return False 
    i = 0 
    j = len(word2)-1 

    while j >= 0: 
     if word1[i] != word2[j]: 
      return False 
     i = i+1 
     j = j-1 
    return True 

is_reverse('pots', 'stop') 
-> True 

通知我也改變j = len(word2)-1while j >= 0:,因爲長度x的字在位置字母0..x- 1。

提示:串逆轉可與切片符號和-1的步長大小來實現:

"pots"[::-1] == "stop" 
0

的用於在python壓痕水平空格數在語法上不重要的,它可以是任意數字(大多數情況下,每層使用2,4或8個空格),但它必須一致。如果一個塊之後因此,你必須回到你以前有相同的縮進級別,像這樣:

def is_reverse(word1, word2): 
    if len(word1) != len(word2): 
      return False 

    i = 0 
    j = len(word2) 

    while j > 0: 
        if word1[i] != word2[j]: 
          return False 
        i = i+1 
        j = j-1 

    return True 

is_reverse('pots', 'stop') 

此代碼不會引發IndentationError。當然,對於格式上的原因,這是很好的有一個恆定的縮進級別,像這樣:

def is_reverse(word1, word2): 
    if len(word1) != len(word2): 
     return False 

    i = 0 
    j = len(word2) 

    while j > 0: 
     if word1[i] != word2[j]: 
      return False 
     i = i+1 
     j = j-1 

    return True 

is_reverse('pots', 'stop') 

您的代碼也有一個邏輯上的錯誤,爲J的初始值應該比字符串的長度小於1 (由於基於零的索引),並一路下降到0,如下所示:

i = 0 
    j = len(word2) - 1 

    while j >= 0: 
     if word1[i] != word2[j]: 
      return False 
     i = i+1 
     j = j-1