Python 错误:字符串索引超出范围,正在定义函数
我在codingbat.com上练习编码,因为我是python的完全初学者,下面是其中一个练习: 给定一个字符串,返回一个新字符串,该字符串由以第一个字符开头的每个字符组成,因此“Hello”生成“Hlo” 下面是我定义函数字符串_位(str)的尝试:Python 错误:字符串索引超出范围,正在定义函数,python,python-3.5,Python,Python 3.5,我在codingbat.com上练习编码,因为我是python的完全初学者,下面是其中一个练习: 给定一个字符串,返回一个新字符串,该字符串由以第一个字符开头的每个字符组成,因此“Hello”生成“Hlo” 下面是我定义函数字符串_位(str)的尝试: 运行代码会产生错误。我的代码怎么了?问题是char+=2返回的值大于len(str),因为len(str)-1(范围)+2比字符串长。你可以做: def string_bits(string): if len(string) == 2:
运行代码会产生错误。我的代码怎么了?问题是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保留的字 您得到的错误意味着您试图获取少于n个字符的字符串的第n个字母 另一个建议是,字符串是Python中的序列类型,这意味着它们有许多内置功能,可以完成您在这里尝试的操作。有关更多信息,请参见,但要知道序列类型支持切片,即从序列中选择元素 因此,您可以像这样切割字符串:
def string_bits(input_string):
return input_string[::2]
意思是“将我的输入字符串从开始(:)到结束(:)并选择每秒钟(2)个元素”一种不同的方法,并附有说明: 如果你需要处理一个包含空格的句子,你可以通过切片来完成。在字符串上,切片的工作方式如下:
[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]
执行所需的字符串操作
理解是:()
最后,我们调用“”.join
(),它现在将把我们的列表更改回一个字符串,以最终为我们提供输出:
"Hlo Wrd"
查看文档中的切片部分:好的,对我来说:
i[::2] for i in "Hello World".split()
"Hlo Wrd"
def string_bits(my_str):
result = ""
for char in range(0, len(my_str), 2):
result += my_str[char]
return result