我正在编写codingbat.com上的编码,因为我是python的初学者,这是练习之一:
给定一个字符串,返回一个由第一个字符串组成的新字符串,所以“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)
运行代码会出错。我的代码出了什么问题?
答案 0 :(得分: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"]
然后,我们将从那里做的是使用理解,遍历列表中的每个项目,这将一次给我们一个单词,并从那里我们将执行所需的字符串操作{{1} }。
理解是:(documentation)
i[::2]
最后,我们调用i[::2] for i in "Hello World".split()
(doc),它现在将我们的列表更改回字符串,最后给我们输出:
"".join
查看文档中的切片部分:https://docs.python.org/3/tutorial/introduction.html
答案 1 :(得分:1)
问题是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的保留字。
答案 2 :(得分:1)
好的,对我来说:
您可以使用以下代码实现所需目的:
def string_bits(my_str):
result = ""
for char in range(0, len(my_str), 2):
result += my_str[char]
return result
答案 3 :(得分:0)
您获得的错误意味着您正在尝试获取少于n个字符的字符串的第n个字母。
答案 4 :(得分:0)
作为另一个建议,字符串是Python中的序列类型,这意味着它们具有许多内置功能,可以完全按照您在此处尝试的内容进行操作。有关更多信息,请参阅Built-in Types - Python,但要知道序列类型支持切片 - 即从序列中选择元素。
所以,你可以像这样切割你的字符串:
def string_bits(input_string):
return input_string[::2]
含义"从start(:)到end(:)取我的input_string并选择每秒(2)元素"