只允许函数中的奇数循环

时间:2016-09-27 13:07:15

标签: python list function for-loop

我正在教自己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

1 个答案:

答案 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. 确定列表中的所有数字是否为奇数(验证列表)
  2. 获取每个号码,进行修改,然后将其添加到输出列表
  3. 通过在第一个循环内循环第二次,每次循环遍历列表时,最终会循环遍历列表。也许那句话令人困惑。假设您的输入列表为[1, 3, 5]。通过在循环中使用循环,您最终会创建一个新列表以输出3次,因为您将为输入中的每个项创建一次输出。我希望这有助于为你清理它。