Python의 Collatz 시퀀스

Jay Shaw 2023년10월10일
  1. Collatz 시퀀스 뒤의 프로그래밍 논리
  2. if-else를 사용하는 Python의 Collatz 시퀀스
  3. while 루프 및 예외 처리를 사용하는 Python의 Collatz 시퀀스
  4. 재귀를 사용하는 Python의 Collatz 시퀀스
  5. while 루프를 사용하는 Python의 Collatz 시퀀스
  6. 결론
Python의 Collatz 시퀀스

Collatz 시퀀스는 1로 끝나는 숫자의 수학적 시퀀스입니다. 숫자가 특정 작업 집합을 거칠 때 왼쪽 마지막 숫자는 1이어야 한다고 합니다.

이 기사에서는 주어진 숫자에 대해 Python에서 collatz 시퀀스를 찾는 프로그램을 작성하는 방법을 설명합니다.

Collatz 시퀀스 뒤의 프로그래밍 논리

Python에서 주어진 숫자의 collatz 시퀀스를 찾으려면 네 가지 작업을 따라야 합니다.

  1. 짝수인지 홀수인지 확인합니다.
  2. 짝수의 경우 프로그램은 숫자 n을 2로 나누어 인쇄합니다.
  3. 홀수의 경우 프로그램은 n에 3을 곱한 다음 1을 더하고 인쇄합니다.
  4. 프로그램은 숫자 n이 1로 감소했는지 확인합니다. 그렇지 않으면 다시 실행됩니다.

주어진 숫자 5에 대해 collatz 시퀀스는 -16, 8, 4, 2, 1이 됩니다.

다음 섹션에서는 Python에서 collatz 시퀀스를 표시하는 프로그램을 만드는 네 가지 방법을 설명합니다.

if-else를 사용하는 Python의 Collatz 시퀀스

아래 프로그램은 Python에서 collatz 시퀀스를 찾는 간단한 표현을 보여줍니다. 메소드 collatz_seq는 단일 매개변수 numb로 생성됩니다.

이 프로그램에서 사용되는 논리는 while 루프 내에서 if-else 문을 사용합니다. 처음에 프로그램은 메소드 collatz_seq 내에서 while 루프를 실행하여 변수 numb 내부의 값이 1인지 여부를 확인합니다.

변수 numb가 1이 아닌 경우 프로그램은 if-else 문을 사용하여 주어진 숫자가 짝수인지 홀수인지 찾기 위해 두 번째 검사를 실행합니다. if문 내에서 프로그램은 숫자를 2로 나눈 나머지가 있는지 확인합니다.

if numb % 2 == 0:
    pass

숫자가 짝수이면 프로그램이 2로 나누어서 인쇄합니다. 숫자가 홀수인 경우 프로그램은 numb % 2 == 1trueelif 문으로 이동합니다.

변수 numb에 3을 곱하고 1을 더합니다. 마지막으로 숫자가 인쇄됩니다.

if numb % 2 == 0:
    pass
elif numb % 2 == 1:
    numb = (numb * 3) + 1
    print(numb)

이 루프 시퀀스는 numb의 값을 1로 줄일 때까지 확인, 업데이트 및 출력 작업을 계속 수행하며, numb의 값이 1로 발견되면 while 루프가 종료됩니다.

마지막으로 collatz_seq 메서드가 호출되고 5가 인수 값으로 전달됩니다.

def collatz_seq(numb):
    while numb != 1:
        if numb % 2 == 0:
            numb = numb // 2
            print(numb)

        elif numb % 2 == 1:
            numb = (numb * 3) + 1
            print(numb)


collatz_seq(5)

입력 = 5에 대한 Python의 collatz 시퀀스는 다음과 같습니다.

16
8
4
2
1

while 루프 및 예외 처리를 사용하는 Python의 Collatz 시퀀스

앞의 예제는 Python에서 주어진 숫자의 collatz 시퀀스를 인쇄하는 프로그램을 보여주었습니다. 그러나 이 프로그램에는 충돌로 이어질 수 있는 많은 느슨한 끝이 있습니다.

