[英]Error:string index out of range, defining a function
由於我是python的完整入門者,因此我正在codingbat.com上練習編碼,這是練習之一:
給定一個字符串,返回一個由其他所有字符組成的新字符串(從第一個字符開始),因此“ Hello”產生“ Hlo”。
這是我嘗試定義函數string_bits(str)的嘗試:
def string_bits(str):
char = 0
first = str[char]
for char in range(len(str)):
char += 2
every_other = str[char]
return (first + every_other)
運行代碼會出現錯誤。 我的代碼有什么問題?
一種不同的方法,並帶有解釋:
如果需要處理包含空格的句子,則可以使用切片來實現。 在字符串上切片的方式為:
[start_of_string:end_of_string:jump_this_many_char_in_string]
因此,您只想每隔一個字母跳一次,因此您可以執行以下操作:
[::2]
前兩個為空,因為您只想每隔一個字符就執行一次。
因此,您可以在一行中完成此操作,如下所示:
>>> " ".join(i[::2] for i in "Hello World".split())
'Hlo Wrd'
上面剛剛發生的是,我們將我們的字符串作為字符串,使用split
使其成為列表。 默認情況下,拆分將在一個空格上拆分,因此我們將擁有:
["Hello", "World"]
然后,我們將從那里開始使用一種理解,遍歷列表的每個項目,一次給我們一個字,然后從那里我們將按照i[::2]
進行所需的字符串操作。
的理解是:( 文檔 )
i[::2] for i in "Hello World".split()
最后,我們調用"".join
( doc ),它將現在將列表更改回字符串,以最終為我們提供輸出:
"Hlo Wrd"
查看文檔中的切片部分: https : //docs.python.org/3/tutorial/introduction.html
問題是char + = 2返回的值大於len(str),因為len(str)-1(范圍)+ 2比字符串長。 您可以這樣做:
def string_bits(string):
if len(string) == 2:
return string[0]
result = ''
for char in range(0,len(string),2):#range created value sin increments of two
result += string[char]
return result
更簡潔的方法是:
def string_bits(string):
return string[::2]
您應該避免使用“ str”作為變量名,因為它是Python的保留字。
對我來說還可以:
您可以使用以下代碼實現所需的功能:
def string_bits(my_str):
result = ""
for char in range(0, len(my_str), 2):
result += my_str[char]
return result
您得到的錯誤意味着您正在嘗試獲取少於n個字符的字符串的第n個字母。
另一個建議是,字符串是Python中的Sequence-types,這意味着它們具有很多內置功能,可以准確地執行您在此處嘗試執行的操作。 有關更多信息,請參見內置類型-Python 。但是知道序列類型支持切片-也就是說,從序列中選擇元素。
因此,您可以像這樣對字符串進行切片:
def string_bits(input_string):
return input_string[::2]
含義“將我的input_string從開頭(:)到結尾(:)並選擇每隔一(2)個元素”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.