2016-11-06 167 views
-1
def get_middle_character(odd_string): 
    variable = len(odd_string) 
    x = str((variable/2)) 
    middle_character = odd_string.find(x) 
    middle_character2 = odd_string[middle_character] 
    return middle_character2 



def main(): 
    print('Enter a odd length string: ') 
    odd_string = input() 
    print('The middle character is', get_middle_character(odd_string)) 

main() 

我需要弄清楚如何打印給定奇數長度字符串中的中間字符。但是當我運行這個代碼時,我只能得到最後一個字符。問題是什麼?獲取奇數長度字符串中的中間字符

+2

您的代碼是沒有意義的。你知道'x'是什麼嗎?什麼'str.find'呢?我建議你用例如[Python Tutor](http://pythontutor.com/visualize.html)。請注意,一旦你有中間字符的索引,你就完成了! – jonrsharpe

+0

您需要閱讀有關字符串方法的文檔,因爲您使用不正確。 'odd_string.find(x)'將返回'-1',因爲你正在搜索數字'variable/2'的字符串表示形式。因此,'.find'將返回-1,而'odd_string [middle_character]'將返回字符串的最後一個字符(按照Python的負向索引)。 –

回答

0

您需要根據字符串的索引和字符串切片簡單地訪問字符。例如:

>>> s = '1234567' 
>>> middle_index = len(s)/2 
>>> first_half, middle, second_half = s[:middle_index], s[middle_index], s[middle_index+1:] 
>>> first_half, middle, second_half 
('123', '4', '567') 

說明:

  • str[:n]:在第n個索引
  • str[n:]返回值::從第n個索引直到返回值返回從第0個索引字符串n-1個索引
  • str[n]名單末尾
1

您需要更仔細地考慮您的代碼實際在做什麼。讓我們做這一個例子:

def get_middle_character(odd_string): 

比方說,我們稱之爲get_middle_character('hello'),所以odd_string'hello'

variable = len(odd_string) # variable = 5 

一切都OK爲止。

x = str((variable/2)) # x = '2' 

這是明顯奇的第一件事 - 爲什麼你要在字符串'2'?這是中間字符的索引,你不是隻想要一個整數嗎?你也只需要一對括號,另一個是多餘的。

middle_character = odd_string.find(x) # middle_character = -1 

很明顯,你可以,因爲它不是str.find的子'2'odd_string,從來就不存在。 str.find如果找不到子字符串,則返回-1;你應該使用str.index來代替,當它找不到子字符串時,它會給你一個很好的清除ValueError

請注意,即使你正在尋找的中間人物,而不是中間字符的字符串化指數,你會惹上麻煩的str.find給出了在出現的子串第一指數,這可能不是你之後的一個(考慮'lolly'.find('l') ...)。

middle_character2 = odd_string[middle_character] # middle_character2 = 'o' 

作爲Python允許從序列的結束負索引,-1是最後一個字符的索引。

return middle_character2 # return 'o' 

你實際上可以簡化爲return odd_string[middle_character],並去除多餘的分配;你仍然有錯誤的答案,但從整潔的代碼(並沒有middle_character2,這是一個可怕的名字)。


希望你現在可以看到你出錯的地方,而且你應該怎麼做才能解決它。下次使用例如Python Tutor在這裏提問之前先調試你的代碼。

0

應該有如下:

def get_middle_character(odd_string): 
    variable = len(odd_string)/2 
    middle_character = odd_string[variable +1] 
    return middle_character