Python의 Collatz 시퀀스
- Collatz 시퀀스 뒤의 프로그래밍 논리
-
if-else
를 사용하는 Python의 Collatz 시퀀스 -
while
루프 및 예외 처리를 사용하는 Python의 Collatz 시퀀스 - 재귀를 사용하는 Python의 Collatz 시퀀스
-
while
루프를 사용하는 Python의 Collatz 시퀀스 - 결론
Collatz 시퀀스는 1로 끝나는 숫자의 수학적 시퀀스입니다. 숫자가 특정 작업 집합을 거칠 때 왼쪽 마지막 숫자는 1이어야 한다고 합니다.
이 기사에서는 주어진 숫자에 대해 Python에서 collatz 시퀀스를 찾는 프로그램을 작성하는 방법을 설명합니다.
Collatz 시퀀스 뒤의 프로그래밍 논리
Python에서 주어진 숫자의 collatz 시퀀스를 찾으려면 네 가지 작업을 따라야 합니다.
- 짝수인지 홀수인지 확인합니다.
- 짝수의 경우 프로그램은 숫자
n
을 2로 나누어 인쇄합니다. - 홀수의 경우 프로그램은
n
에 3을 곱한 다음 1을 더하고 인쇄합니다. - 프로그램은 숫자
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 == 1
이 true
인 elif
문으로 이동합니다.
변수 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
인 경우 인쇄하고 루프를 종료합니다. value
가 1
이 아닌 경우 두 번째 while
루프는 value
를 인쇄하고 numb
변수 내부에 복사합니다.
while value == 1:
print(value)
sys.exit()
while value != 1:
print(value)
n = value
마지막으로 collatz_seq
메서드는 numb
인수를 사용하여 재귀적으로 호출됩니다. 메소드는 value
가 1
로 줄어들 때까지 계속 호출한 다음 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 != 1
로 while
루프가 생성됩니다. 이렇게 하면 numb
값이 1
이 될 때까지 루프가 계속 실행됩니다.
while
루프 내에서 numb
에 대한 작업은 단일 명령문으로 실행됩니다. numb
는 짝수이면 2
로, 그렇지 않으면 (3 * 마비 + 1)
로 나눕니다.
반복할 때마다 length
값이 업데이트되도록 작업이 단일 명령문에서 수행됩니다.
numb = (numb / 2) if numb % 2 == 0 else (3 * numb + 1)
numb
및 length
의 현재 값이 인쇄된 다음 length
가 1
씩 증가합니다. 프로그램은 짝수 또는 홀수를 확인하고 numb
를 업데이트한 다음 인쇄합니다.
그런 다음 다음 작업을 위해 길이
가 증가합니다.
마지막 단계에서 프로그램은 length
에 1
을 추가로 증가시킵니다. 이 추가 숫자를 빼고 길이
의 최종 개수를 반환합니다.
마지막으로 메소드 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 시퀀스를 만들 수 있습니다.