2016-09-27 3 views
1

저는 파이썬을 가르치기는하지만이 질문에 정말로 집착하고 있습니다. "홀수의리스트를 입력으로 받아들이는 함수를 작성하라. 홀수의리스트를 반복하고 각각을 짝수로 바꾼다. 각 짝수를 새로운리스트에 저장하고 새로운리스트를 반환하라."함수에서 홀수 번호의 루프 만 허용

질문의 후반 부분에 만족하지만 입력을 홀수로 허용하는 데 어려움이 있습니다.

내가 지금까지 작성한 내용은 다음과 같습니다. ([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 
+7

왜이 사건을 처리해야합니까? spec은 당신이 홀수의리스트를 얻는다 고 말합니다, 그래서 당신은 그렇지 않다면 거절 할 것을 요구하지 않는 한, 당신은 그것이 항상 참이라고 가정 할 수 있습니다. 또한 이상한 이중 루핑 작업이 진행됩니다 ('i in x'와'for n in x'). – jonrsharpe

+0

그 문제 성명서는 실제로 입력을 거부해야한다고 말하는 것은 아닙니다. 내 말은 할 수 있겠지만, API가 "홀수 목록 제공"이라고 말하면 발신자가 짝수를 제공하면 적어도 부분적으로는 그렇습니다. 파이썬 : "우린 모두 성인이야." – ShadowRanger

+1

일종의 단어는 "받아 들인다"라는 단어를 해석하는 방식에 달려 있습니다. 그것은 "거절"을 포함합니까? – deceze

답변

2

나는 @jonrsharpe, @ShadowRanger, 당신은 아마 테스트를 포함 할 필요가 없습니다 @deceze에 의한 의견에 동의하지만 해치지 않을 것입니다. 나는 그 체크를 위해 @ 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. 각각의 번호를 가지고 홀수 여부를 확인, 수정 출력 목록에 추가하십시오.

첫 번째 루프에서 두 번째 루핑을하면 목록을 반복 할 때마다 목록이 반복됩니다. 어구가 혼란 스러울 수도 있습니다. 입력 목록이 [1, 3, 5]이라고 가정 해 보겠습니다. 루프 내에서 루프를 사용하면 출력의 새 항목을 3 번 생성하게됩니다. 입력의 각 항목에 대해 한 번 출력을 생성하기 때문입니다. 나는 그것이 당신을 위해 그것을 정리하는 데 도움이되기를 바랍니다.

+2

이것은 초보자에게는 친숙 할 수는 없지만 ...'return i - 1 for i in x]'... – deceze

+2

아니면 홀수와 짝수 둘다 받아 들여야하고, 오류가 없다면, 그들은 변하지 않은 상태로 남는다.)'return in [i in x for i]' – ShadowRanger