2012-04-11 3 views
1

이것은 내 첫 번째 게시물입니다. 저는 파이썬과 프로그래밍에 익숙하지 않아 어디서 잘못되었는지 모르겠습니다. 이것은 Project Euler의 Problem # 52에 대한 해결책이었습니다 (아마도 최선의 방법은 아닙니다). 이 코드의 문제점은 올바른 대답을 얻었을 때 while 문이 중단되지 않는다는 것입니다. 그것은 그것을 잡을 것이고 정답으로 num을 시작한 경우에만 답을 줄 것입니다 : 142857,하지만 다른 것으로 초기화 할 때 그것은 142857을 바로 세는 것을 계속합니다. 이상한 것은 다른 정확한 답을하기 위해 똑같은 방법을 사용했습니다. 오일러 문제와 그 중 하나가 잘 작동합니다. 아무도 이것이 왜 여기서 일어나고 있는지 말해 줄 수 있습니까? 감사! x2,x3,x4,x5,x6 모두 같은 값 때문에진술서가 멈추지 않을 때까지

def digits(number): 
    return [int(x) for x in str(number)] 

def same_digits(): 
    num = 1 
    x2 = sorted(digits(num*2)) 
    x3 = sorted(digits(num*3)) 
    x4 = sorted(digits(num*4)) 
    x5 = sorted(digits(num*5)) 
    x6 = sorted(digits(num*6)) 

    while x2 != x3 != x4 != x5 != x6: 
     num += 1 
    print num 
+1

질문을 삭제하지 마십시오. 타인에게 유용 할 수 있습니다. 또한 아래의 모든 대답을 무효화합니다. – Hooked

+0

그래, 내가 그것을 삭제하려고하면 깨달았다. 그것을 복원 주셔서 감사합니다. Sven =) 죄송합니다, 저는 새내기입니다. –

답변

4

변수 내에서 x2 등은 루프 내에서 변경되지 않으므로 항상 초기 값을 유지합니다. num이 변경 될 때 해당 값을 다시 계산하려면 해당 코드를 루프로 이동해야합니다.

또한 비교 연산자 연쇄를 사용하고 있습니다.

x2 != x3 != x4 != x5 != x6 

표현은 아마 당신이 원하는하지 않은

x2 != x3 and x3 != x4 and x4 != x5 and x5 != x6 

에 해당합니다.

+0

ands는 문제가 아니었지만 첫 번째 부분은 문제가되지 않았습니다. 감사합니다 –

+0

@ JenCamara : 조건도 잘못, 나를 믿어. –

+0

그런데 왜 작동합니까? –

2

while 루프는 중단하지 않습니다. 루프에서는 num 만 변경됩니다.

또한 x2 != x3 != x4 != x5 != x6이 비명처럼 보입니다. 모든 번호가 서로 다른 경우 확인하려면 시도 :

len(set([x2,x3,x4,x5,x6])) != 5 

set에만 고유 한 값과 len 카운트이 "설정"의 크기를합니다. 더 나은 목록에 넣어, R을 말하고이된다 :

len(set(R)) != 5 

목록 이상 5 요소가있는 경우에 매우 편리합니다!

+0

OP는 실제로 'not x2 == x3 == x4 == x5 == x6'을 필요로합니다. –

+0

내 변수를 while 루프 안에 두지 않는 것이 문제였습니다. 내가 가지고 있었던 수표는 의도했던 것에 따라 작동한다. 당신이 묘사 한 방법이 내가 원하는 것을 할 수 있을지 확신하지 못합니다. 대답 해줘서 고마워. –

1

while 루프에서 xi 인수를 수정하지 않으므로 비교가 변경되지 않습니다.

관련 문제