travailler avec des nombres négatifs en python
Je suis un étudiant dans un des concepts de la programmation de la classe. Le laboratoire est dirigé par un TA et aujourd'hui dans le laboratoire, il nous a donné une réelle simple petit programme pour la construire. C'était celui où il serait de multiplier par plus. De toute façon, il nous avait utiliser absolue pour éviter de casser le prog avec les négatifs. J'ai fouetté jusqu'réel rapide et alors discuté avec lui pendant 10 minutes qu'il était mauvais en mathématiques. C'était, 4 * -5 n'est pas égale à 20, elle est égale à -20. Il a dit qu'il a vraiment doesnt de soins à ce sujet et qu'il serait trop difficile de faire de la prog gérer les aspects négatifs de toute façon. Donc ma question est comment puis-je aller à ce sujet.
voici la prog j'ai tourné dans:
#get user input of numbers as variables
numa, numb = input("please give 2 numbers to multiply seperated with a comma:")
#standing variables
total = 0
count = 0
#output the total
while (count< abs(numb)):
total = total + numa
count = count + 1
#testing statements
if (numa, numb <= 0):
print abs(total)
else:
print total
Je veux le faire sans absolus, mais chaque fois que je la saisie de nombres négatifs, je reçois un gros goosegg. Je sais qu'il y est une certaine façon simple de le faire, je ne peux pas le trouver.
raw_input
à input
, qui ne devrait pas être dans la langue (et est éliminé en Python 3.)Et juste pour confondre les choses,
input
en Python 3 est le même que raw_input
en Python 2, et autant que je me souvienne, Python 3 n'a pas de raw_input
. @_@C'est vrai,
raw_input
est renommé input
en Python 3.OriginalL'auteur dman762000 | 2010-03-16
Vous devez vous connecter pour publier un commentaire.
Peut-être vous accomplir cela avec quelque chose à l'effet de
ou peut-être
OriginalL'auteur Mike Graham
Trop dur? Votre TA est... eh bien, la phrase serait probablement m'interdit. De toute façon, vérifier pour voir si
numb
est négatif. Si c'est pour multipliernuma
par-1
et nenumb = abs(numb)
. Puis faire la boucle.Nah. Juste soustraire à partir de 0.
OriginalL'auteur Ignacio Vazquez-Abrams
De l'abs() dans la condition du while est nécessaire, car, ainsi, il contrôle le nombre d'itérations (comment définiriez-vous un nombre négatif d'itérations?). Vous pouvez le corriger en inversant le signe du résultat, si
numb
est négatif.C'est donc la version modifiée de votre code. Remarque, j'ai remplacé la boucle while avec un nettoyant pour la boucle.
OriginalL'auteur slacker
Essayez ceci sur votre TA:
de sortie:
accum = -accum
et autres) ainsi que les changements de l'exploitation (numb <<= 1
) sont des multiplications, mais +1 n'en est pas moins une excellente idée, et les concepts qui probablement s'insèrent dans les choses typiques que l'OP a ou va bientôt couvrir dans la classe.On l'appelle la négation, pas d'inversion du signe ... si la zone objet de la simulation n'a pas un NEG de l'instruction, de le faire par la soustraction à partir de zéro. À l'aide de votre raisonnement, la
abs()
éparpillées à travers certains autres réponses, c'est aussi la multiplication!! Si le déplacement est de multiplication, alors il en est d'ailleurs par exemplenuma += numa
!!! Le déplacement est un très primitif le fonctionnement matériel et est utilisé dans la mise en œuvre de la multiplication.Vous avez raison, sur tous les plans. Et, en effet, une fois que vous regardez au niveau de la CPU, cet exercice devient vraiment inconfortable pour le dire poliment. Content que l'on pourrait aider l'OP, je déteste quand les instructeurs semblent décourager les étudiants à aller le mile supplémentaire...
OriginalL'auteur John Machin
Comment au sujet de quelque chose comme ça? (N'utilise pas de l'abs (), ni mulitiplication)
Notes:
while
boucle à l'intérieur de laif
déclaration, puisque leif
déclaration évalue chaque fois la même chose. Ou définir une variableda
à1
ou-1
, etdt
àtotal
ou-total
, avant la boucle while.Les fonctions en Python doit commencer par une lettre minuscule. Si quelqu'un voit
FooBar
(en dehors d'une bibliothèque externe avec une convention de nommage), ils vont penser que c'est une classe.oui! Vous avez raison, ce serait généralement préférable. Dans le cadre de ce artificiel affectation, j'ai opté pour un seul tout en approche, parce qu'il le reflet de l'algorithme original et rend le calcul plus autonome. Bien que faisant tout notre "signe de test" à l'avance et avoir 2 (ou 3 ou 4), tandis que les boucles au lieu de cela serait équivalent, l'unique, tout en se lit plus comme un seul algorithme (psychologique, sans doute).
merci pour cette remarque. En fait PEP8 appels pour un nom comme
mul_by_add()
ou mieux encoremultiply_by_addition()
. My bad, j'ai garder la commutation de langues et rigoureuse et stupide convention de nommage au travail n'aide pas 🙁OriginalL'auteur mjv
Merci à tous, vous tous m'ont permis d'apprendre beaucoup de choses. C'est ce que je suis venu avec l'aide de certains de vos suggestions
Merci pour toute l'aide tout le monde.
repeat = abs(numb)
?Aussi, si votre problème est résolu, veuillez accepter l'une des réponses (peut-être même votre propre).
sans la si la clause else les chiffres de retour avec la valeur absolue, et non pas la vraie valeur, de sorte que, sans elle, l'prog retourne encore 4*-5 20 au lieu de -20
En fait, sans le si-sinon la clause 4*-5 retourne 0, range() avec un argument négatif retourne une liste vide. Je ne parlais pas de cette logique étant inutile. je parlais de réinventer la roue, comme ces 4 lignes pourraient être remplacées par une seule ligne qui lit
repeat = abs(numb)
. Ce qui serait non seulement plus courte, mais aussi plus claire.Oh, je vois maintenant ce que vous dites. Ok, désolé pour ce que je suis juste à l'apprentissage. Vous êtes de droite qui ne fonctionne pas mieux et c'est plus propre et plus clair.
OriginalL'auteur dman762000
OriginalL'auteur Kitiyo