Como posso tomar um inteiro como entrada, cuja saída será o Sequência Collatz seguindo esse número. Essa sequência é calculada pelas seguintes regras:
- se n é par, o próximo número é
n/2
- se n é ímpar, o próximo número é
3n + 1
.
por exemplo. ao começar com 11
11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
Este é o meu código agora:
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
se eu executar isso e inserir um número, nada acontece.
Respostas:
1 para resposta № 1Você nunca está mudando o número n, então será o mesmo a cada vez. Você também só está imprimindo se o número for ímpar. Além disso, colchetes []
indicar um array - Eu não tenho certeza qual é o seu objetivo com isso. Eu provavelmente iria reescrever assim:
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
Você pode querer levar algum tempo para comparar e contrastar o que estou fazendo com suas instruções - é quase literalmente uma tradução palavra por palavra (exceto pelo print
É um pouco incerto do seu código se você quer apenas imprimi-los quando eles saem, ou se você quiser coletá-los todos e imprimi-los no final.
1 para resposta № 2
Você deveria estar modificando n
cada vez, isso fará o que você quer:
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
Usando seu próprio código para apenas imprimir cada 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
Ou mantenha tudo em uma lista e imprima no final:
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 para resposta № 3
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 para a resposta № 4
Eu também tenho trabalhado nisso por um tempo agora, e aqui está o que eu criei:
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.")