J'essaie de créer des boucles lorsque certaines conditions sont remplies et jusqu'à présent, cela fonctionne, mais lorsque j'essaie de créer plus de conditions, je dois les indenter encore plus pour que mon programme puisse travailler.
def terrain(surface): surface = raw_input("What surface will you be driving on? ") while surface != "ice" and surface != "concrete" and surface != "soil" and surface != "asphalt" : surface = raw_input("Surface not valid. Please enter a valid surface: ") if surface == "ice": u = raw_input("what is the velocity of the car in meters per second? ") u = int(u) while int(u) < 0: u = raw_input("Velocity must be a positive integer: ") while int(u) == 0: u = raw_input("Velocty must be a number greater than zero: ") while int(u) > 72: u = raw_input("This vehicle cannot reach this speed: ") a = raw_input("How quickly is the vehicle decelerating? ") a = int(a) while int(a) > 0: a = raw_input("Deceleration cannot be a positive integer: ") else: s1 = u**2 s2 = 2*.08*9.8 s = s1/s2 print "This is how far the vehicle will travel on ice: " print ("The vehicle will travel %i meters before coming to a complete stop" % (s)) terrain("ice")
3 Réponses :
Voici ce que je comprends bien si je me trompe: je définis généralement une fonction comme: p> et utilisez-le comme: p> Vous devrez peut-être modifier certaines choses telles que Changer
1. Obtenez de la valeur pour la surface de
2. Si (la surface est invalide) Demandez une autre valeur de
3. Si (la surface est de la glace):
une. Obtenir de la valeur pour vous
b. Obtenir de la valeur pour un
c. Calculez S Utilisation de la formule
s1 = u ** 2 code>
S2 = 2 * 0,08 * 9.8 Code>
s = s1 / s2 code>
ré. Afficher s
4. Si la surface n'est pas de la glace, ne rien faire (selon le code que vous avez posté, mais il peut être édité d'avoir des blocs similaires tels que si surface == "sol" code>)
Si oui, alors
variable = int (variable) code> à
variable = float (variable) code> si vous devez accepter flottant ( telle que 1,25) valeur. P> p>
Lorsque j'exécute ce code, la déclaration d'impression "Ce véhicule ne peut pas avoir cette décélération" fonctionne comme une boucle infinie. Je l'ai changé à un Raw_Input et je l'ai réparé. Ce code a l'air bien mais quand je vais arriver à la "décélération ne peut pas être une partie entière positive", il continue d'aller quoi que ce soit.
@ pythonstudent23 Vous devrez avoir un autre Raw_Input à l'intérieur de chaque instruction
Notez également que donner une entrée non INT (comme Apple) provoque la relever Exception de ValueError pour que vous puissiez vouloir gérer cela.
Ouais c'est la partie que j'ai corrigée. Mais maintenant, la seule question que j'ai est le fait qu'il continue à répéter cette partie, peu importe ce que je tape. Même si la valeur de décélération est acceptable.
Je l'ai réellement corrigé. Je viens de passer le "A" avec Int (A) dans la déclaration tandis que.
Comment puis-je éviter que ValueError? Une autre condition, peut-être?
Il y a beaucoup de problèmes avec votre code, je vais souligner certains d'entre eux. Aussi, vous devriez commencer à utiliser Python3.x au lieu de Python2
Vous pouvez également analyser l'entrée que vous prenez de l'utilisateur comme int (brut_input ("xyz")) code>
Garder tout ce qui précède à l'esprit, le code ci-dessous devrait fonctionner import sys
def terrain():
surface = raw_input("What surface will you be driving on? ")
vel = -1
while surface != "ice" and surface != "concrete" and surface != "soil" and surface != "asphalt" :
surface = raw_input("Surface not valid. Please enter a valid surface: ")
if surface == "ice":
vel = int(raw_input("what is the velocity of the car in meters per second? "))
while vel < 0:
vel = int(raw_input("Velocity must be a positive integer: "))
while vel == 0:
vel = int(raw_input("Velocty must be a number greater than zero: "))
while vel > 72:
vel = int(raw_input("This vehicle cannot reach this speed: "))
acc = int(raw_input("How quickly is the vehicle decelerating? "))
while acc > 0:
acc = int(raw_input("Deceleration cannot be a positive integer: "))
s1 = vel**2
s2 = 2*.08*9.8
s = s1/s2
print ("This is how far the vehicle will travel on ice: ")
print ("The vehicle will travel %i meters before coming to a complete stop" % (s))
terrain()
Je prévois de combiner mon programme avec le module Tkinter de quelqu'un d'autre pour que je ne veuille pas que le système () puisse mettre fin à l'ensemble du programme simplement parce qu'une condition est remplie. Je voulais aussi que les messages d'erreur soient en boucle, d'où les déclarations de temps.
Mise à jour. Vérifiez s'il vous plaît!
C'est ce que votre code pourrait ressembler sans les erreurs de syntaxe liées à l'indentation: P>
def terrain(surface): surface = raw_input("What surface will you be driving on? ") while surface != "ice" and surface != "concrete" and surface != "soil" and surface != "asphalt" : surface = raw_input("Surface not valid. Please enter a valid surface: ") if surface == "ice": u = raw_input("what is the velocity of the car in meters per second? ") u = int(u) while int(u) < 0: u = raw_input("Velocity must be a positive integer: ") while int(u) == 0: u = raw_input("Velocty must be a number greater than zero: ") while int(u) > 72: u = raw_input("This vehicle cannot reach this speed: ") a = raw_input("How quickly is the vehicle decelerating? ") a = int(a) while int(a) > 0: a = raw_input("Deceleration cannot be a positive integer: ") else: s1 = u**2 s2 = 2*.08*9.8 s = s1/s2 print "This is how far the vehicle will travel on ice: " print ("The vehicle will travel %i meters before coming to a complete stop" % (s)) terrain("ice")
Qu'est-ce que vous voulez dire exactement par
sans les tirs sauvages code>? Si vous devez utiliser une boucle ou un
si code> instruction, vous devez utiliser avec obligation d'indenter. C'est une condition de langue.
Python s'appuie sur des tirets pour comprendre quel code appartient à quelle déclaration / boucle / fonction / classe. En ce qui concerne les lignes 12 et 13, ils peuvent être déplacés d'un indent et de la ligne 15 peuvent être déplacés 9 en retrait.
en surface! = "glace" et surface! = .... code> est déroutant. Pensez à utiliser
valide_surface = ['glace', "béton" ...] code>, puis
tandis que la surface n'est pas dans valide_surface: code>. Je crois que le bloc d'entier devrait être indenté une seule fois
@Suvenpandee ce que je veux dire, c'est que lorsque je veux créer une autre boucle pour mon programme, je dois créer une ligne encore plus indente sous la boucle déjà en retrait, comme vous pouvez le constater ci-dessus pour la boucle tandis que. Je voulais créer une troisième boucle pour la variable "U" juste en dessous de la précédente et ça continue à me donner une erreur d'indentation, peu importe la distance que je déplace la ligne.
@ PythonStudent23 est-ce le code exact que vous essayez avec tous les tirets exactement comme ci-dessus?
@Suvenpandey oui
Pouvez-vous s'il vous plaît inclure pseudocode dans votre question de ce que vous essayez? comme si (surface est de la glace) {Obtenir la valeur pour U, si (u <0) affichez le message d'erreur} else {faire ceci}
@Suvenpandey Je n'ai jamais écrit dans pseudocode avant, mais je veux juste ajouter une ligne qui fonctionne comme ce que vous mettez. Une boucle qui fonctionne comme: si (surface est de la glace) {entrez la valeur pour U}, puis {entrez la valeur pour A}. Alors que (un <-55) invite l'utilisateur à essayer à nouveau
@ PythonStudent23 J'ai demandé pseudocode parce que votre code m'a sérieusement confus. Vous avez
else code> Bloquer ci-dessous
pendant un> 0 code> par ce
sinon code> voulez-vous dire
si la surface n'est pas de la glace code> ou < code> si A n'est pas> 0 code>
Je vous suggère d'utiliser une IDE appropriée (telle que la version gratuite de Pycham) au lieu d'utiliser un éditeur de texte, surtout si vous êtes nouveau à Python. Il vous dérangera correctement pour vous.
@SuvenPandey L'autre est pour quand les entrées utilisateur passent les conditions. "Si les entrées de l'utilisateur sont d'accord avec ces conditions, faites cela, sinon faites ceci"
Vérifiez la réponse que j'ai postée ci-dessous et voyez si cela a du sens pour vous.