我正在教自己python,但我真的陷入了这个问题。它要求“编写一个接受奇数列表作为输入的函数。循环遍历奇数列表并将每个变为偶数。将每个偶数存储在一个新列表中并返回该新列表。”
我对问题的后半部分感到满意,但只是让输入成为奇数而苦苦挣扎。
这是我到目前为止所写的内容,它适用于您提交的任何奇数列表,例如([1,3,5])并且当你以偶数开头时它起作用,例如([2,3,5])但是当偶数位于列表中间时,我无法使其工作,例如([1,2,3]) - 我希望它打印这个不能做。
def odd_to_even(x):
for i in x:
if i %2 == 0:
print('This is not an odd number')
break
else:
list = []
for n in x:
list.append(n -1)
return list
答案 0 :(得分:3)
我同意@jonrsharpe,@ ShadowRanger和@dezeze的评论,你可能不需要包括测试,但它不会受到伤害。我会在这里使用@ deceze的行进行检查。请记住,您必须使用它在列表外部声明,否则循环将在每次迭代时重置它。更好的是更改名称以使事情更清楚。
def odd_to_even(input_list):
if any(i % 2 == 0 for i in input_list): raise ValueError
output_list = []
for i in input_list:
output_list.append(i - 1)
return output_list
合并@ deceze的优秀单行并保持验证:
def odd_to_even(input_list):
if any(i % 2 == 0 for i in input_list): raise ValueError
return [i - 1 for i in input_list]
你在评论中询问双循环是多么奇怪,所以我想在这里添加一个小解释。有时你想在循环中有一个循环,但这不是那种情况之一。你只有一个列表,在这种情况下循环遍历它就足以让你:
通过在第一个循环内循环第二次,每次循环遍历列表时,最终会循环遍历列表。也许那句话令人困惑。假设您的输入列表为[1, 3, 5]
。通过在循环中使用循环,您最终会创建一个新列表以输出3次,因为您将为输入中的每个项创建一次输出。我希望这有助于为你清理它。