Faire un collatz programme d'automatiser les trucs ennuyeux
Je suis en train d'écrire un collatz programme en utilisant les lignes directrices d'un projet se trouvent à la fin du chapitre 3 de l'Automatiser les Trucs Ennuyeux avec Python. Je suis à l'aide de python 3.4.0. Voici les grandes lignes du projet:
Écrire une fonction nommée collatz() qui a un paramètre nommé numéro. Si le nombre est pair, alors collatz() imprimer numéro d' //2 et renvoie cette valeur. Si le nombre est impair, alors collatz() doit imprimer et return 3 * nombre + 1. Ensuite, écrire un programme qui permet à l'utilisateur de taper un entier et qui continue d'appeler collatz() sur ce numéro jusqu'à ce que la fonction renvoie la valeur 1.
La sortie de ce programme pourrait ressembler à quelque chose comme ceci: Entrez le nombre: 3 10 5 16 8 4 2 1
Je suis en train de faire une fonction qui utilise si et elif instructions à l'intérieur d'une boucle while. Je veux le nombre d'exemplaires à imprimer, puis revenir au début de la boucle et de réduire lui-même à l'aide de la collatz séquence, chaque instance d'un nombre qui en résulte étant imprimé comme il va à travers la boucle. Avec mon code actuel, je suis seulement en mesure d'imprimer la première instance du nombre, et ce nombre ne va pas dans la boucle après que. Voici mon code:
#collatz
print("enter a number:")
try:
number = (int(input()))
except ValueError:
print("Please enter a valid INTEGER.")
def collatz(number):
while number != 1:
if number % 2==0:
number = (number//2)
#print(number)
return (print(int(number)))
elif nnumber % 2==1:
number = (3*number+1)
#print(number)
return (print(int(number)))
continue
collatz(number)
OriginalL'auteur DeltaFlyer | 2015-11-03
Vous devez vous connecter pour publier un commentaire.
De sortie:
ultrasounder ce DONC, après les propos de la récursivité est tous vous avez vraiment besoin de savoir. stackoverflow.com/questions/33508034/...
Deux choses qui peuvent rendre le code plus propre:
print(n)
à l'extérieurcollatz
et seulement en fonte àint
une fois après la lecture de l'entréeOriginalL'auteur Nuncjo
Voici ce que je suis venu avec:
OriginalL'auteur ubundows
Votre
collatz()
la fonction d'impression & return seulement la valeur suivante. (Elle se termine quand il retourne.)La
while
boucle ne doit pas être à l'intérieur de lacollatz()
fonction.Vous avez aussi incompatible noms de variables (
n
,number
,nnumber
), et certains code est commenté.OriginalL'auteur Jonathan Clede
Mon 17 lignes de code pour le même exercice que j'ai trouvé.
OriginalL'auteur Simas
Nuncjo ont la solution qui fonctionne. J'ai modifié un peu pour ajouter de l'essayer et à l'exception des déclarations de gestion d'erreur.
OriginalL'auteur doc_gunthrop
C'est ce que j'ai trouvé sur mon propre et basée uniquement sur ce que j'ai appris dans le livre jusqu'à présent. Il m'a fallu un peu, mais l'un des outils que j'ai utilisé qui a été d'une valeur inestimable pour moi de trouver ma solution et a également été précieuse dans l'apprentissage de ce contenu est le python visualizer outil: http://www.pythontutor.com/visualize.html#mode=edit
J'ai été en mesure de voir ce que mon code était en train de faire et où il a été accroché et j'ai été en mesure de continuellement faire des ajustements jusqu'à ce que je l'ai eu droit.
OriginalL'auteur Ryan Hallberg
OriginalL'auteur Maecenas
Mon Code
OriginalL'auteur Jebin
C'est ce que j'ai trouvé pour cet exercice.
Il demande une entrée
Vérifie si c'est un entier. Si pas de reproches et de sorties. Si elle l'est, il parcourt le collatz séquence jusqu'à ce que le résultat est 1, puis vous gagnez.
OriginalL'auteur Christopher Wales
J'ai ajouté de la validation de la saisie
r != int
ne sera jamais faux. Vouliez-vous direisinstance(r, int)
?OriginalL'auteur LuckyMiv
Chaque solution sur ce fil de discussion est le manque d'une chose: si l'utilisateur tape "1" la fonction doit toujours exécuter les calculs de la Collatz séquence. Ma solution:
OriginalL'auteur stevensonmt
Essayer de trouvé une solution basée sur le chapitre de la Fonction d'automatiser les trucs ennuyeux.
Si besoin d'aide liées à la Collatz Problème, puis de vous rendre ici:
http://mathworld.wolfram.com/CollatzProblem.html
OriginalL'auteur Md. Raihan
je suis en train de lire le même cours et j'ai fait un très long (solution de l'améliorer quand j'ai appris somethign nouveau). je suggère de garder votre collatz programme jusqu'à la date que vous progressez dans les chapitres, sa bonne formation. la mienne a la manipulation de la chaîne et de la sauvegarde vers un \collatzrecords.txt maintenant!
J'ai résolu le problème en utilisant la récursivité (une méthode qui s'appelle elle-même):
spam est ma liste pour toutes les valeurs d'un certain nombre "voit" sur son chemin à 1.
comme vous pouvez le voir, lorsque le nombre est encore la méthode est appelée agin avec nombre/2. si le nombre est pair, il est appelé avec le numéro*3+1.
modifié le nombre == 1 vérifier un peu. j'espère qu'il enregistre les temps de calcul - im jusqu'à 23 000 000 déjà! (record actuel est de 15 733 191 avec 704 étapes pour l'obtenir: 1)
OriginalL'auteur Turun ambartanen
OriginalL'auteur Subterranean
Le supplémentaires alors que la Vraie boucle de l'aide au programme de continuer à fonctionner après les entrées de l'utilisateur un non-entier.
OriginalL'auteur zheng yang
OriginalL'auteur Dylan
OriginalL'auteur Tossaire
Voici mon 19 lignes:
OriginalL'auteur toonarmycaptain
Je pense que cette solution peut être encore plus simple pour les apprenants que l'acceptés:
Le résultat sera quelque chose comme ceci:
OriginalL'auteur Noob
Quelque chose qui m'a beaucoup aidé dans cette étape de mon apprentissage, c'est la compréhension qu'une fonction doit avoir un but bien précis, et l'ajout d'une boucle dans la fonction dilue.
Voici ma solution (quelqu'un m'a aidé à travailler sur ce et a abordé les mêmes erreurs que je vois dans ton code):
hey @NathanTuggy, merci! Une occasion d'apprentissage pour moi. Je suppose que j'ai lu quelque chose de mal, quelque part.
OriginalL'auteur kashura