Estou trabalhando em uma seqüência de collatz que encontrei em um livro e quero inserir o número, mas não funciona. Quando coloco o número, a tecla Enter do teclado não funciona, fiz algo errado no meu programa? :
even = range(0,10**5,2)
odd = range(1,10**5,2)
def collatz_s(num):
while num !=1 :
if num in even :
result = num /2
print(result)
num = result
elif num is odd :
result = num *3+1
num = result
print(result)
num = int(input('choose a random number'))
collatz_s(num)
Para verificar se um número é ímpar ou par, em vez de gerar range
objetos e verificar se um número é in
eles, observe o restante na divisão por dois, que você pode obter num % 2
. Se o restante for 1, significa que o número é par. Caso contrário, é estranho.
Além disso, use num // 2
para realizar uma divisão inteira . Desse modo, dividir 16 por 2 resultará em 8 (o número inteiro), em vez de 8,0 (o número de ponto flutuante). Acontece que isso é realmente importante aqui, especialmente porque você está interessado em encontrar o restante da divisão (a conceito principalmente relacionado a números inteiros.)
Eu acredito que é bem possível que um erro de arredondamento na divisão de ponto flutuante poderia ter colocado o seu programa em um loop infinito (desde um número com uma pequena parte decimal não seria em qualquer even
ou odd
alcance.) Ou se você estivesse ultrapassando o limite de sua intervalos (10 5 ) você estaria na mesma situação onde nenhum dos ramos corresponde. Usar a divisão de inteiros e verificar se há pares ou ímpares usando o restante deve corrigir os dois problemas.
def collatz_s(num):
while num != 1:
if num % 2 == 0:
num = num // 2
print(num)
else:
num = num * 3 + 1
print(num)
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras