使用 while 循环来处理列表中的 return 个字符同时还受其他条件约束的函数
function that uses a while loop to return characters in a list while also being subject to other conditions
前言,因为我正在学习使用while循环,所以我想用只用if语句、in语句和while循环来编写这个函数。我想我可能还需要使用 break 或 continue。我不想使用 for 循环或列表理解形式。
函数本身应该看起来像 take_last(lst)
它通常应该包含一个单词列表,return是列表中删除了第一个和最后一个字符的最后一个值。
例如,
take_last[“Fish”, “Meat”, “Fruit”, “Cake”]
将 return “ak”
因为这是列表中删除字符“C”和“e”的最后一个单词。这部分功能比较简单。我认为可以用
来完成
return (lst[-1])[slice(1,-1)]
但是,它受制于两个不同的条件,这可能会使函数的编写变得困难。
- 如果列表中的第一个名字少于 3 个字符,函数将停止并且 return“完成”
即 take_list([“SH”, “Meat”])
将停在“SH”处,而不是 returns “finished”
.
- 否则,如果不满足此条件且第一个单词有 3 个或更多字符,函数将继续遍历列表,直到找到另一个少于 3 个字符的单词。然后它会在此时停止,并且 return 列表中的前一个字符删除了其中的第一个和最后一个字符。
即如果输入是 take_last([“Fish”, “Meat”, “Fruit”, “SH”, “Cake”])
函数在“SH”处中断,而不是 “rui”
是 returned。 (没有'F
的水果
我在尝试什么
虽然我不确定如何构建 while 循环,但我已经编写了满足第一个条件的函数。
def take_last(lst):
if len(lst[0]) < 3:
return "finished"
else:
return (lst[-1])[slice(1,-1)]
take_last([“Fish”, “Meat”, “Fruit”, “Cake”])
将 return “ake”
和take_last([“Fi”, “Meat”, “Fruit”, “Cake”])
将return
“finished”
我知道在我的函数中的某处我需要一个 elif 语句后跟一个 while 循环,但我不确定这会是什么样子。任何帮助将不胜感激。
这是一个简单的方法。
def take_last(lst):
i = 0
while i < len(lst) and len(lst[i]) >= 3:
i += 1
if i == 0:
return "finished"
else:
return lst[i-1][1:-1]
只要索引 i
处的字符串至少有 3 个字符长,while
循环就会重复。所以当它完成时,i
包含第一个短字符串的索引;如果没有短元素,它将包含列表的长度。
如果第一个字符串很短,i
将是 0
,所以它前面没有元素,我们 return finished
.
否则我们return i
之前的元素切片。当没有短元素时,这将是最后一个元素。
所以 return删除第一个和第三个字符的最后一个单词是我们能做的最后一件事。它之前可能有一些条件可能导致函数提前停止。
所以,现在我们知道什么成为我们的默认值 return
return (lst[-1])[slice(1,-1)]
同样,您检查的第一个条件也是正确的。这样就修复了我们的起始 if
.
if len(lst[0]) < 3:
return "finished"
现在是条件 2。我们可以在 else
子句中解决这个问题。我们需要遍历列表以查找少于 3 个字符的单词。如果我们找到它,我们 return 截断后它之前的元素。
else:
i = 1
while (i < len(lst)):
if len(lst[i]) < 3:
return (lst[i-1])[slice(1,-1)]
i += 1
一切都放在一起:
def take_last(lst):
if len(lst[0]) < 3:
return "finished"
else:
i = 1
while (i < len(lst)):
if len(lst[i]) < 3:
return (lst[i-1])[slice(1,-1)]
i += 1
return (lst[-1])[slice(1,-1)]
您可以使用常规 for
循环轻松完成此操作,对我来说,感觉比使用 while
循环更自然:
def take_last(lst):
prev = None
for val in lst:
if len(val) < 3:
break
prev = val
if prev is None:
return "finished"
else:
return prev[1:-1]
前言,因为我正在学习使用while循环,所以我想用只用if语句、in语句和while循环来编写这个函数。我想我可能还需要使用 break 或 continue。我不想使用 for 循环或列表理解形式。
函数本身应该看起来像 take_last(lst)
它通常应该包含一个单词列表,return是列表中删除了第一个和最后一个字符的最后一个值。
例如,
take_last[“Fish”, “Meat”, “Fruit”, “Cake”]
将 return “ak”
因为这是列表中删除字符“C”和“e”的最后一个单词。这部分功能比较简单。我认为可以用
return (lst[-1])[slice(1,-1)]
但是,它受制于两个不同的条件,这可能会使函数的编写变得困难。
- 如果列表中的第一个名字少于 3 个字符,函数将停止并且 return“完成”
即 take_list([“SH”, “Meat”])
将停在“SH”处,而不是 returns “finished”
.
- 否则,如果不满足此条件且第一个单词有 3 个或更多字符,函数将继续遍历列表,直到找到另一个少于 3 个字符的单词。然后它会在此时停止,并且 return 列表中的前一个字符删除了其中的第一个和最后一个字符。
即如果输入是 take_last([“Fish”, “Meat”, “Fruit”, “SH”, “Cake”])
函数在“SH”处中断,而不是 “rui”
是 returned。 (没有'F
我在尝试什么
虽然我不确定如何构建 while 循环,但我已经编写了满足第一个条件的函数。
def take_last(lst):
if len(lst[0]) < 3:
return "finished"
else:
return (lst[-1])[slice(1,-1)]
take_last([“Fish”, “Meat”, “Fruit”, “Cake”])
将 return “ake”
和take_last([“Fi”, “Meat”, “Fruit”, “Cake”])
将return
“finished”
我知道在我的函数中的某处我需要一个 elif 语句后跟一个 while 循环,但我不确定这会是什么样子。任何帮助将不胜感激。
这是一个简单的方法。
def take_last(lst):
i = 0
while i < len(lst) and len(lst[i]) >= 3:
i += 1
if i == 0:
return "finished"
else:
return lst[i-1][1:-1]
只要索引 i
处的字符串至少有 3 个字符长,while
循环就会重复。所以当它完成时,i
包含第一个短字符串的索引;如果没有短元素,它将包含列表的长度。
如果第一个字符串很短,i
将是 0
,所以它前面没有元素,我们 return finished
.
否则我们return i
之前的元素切片。当没有短元素时,这将是最后一个元素。
所以 return删除第一个和第三个字符的最后一个单词是我们能做的最后一件事。它之前可能有一些条件可能导致函数提前停止。
所以,现在我们知道什么成为我们的默认值 return
return (lst[-1])[slice(1,-1)]
同样,您检查的第一个条件也是正确的。这样就修复了我们的起始 if
.
if len(lst[0]) < 3:
return "finished"
现在是条件 2。我们可以在 else
子句中解决这个问题。我们需要遍历列表以查找少于 3 个字符的单词。如果我们找到它,我们 return 截断后它之前的元素。
else:
i = 1
while (i < len(lst)):
if len(lst[i]) < 3:
return (lst[i-1])[slice(1,-1)]
i += 1
一切都放在一起:
def take_last(lst):
if len(lst[0]) < 3:
return "finished"
else:
i = 1
while (i < len(lst)):
if len(lst[i]) < 3:
return (lst[i-1])[slice(1,-1)]
i += 1
return (lst[-1])[slice(1,-1)]
您可以使用常规 for
循环轻松完成此操作,对我来说,感觉比使用 while
循环更自然:
def take_last(lst):
prev = None
for val in lst:
if len(val) < 3:
break
prev = val
if prev is None:
return "finished"
else:
return prev[1:-1]