J'essaie de comprendre comment faire en sorte que Python revienne au début du code. En SmallBasic, vous faites
start:
textwindow.writeline("Poo")
goto start
Mais je ne peux pas comprendre comment vous faites cela en Python:/Des idées, ça vous tente?
Le code que j'essaye de faire est en boucle
#Alan's Toolkit for conversions
def start() :
print ("Welcome to the converter toolkit made by Alan.")
op = input ("Please input what operation you wish to perform. 1 for Fahrenheit to Celsius, 2 for meters to centimetres and 3 for megabytes to gigabytes")
if op == "1":
f1 = input ("Please enter your Fahrenheit temperature: ")
f1 = int(f1)
a1 = (f1 - 32) / 1.8
a1 = str(a1)
print (a1+" celsius")
Elif op == "2":
m1 = input ("Please input your the amount of meters you wish to convert: ")
m1 = int(m1)
m2 = (m1 * 100)
m2 = str(m2)
print (m2+" m")
if op == "3":
mb1 = input ("Please input the amount of megabytes you want to convert")
mb1 = int(mb1)
mb2 = (mb1 / 1024)
mb3 = (mb2 / 1024)
mb3 = str(mb3)
print (mb3+" GB")
else:
print ("Sorry, that was an invalid command!")
start()
Donc, fondamentalement, lorsque l’utilisateur termine sa conversion, je souhaite qu’il revienne en boucle. Je ne peux toujours pas mettre vos exemples de boucle en pratique avec ceci, car chaque fois que j'utilise la fonction def pour boucler, cela indique que "op" n'est pas défini.
Python, comme la plupart des langages de programmation modernes, ne supporte pas "goto". Au lieu de cela, vous devez utiliser des fonctions de contrôle. Il y a essentiellement deux façons de procéder.
1. Boucles
Voici un exemple de la façon dont vous pourriez faire exactement ce que fait votre exemple SmallBasic:
while True :
print "Poo"
C'est si simple.
2. Récursion
def the_func() :
print "Poo"
the_func()
the_func()
Remarque sur la récursivité: faites cela uniquement si vous souhaitez revenir au début à un nombre spécifique (auquel cas ajoutez un cas où la récursivité doit s'arrêter). C'est une mauvaise idée de faire une récursion infinie comme je le définis ci-dessus, parce que vous finirez par manquer de mémoire!
#Alan's Toolkit for conversions
invalid_input = True
def start() :
print ("Welcome to the converter toolkit made by Alan.")
op = input ("Please input what operation you wish to perform. 1 for Fahrenheit to Celsius, 2 for meters to centimetres and 3 for megabytes to gigabytes")
if op == "1":
#stuff
invalid_input = False # Set to False because input was valid
Elif op == "2":
#stuff
invalid_input = False # Set to False because input was valid
Elif op == "3": # you still have this as "if"; I would recommend keeping it as Elif
#stuff
invalid_input = False # Set to False because input was valid
else:
print ("Sorry, that was an invalid command!")
while invalid_input : # this will loop until invalid_input is set to be True
start()
Utilisez une boucle infinie:
while True:
print('Hello world!')
Cela peut certainement s'appliquer à votre fonction start()
; vous pouvez quitter la boucle avec break
ou utiliser return
pour quitter la fonction, ce qui termine également la boucle:
def start():
print ("Welcome to the converter toolkit made by Alan.")
while True:
op = input ("Please input what operation you wish to perform. 1 for Fahrenheit to Celsius, 2 for meters to centimetres and 3 for megabytes to gigabytes")
if op == "1":
f1 = input ("Please enter your Fahrenheit temperature: ")
f1 = int(f1)
a1 = (f1 - 32) / 1.8
a1 = str(a1)
print (a1+" celsius")
Elif op == "2":
m1 = input ("Please input your the amount of meters you wish to convert: ")
m1 = int(m1)
m2 = (m1 * 100)
m2 = str(m2)
print (m2+" m")
if op == "3":
mb1 = input ("Please input the amount of megabytes you want to convert")
mb1 = int(mb1)
mb2 = (mb1 / 1024)
mb3 = (mb2 / 1024)
mb3 = str(mb3)
print (mb3+" GB")
else:
print ("Sorry, that was an invalid command!")
Si vous deviez ajouter une option pour quitter également, cela pourrait être:
if op.lower() in {'q', 'quit', 'e', 'exit'}:
print("Goodbye!")
return
par exemple.
Vous pouvez facilement le faire avec des boucles, il existe deux types de boucles
Pour Boucles:
for i in range(0,5):
print 'Hello World'
While Boucles:
count = 1
while count <= 5:
print 'Hello World'
count += 1
Chacune de ces boucles affiche "Hello World" cinq fois
Python a des instructions de flux de contrôle au lieu d'instructions goto
. Une implémentation du flux de contrôle est la boucle while
de Python. Vous pouvez lui donner une condition booléenne (les valeurs booléennes sont Vrai ou Faux en Python), et la boucle s'exécutera de manière répétée jusqu'à ce que cette condition devienne fausse. Si vous voulez boucler à jamais, il vous suffit de démarrer une boucle infinie.
Soyez prudent si vous décidez d'exécuter le code exemple suivant. Appuyez sur Ctrl + C dans votre shell lorsqu'il est en cours d'exécution si vous souhaitez interrompre le processus. Notez que le processus doit être au premier plan pour que cela fonctionne.
while True:
# do stuff here
pass
La ligne # do stuff here
est juste un commentaire. Il n'exécute rien. pass
est juste un paramètre fictif dans python qui dit en gros "Bonjour, je suis une ligne de code, mais sautez-moi car je ne fais rien."
Supposons maintenant que vous souhaitiez demander à l'utilisateur de manière répétée une entrée pour toujours et à tout moment, et que vous ne quittiez le programme que si l'utilisateur saisissait le caractère 'q' pour quitter.
Vous pouvez faire quelque chose comme ça:
while True:
cmd = raw_input('Do you want to quit? Enter \'q\'!')
if cmd == 'q':
break
cmd
ne stockera que ce que l’utilisateur saisira (l’utilisateur sera invité à taper quelque chose et à appuyer sur Entrée). Si cmd
ne stocke que la lettre 'q', le code va forcément break
sortir de sa boucle. L'instruction break
vous permet d'échapper à tout type de boucle. Même un infini! Il est extrêmement utile de savoir si vous souhaitez programmer des applications utilisateur qui s'exécutent souvent sur des boucles infinies. Si l'utilisateur ne tape pas exactement la lettre 'q', il sera invité à l'invite de manière répétée et infinie jusqu'à ce que le processus soit tué de force ou que l'utilisateur décide qu'il en a assez de ce programme ennuyeux et qu'il veut simplement quitter.
Vous devez utiliser une boucle while. Si vous faites une boucle while et qu'il n'y a pas d'instruction après la boucle, elle deviendra une boucle infinie et ne s'arrêtera pas tant que vous ne l'avez pas arrêtée manuellement.
def start():
Offset = 5
def getMode():
while True:
print('Do you wish to encrypt or decrypt a message?')
mode = input().lower()
if mode in 'encrypt e decrypt d'.split():
return mode
else:
print('Please be sensible try just the lower case')
def getMessage():
print('Enter your message wanted to :')
return input()
def getKey():
key = 0
while True:
print('Enter the key number (1-%s)' % (Offset))
key = int(input())
if (key >= 1 and key <= Offset):
return key
def getTranslatedMessage(mode, message, key):
if mode[0] == 'd':
key = -key
translated = ''
for symbol in message:
if symbol.isalpha():
num = ord(symbol)
num += key
if symbol.isupper():
if num > ord('Z'):
num -= 26
Elif num < ord('A'):
num += 26
Elif symbol.islower():
if num > ord('z'):
num -= 26
Elif num < ord('a'):
num += 26
translated += chr(num)
else:
translated += symbol
return translated
mode = getMode()
message = getMessage()
key = getKey()
print('Your translated text is:')
print(getTranslatedMessage(mode, message, key))
if op.lower() in {'q', 'quit', 'e', 'exit'}:
print("Goodbye!")
return
écrire une boucle for ou while et mettre tout votre code à l'intérieur? La programmation de type Goto appartient au passé.