繁体   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