[英]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.