예를 들어 numb 값에 문자열이 제공되면 프로그램이 충돌합니다. 마찬가지로 음의 정수가 입력으로 제공되면 프로그램이 충돌합니다.

프로그램은 이를 해결하기 위해 입력된 데이터를 필터링하는 안전 장치 절차를 가지고 있어야 합니다.

Python에서 collatz 시퀀스를 찾기 위해 이 프로그램에서 라이브러리 패키지 sys를 가져옵니다. sys 시스템 기능은 조건이 충족되면 프로그램을 종료합니다.

메소드 collatz_seq는 마지막 프로그램과 마찬가지로 매개변수 numb로 생성됩니다.

import sys
def collatz_seq(numb):

if-elif 문은 숫자가 짝수인지 홀수인지 확인합니다. 숫자가 짝수이면 숫자를 2로 나누고 새 숫자를 변수 value에 저장합니다.

숫자가 홀수이면 변수 value는 각각 3과 1을 곱하고 더한 값으로 저장됩니다.

if numb % 2 == 0:
    value = numb // 2
elif numb % 2 != 0:
    value = (3 * numb) + 1

마지막 프로그램과 달리 업데이트된 결과는 value 변수에 저장됩니다. if-elif 블록 다음에 두 개의 while 루프가 생성됩니다.

첫 번째 while 루프는 변수 value의 값이 1인지 확인한 다음 사례가 true인 경우 인쇄하고 루프를 종료합니다. value1이 아닌 경우 두 번째 while 루프는 value를 인쇄하고 numb 변수 내부에 복사합니다.

while value == 1:
    print(value)
    sys.exit()

while value != 1:
    print(value)
    n = value

마지막으로 collatz_seq 메서드는 numb 인수를 사용하여 재귀적으로 호출됩니다. 메소드는 value1로 줄어들 때까지 계속 호출한 다음 sys.exit() 함수를 사용하여 프로그램을 종료합니다.

return collatz_seq(numb)

collatz_seq 메서드 외부에서 사용자 입력을 받는 변수 number가 생성됩니다. 유효하지 않은 입력을 포착하기 위해 예외 처리 블록이 추가되었습니다.

try 블록 내에서 변수 number는 정수 입력으로 간주됩니다. if 문은 숫자가 음수인지 여부를 확인하는 데 사용됩니다.

true인 경우 숫자의 극성이 변경되고 적절한 메시지가 인쇄됩니다. 마지막으로 collatz_seq 메서드가 호출됩니다.

print('Enter a number: ')
try:
    number = int(input())
    if number < 0:
        number = abs(number)
        print("A negative number entered")
    collatz_seq(number)

except 블록 내에서 오류 메시지와 함께 정수 이외의 입력에 대해 ValueError가 발생합니다.

except ValueError:
    print('You must enter an integer type.')

전체 코드는 다음과 같습니다.

import sys


def collatz_seq(numb):
    if numb % 2 == 0:  # Remainder = 0, Checks for even number
        value = numb // 2
    elif numb % 2 != 0:  # Remainder = 1, Checks for odd number
        value = (numb * 3) + 1

    while value == 1:  # If value is 1
        print(value)
        sys.exit()  # Program exits

    while value != 1:  # The loop runs until the value is not 1.
        print(value)
        numb = value  # Value of value is copied to numb
        return collatz_seq(numb)


print("Enter a number: ")  # Input statement
try:
    number = int(input())  # Typecast as Integer Input
    if number < 0:
        number = abs(number)
        print("A negative number entered")
    collatz_seq(number)
except ValueError:
    print("You must enter an integer type.")

출력:

Enter a number:
10
5
16
8
4
2
1

유효하지 않은 입력의 경우:

Enter a number:
j
You must enter an integer type.

재귀를 사용하는 Python의 Collatz 시퀀스

