簡體   English   中英

錯誤:字符串索引超出范圍,定義了一個函數

[英]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()

最后,我們調用"".joindoc ),它將現在將列表更改回字符串,以最終為我們提供輸出:

"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的保留字。

對我來說還可以:

  1. 您不應將str用作變量名,因為它是python內置函數(例如,用my_str替換str)
  2. 例如,“ Hello”長度為5,因此0 <= index <=4。在這里,您嘗試在for循環中訪問索引3 + 2 = 5(當char = 3時)。

您可以使用以下代碼實現所需的功能:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM