0
votes

Python Collatz infinie boucle

Toutes mes excuses si des questions similaires ont été posées, mais je n'ai rien pu trouver quelque chose pour résoudre mon problème. J'ai écrit une simple pièce de code pour la séquence Collatz dans Python qui semble fonctionner bien pour des nombres pairs, mais se bloque dans une boucle infinie lorsqu'un nombre impair est entré.

Je n'ai pas été capable de comprendre pourquoi C'est ou une façon de sortir de cette boucle afin que toute aide soit grandement appréciée. xxx


0 commentaires

4 Réponses :


1
votes

Votre fonction manque de code> renvoie code>, donc par défaut, il renvoie Aucun code>. Vous pouvez éventuellement souhaiter définir la fonction afin qu'il retourne le nombre d'étapes de 1 code> le numéro d'entrée est. Vous pouvez même choisir de cache de tels résultats.

Vous semblez vouloir faire un appel récursif, mais vous utilisez également un pendant code> boucle. Choisissez un ou l'autre. P>

Lorsque vous recouvrez, vous ne em> avez pas em> pour réaffecter une variable, vous pouvez choisir de mettre l'expression dans l'appel, comme ceci: P >

    if number % 2 == 0:
        collatz(number / 2)
    elif ...


0 commentaires

0
votes

J'ai simplifié le code requis pour trouver combien d'étapes il faut pour un numéro pour se rendre à zéro à la suite de la théorie de la conjecture Collatz. XXX

J'espère que cela vous aide!


0 commentaires

0
votes

ci-après est mon extrait de code et cela a fonctionné parfaitement xxx


0 commentaires

0
votes

Voici mon interprétation de l'affectation, cela gère des nombres négatifs et des intrants non entiers répétés utilisent également des cas. Sans nidifier votre code dans une boucle réelle tandis que, le code échouera sur des cas d'utilisation non entiers répétés.

def collatz(number):
if number % 2 == 0:
    print(number // 2)
    return(number // 2)
elif number % 2 == 1:
    result = 3 * number + 1
    print(result)
    return(result)

# Program starts here.        
while True:
    try:
        # Ask for input
        n = input('Please enter a number: ')
        # If number is negative or 0, asks for positive and starts over.
        if int(n) < 1:
            print('Please enter a positive INTEGER!')
            continue
        #If number is applicable, goes through collatz function.
        while n != 1:
            n = collatz(int(n))
    # If input is a non-integer, asks for a valid integer and starts over.
    except ValueError:
        print('Please enter a valid INTEGER!')
    # General catch all for any other error.
    else:
        continue


0 commentaires