이 프로그램은 다른 메서드 호출을 사용하여 Python에서 collatz 시퀀스를 찾습니다. with 블록은 프로그램이 주어진 횟수만큼 입력을 계속 받을 수 있도록 collatz 메소드 외부에서 생성됩니다.

collatz 메서드는 숫자가 짝수인지 홀수인지 확인하고 이전 프로그램과 같이 연산을 수행합니다. 메서드 외부에서 프로그램은 두 개의 입력을 받습니다. 첫 번째는 for 루프 범위를 사용합니다.

try 블록 내에서 두 번째 입력이 제공됩니다. while 루프는 numb 값이 1로 줄어들 때까지 collatz 메서드를 계속 호출합니다.

while 루프 내에서 numb 값이 반복적으로 전달되고 반환됩니다.

def collatz_seq(numb):
    if numb % 2 == 0:  # even
        print(numb // 2)
        return numb // 2
    elif numb % 2 != 0:  # odd
        value = 3 * numb + 1
        print(value)
        return value


c = int(input("Enter count: "))
for c in range(c):
    try:
        n = input("Enter number: ")
        while n != 1:
            n = collatz_seq(int(n))
    except ValueError:
        print("Value Error. Please enter integer.")

출력:

Enter count: 2
Enter number: 5
16
8
4
2
1
Enter number: 6
3
10
5
16
8
4
2
1

while 루프를 사용하는 Python의 Collatz 시퀀스

지금까지 주어진 숫자에 대해 Python에서 collatz 시퀀스를 인쇄하는 프로그램을 만드는 방법을 배웠습니다. 이 프로그램에서 반복 횟수는 프로그램이 결과를 1로 줄이는 데 걸린 것으로 계산됩니다.

메소드 solve는 매개변수 numb로 생성됩니다. if문 내에서 프로그램은 매개변수에 값이 0인 경우 0을 반환합니다.

새 변수 길이가 생성되어 반복 횟수를 계산하는 데 사용됩니다.

변수 길이가 생성되고 여기에 1이 할당됩니다. 종료 조건 numb != 1while 루프가 생성됩니다. 이렇게 하면 numb 값이 1이 될 때까지 루프가 계속 실행됩니다.

while 루프 내에서 numb에 대한 작업은 단일 명령문으로 실행됩니다. numb는 짝수이면 2로, 그렇지 않으면 (3 * 마비 + 1)로 나눕니다.

반복할 때마다 length 값이 업데이트되도록 작업이 단일 명령문에서 수행됩니다.

numb = (numb / 2) if numb % 2 == 0 else (3 * numb + 1)

numblength의 현재 값이 인쇄된 다음 length1씩 증가합니다. 프로그램은 짝수 또는 홀수를 확인하고 numb를 업데이트한 다음 인쇄합니다.

그런 다음 다음 작업을 위해 길이가 증가합니다.

마지막 단계에서 프로그램은 length1을 추가로 증가시킵니다. 이 추가 숫자를 빼고 길이의 최종 개수를 반환합니다.

마지막으로 메소드 solve가 호출되고 인수 10이 전달되고 결과가 인쇄됩니다.

def solve(numb):
    if numb == 0:
        return 0
    length = 1
    while numb != 1:
        numb = (numb / 2) if numb % 2 == 0 else (3 * numb + 1)
        print("Count = ", length, "Value = ", numb)
        length += 1
    return length - 1


print("Total iterations = ", solve(10))

출력:

Count =  1 Value =  5.0
Count =  2 Value =  16.0
Count =  3 Value =  8.0
Count =  4 Value =  4.0
Count =  5 Value =  2.0
Count =  6 Value =  1.0
Total iterations =  6

결론

이 문서에서는 Python에서 collatz 시퀀스를 표시하는 프로그램을 만드는 다양한 예제를 제공합니다. 기사를 읽은 후 독자는 여러 가지 방법으로 Python에서 collatz 시퀀스를 만들 수 있습니다.

관련 문장 - Python Sequence