python - vérification de pair/impair nombre et évolution des sorties sur le nombre de la taille
J'ai un couple de problèmes à résoudre pour une mission, et je suis un peu coincé.
La question est d'écrire un programme qui obtient à l'utilisateur de saisir un nombre impair (à vérifier c'est bizarre), puis imprimez une pyramide renversée des étoiles en fonction de la taille de l'entrée.
Par exemple, si vous entrez 5, il est livré avec de
*****
***
*
Mon problème est donc double.
1) Comment puis-je vérifier si il est pair ou impair? J'ai essayé if number/2 == int
dans l'espoir qu'elle pourrait faire quelque chose, et internet me dit de ne if number%2==0
, mais qui ne fonctionne pas.
2) Comment puis-je changer les astérisques dans le milieu de chaque ligne?
D'aide avec un problème est grandement apprécié.
if number%2==0
est la manière correcte et devrait fonctionner. Pour votre deuxième question, voir: docs.python.org/2/library/string.html#format-examples- Ce qui ne fonctionne pas? Vous devriez poster le message d'erreur que vous voyez quand il ne fonctionne pas -- Qui va nous aider à comprendre ce qui peut être erroné.
- Quand vous dites
if number % 2 == 0
ne fonctionne pas, que voulez-vous dire? - Pour imprimer une chaîne de 5 (ou quel que soit le nombre) d'étoiles, ne
print '*' * 5
. - (Ne peut pas mettre cela dans codeblocks, désolé) Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> si le nombre%2==0: TypeError: pas tous les arguments converti lors de la mise en forme de chaîne
- Qui vous dit que votre
number
est une chaîne... - Aha, merci. J'ai fait un input() non int(input())
- Comprenez-vous pourquoi
number%2==0
œuvres, ou même ce quenumber%2
signifie? Si non, vous savez peut-être la même opération quemod
à partir d'autres contextes. Si non, vous devriez chercher le%
ou "modulo" de l'opérateur, de sorte que vous êtes en train d'apprendre quelque chose plutôt que de simplement à l'aide de random internet de la magie. - Cette
sys.stdout.write('*') * 5
ne fonctionne pas. 🙁
Vous devez vous connecter pour publier un commentaire.
Vous donner la réponse complète aurait pas de point du tout, car c'est les devoirs, alors voici quelques conseils :
Pair ou Impair:
est certainement un très bon moyen de trouver si votre numéro est le même.
Dans le cas où vous ne savez pas
%
, cela ne modulo qui est, ici, le reste de la division denumber
par2
. http://en.wikipedia.org/wiki/Modulo_operationL'impression de la pyramide:
Premier conseil: pour imprimer
*****
, vous pouvez le faireprint "*" * 5
.Deuxième conseil: pour centre les astérisques, vous avez besoin de savoir combien d'espaces à écrire avant de les astérisques. Ensuite, vous pouvez imprimer un tas d'espaces et d'astérisques avec
print " "*1 + "*"*3
'{: ^6}'.format('*' * 3 )
('*' * 3).center(5)
Le modulo 2 solutions avec %2 est bon, mais qui nécessite une division et d'une soustraction. Parce que les ordinateurs utilisent l'arithmétique binaire, une bien meilleure solution est:
value mod 2 == 0
devrait évaluer d'une vérification de la LSB en code machine, ne devrait-t-il?Simple mais encore rapide:
Ou encore plus simple:
1) Comment puis-je vérifier si il est pair ou impair? J'ai essayé "si nombre/2 == int" dans l'espoir qu'elle pourrait faire quelque chose, et internet me dit de faire "si nombre%2==0", mais qui ne fonctionne pas.
if number%2==0
, à l'exception enveloppé dans une fonction, et avec plus d'espace. Comment est-ce que cela va résoudre son problème?vous dire que c'est la même. Si un nombre impair serait l'instruction else là. Le "%" est le mod signe qui renvoie le reste de la division. Donc, nous sommes en train de dire si le nombre est divisible par deux, nous pouvons présumer qu'il est même. Sinon c'est bizarre (c'est une corrélation parfaite!)
Comme pour l'astérisque placer vous souhaitez ajouter les astérisques avec le nombre de places corrélée à la ligne, c'est sur. Dans votre exemple
Nous voulons de l'espace en conséquence
la = lambda x : "odd" if x % 2 else "even"
Je suppose que la méthode la plus simple et la plus fondamentale est cette
Juste et conditions de base en mathématiques. Il a également esprits zéro, qui n'est ni le même, ni impair et vous donner n'importe quel numéro que vous souhaitez en entrée, donc c'est très variable.
Concernant l'impression, voici comment j'allais le faire à l'aide de la Spécification Du Format Mini De La Langue (section: en Alignant le texte et en spécifiant une largeur):
Une fois que vous avez votre longueur, dire
length = 11
:il y a beaucoup de façons de vérifier si un entier est pair ou impair.
Je vais vous montrer les deux principaux moyens:
espère que cela aide
C'est simple code. Vous pouvez l'essayer et de saisir la connaissance facilement.
et ainsi de suite...
Voici ma solution:
Échantillon D'Instruction
Étant donné un entier,
n
, l'exécution de la suite des actions conditionnelles:Quelques solutions ici référence au temps nécessaire pour que les divers "est même", principalement
n % 2
vsn & 1
, sans vérifier systématiquement la façon dont cela varie avec la taille den
, qui s'avère être un facteur prédictif de la vitesse.La réponse courte est que si vous utilisez des nombres de taille raisonnable, normalement < 1e9, il n'a pas beaucoup de différence. Si vous êtes en utilisant un plus grand nombre, alors vous voudrez probablement à l'aide de l'opérateur au niveau du bit.
Voici un complot visant à démontrer ce qu'il se passe (avec Python 3.7.3, sous Linux 5.1.2):
Fondamentalement que vous cliquez sur "précision arbitraire" aspire à ce que les choses deviennent progressivement plus lente pour le module, tout en restant constant pour la bit-à-bit, op. Notez également la
10**-7
multiplicateur sur ce, c'est à dire que je peux faire ~30 millions de dollars (petit entier) vérifie par seconde.Ici est le même tracé pour Python 2.7.16:
qui montre l'optimisation qui s'est passé dans les nouvelles versions de Python.
Je n'ai que ces versions de Python sur ma machine, mais pourrait repris pour d'autres versions d'il y a un intérêt. Il y a 51
n
s entre 1 et 1e100 (uniformément espacés sur une échelle logarithmique), pour chaque point, je ne l'équivalent de:où
niter
est calculé à fairetimeit
prendre de ~0,1 secondes, et cela est répété 5 fois. Le peu maladroite de la manipulation den
est de s'assurer que nous ne sommes pas aussi l'analyse comparative de la variable globale de recherche, qui est plus lent que les variables locales. La moyenne de ces valeurs sont utilisées pour tracer la ligne, et les valeurs individuelles sont dessinés comme des points.#1st part ensures that it is an odd number that was entered.2nd part does the printing of triangular
Ma solution fondamentalement, nous avons deux chaînes de caractères et le & nous obtenons le droit de l'indice:
Veuillez noter qu'il semble plus lent que les autres alternatives:
de sortie:
8.05739480999182
8.170479692984372
8.892275177990086