2016-08-28 2 views
-1

최근 Python 3.0을 사용하여 Collatz 추측의 분사를 시도했습니다. 이 프로그램은 양의 정수로 작동하지만 음의 정수에서는 작동하지 않습니다. 프로그램에서 나는 숫자가 음수인지 확인하고, 그렇다면 그것을 사각형으로 만들고, collatz 규칙을 따라 진행합니다. Unfortuanitly 그것은 오류 메시지를 제공합니다. 아래 코드 :Python 추측

import sys 

while True: 
    number = input("Enter any positive integer: ") 
    count = 0 
    negative = "-" 
    try: 
     int(number) 
    except ValueError: 
     print("Invalid Input...") 
     sys.exit(0) 
    else: 
     number = int(number) 
     ORIGINAL = number 
    while not number != 1: 
     count += 1 
     number ** 2 
     if number % 2: 
      number = 3*number+1 
     elif not number % 2: 
      number = number // 2 
     print(number) 
    while number != 1: 
     count += 1 
     if number % 2: 
      number = 3*number+1 
     elif not number % 2: 
      number = number // 2 
     print(number) 

    print("The number "+str(ORIGINAL)+" took "+str(count)+" calculations to reach 1") 

내 코드를 사용해 보시고, 파이썬 3과 sys 만 사용하십시오!

- 두꺼운!

+0

"작동하지 않을 것"보다 자세한 문제 설명을 제공해야합니다. 당신은 무엇을 기대 했습니까? 실제로 어떤 일이 일어 났습니까? 또한,이 코드 중 어느 것도 부정성을 검사하지 않으며, 'number가 아님! = 1 :'로 무엇을하려했는지 잘못 판단했습니다. – user2357112

+0

괜찮습니다. "while number! = 1 : – tcwissemann

+0

도 -1을 -2, -1, -2, -1로 입력하면 결과가 무한대가됩니다. 그것은 네거티브를 squar하지 않습니다. – tcwissemann

답변

1

Collatz 추측에 사용되는 매핑에서 양수 값은 항상 다른 양수 값으로 매핑됩니다. 그래서 당신은 당신 초기화의 일환으로 음의 값을 확인해야합니다

number = input("Enter any integer: ") 
count = 0 
try: 
    number = int(number) 
except ValueError: 
    print("Invalid Input...") 
    sys.exit(0) 
if number < 0: 
    number = number ** 2 

루프 while not number != 1:가 삭제 될 수 있습니다. number가 1 일 경우에만 실행됩니다 (이중 부정이 있음). 1을 입력하면이 루프가 한 번 실행되고 3 * 1 + 1이 number에 할당 된 다음 두 번째 루프가 시작됩니다. 즉,이 루프는 무의미합니다. 삭제하십시오. 할당이 없으므로 number ** 2 줄은 number 값을 변경하지 않습니다.