2014-11-06 3 views
0

정수를 입력으로 취할 수있는 방법은 출력이 해당 숫자 다음에 Collatz sequence이 될 것입니다. 이 시퀀스는 다음과 같은 규칙에 의해 계산된다 : N이 짝수 인 경우Collatz 시퀀스

  • , 다음 번호의 다음 번호 3n + 1이다
  • n이 홀수 인 경우 n/2이다.
11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 

로 시작하는 때 지금 내 코드입니다 : 내가 이것을 실행하고 번호를 삽입하면

n = int(raw_input('insert a random number')) 

while n > 1: 
    if n%2 == 0: 
     n_add = [n/2] 
     collatz = [] + n_add 
    else: 
     n_add2 = [3*n + 1] 
     collatz = [] + n_add2 
     print collatz 

는 아무 일도 발생하지 않습니다.

+0

당신은 "난수 파이썬"에 대한 인터넷 검색 봤어? –

답변

1

숫자 n을 결코 변경하지 않으므로 매번 같은 시간이됩니다. 숫자가 이상한 경우에만 인쇄됩니다. 또한 대괄호 []은 배열을 나타냅니다. - 나는 당신의 목표가 이것으로 무엇인지 확실하지 않습니다. 아마 이런 식으로 재 작성합니다 :

n = int(raw_input('insert a random number')) 

while n > 1: 
    if n%2 == 0: 
     n = n/2 
    else: 
     n = 3*n + 1 
    print n 
당신은 비교하고 난 당신의 지침에 뭘하는지 대조 약간의 시간이 걸릴 수도 있습니다

-는 제외 (거의 그대로 축어역이다 print

그것은 당신이 그들이 나와 같은 단지 그들을 밖으로 인쇄 할 경우 코드에서 약간 불분명하다, 또는 당신은 그들 모두를 수집하고, 마지막에 그들을 밖으로 인쇄 할 수 있습니다.

1

을 당신은해야 할 경우 매번 n을 수정하면 원하는대로 처리 할 수 ​​있습니다.

,210
n = int(raw_input('insert a random number')) 
while n > 1: 
    n = n/2 if not n & 1 else 3 * n + 1 # if last bit is not set to 1(number is odd) 
    print n 

## -- End pasted text -- 
insert a random number11 
34 
17 
52 
26 
13 
40 
20 
10 
5 
16 
8 
4 
2 
1 

단지 각 N 인쇄 할 자신의 코드를 사용하여 :

n = int(raw_input('insert a random number')) 

while n > 1: 
    if n % 2 == 0: 
     n = n/2 
    else: 
     n = 3 * n + 1 
    print n 

을 또는 목록에있는 모든를 유지하고 마지막에 인쇄 :

all_seq = [] 
while n > 1: 
    if n % 2 == 0: 
     n = n/2 
    else: 
     n = 3 * n + 1 
    all_seq.append(n) 
print(all_seq) 
0
def collatz(number): 
    while number != 1: 
     if number % 2 == 0: 
      number = number // 2 
      print(number) 

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

try: 
    num = int(input('Please pick any whole number to see the Collatz Sequence in action.\n')) 
    collatz(num) 
except ValueError: 
    print('Please use whole numbers only.') 
0

또한했습니다 잠시 동안 그 일을 해왔습니다. 여기에 내가 생각해 낸 것이 있습니다 :

def collatz (number): 
    while number != 1: 
     if number == 0: 
      break 
     elif number == 2: 
      break 
     elif number % 2 == 0: 
      number = number // 2 
      print (number) 
     elif number % 2 == 1: 
      number = 3 * number + 1 
      print (number) 
    if number == 0: 
     print ("This isn't a positive integer. It doesn't count") 
    elif number == 2: 
     print ("1") 
     print ("Done!") 
    elif number == 1: 
     print ("1") 
     print ("Done!") 

try: 
    number = int(input("Please enter your number here and watch me do my magic: ")) 
except (ValueError, TypeError): 
    print ("Please enter positive integers only") 

try: 
    collatz(number) 
except (NameError): 
    print ("Can't perform operation without a valid input.") 
+0

질문의 형식이 잘못되었습니다. 한번보세요 ... –

+0

그냥 했어요. 감사! – RamRam