编写一个名为stop_at_z的函数,它遍历一个字符串列表。使用while循环,将每个字符串附加到新列表,直到出现的字符串为“z”。该函数应返回新列表。
def stop_at_z(str):
d = 0
x=[]
str1 = list(str)
while True :
if str1[d] != 'Z' :
x.append(str1[d])
d+=1
if str1[d] == 'Z' :
break
return x
使用while循环,将每个字符串附加到新列表,直到出现的字符串为“z”。该函数应返回新列表。
你是这样做的,搜索“z”区分大小写,尝试类似:
If str1[d].strip().lower() == “z”
它剥离了前导和尾随空格,然后将str1元素转换为小写(这两个都只返回修改后的字符串,因此原始内容保持不变)并将其与小写字母z进行比较
您收到此错误是因为如果字符串中没有大写的“Z”,d
会无限增加。相反,您应该只在未达到输入字符串的全长时停留在while
循环中:
def stop_at_z(inputstr):
d = 0
x=[]
str1 = list(inputstr)
while d<len(inputstr) :
if str1[d] == 'z' :
break
else:
x.append(str1[d])
d+=1
return x
请注意,您可以使用takewhile()
from the itertools
module实现相同的功能:
from itertools import takewhile
def stop_at_z(inputstr):
return list(takewhile(lambda i: i != 'z', inputstr))
print(stop_at_z("hello wzrld"))
输出:
['h', 'e', 'l', 'l', 'o', ' ', 'w']
如果字符串'z'永远不在列表中怎么办? 然后它继续增加索引并最终遇到错误。
只是将循环限制为列表的长度应该有所帮助。
def stop_at_z(str):
d = 0
x=[]
str1 = list(str)
for d in range(0,len(str1)) :
print(d)
if str1[d] != 'Z' :
x.append(str1[d])
else:
break
return x