bonjour a tous bon alors voila je me sis fait un petit programme tout simple qui consiste a entrer une chaine de caractères et ça l'a ressort avec les lettres à l'envers c'est vraiment basique je sais mais j'ai quelques questions quant à optimisations et la finalisation
voila mon code "améliorer" desolé il est un peu long
import os
def flip():
print("entrer chaine")
chaine=input()
for lettre in chaine:
d= {
"a":"ɐ",
"b":"b",
"c":"ɔ",
"d":"p",
"e":"ǝ",
"f":"ɟ",
"g":"ƃ",
"h":"ɥ",
"i":"ı",
"j":"ɾ",
"k":"ʞ",
"l":"l",
"m":"ɯ",
"n":"u",
"o":"o",
"p":"d",
"q":"b",
"s":"s",
"t":"ʇ",
"u":"n",
"v":"ʌ",
"w":"ʍ",
"x":"x",
"y":"ʎ",
"z":"z",
}
print ("".join( d.get(c,c) for x in input() )
mais ça me sort une erreur de syntaxe que je ne connais vu que je ne connais aps cette phrase
print ("".join( d.get(c,c) for x in input() )
I)personnellement j'utilise IDLE que je trouve bien
donc je le lance pas de problèmes mais voila je voudrais le lancer dans une console DOS seulement lorsque je double clic sur mon flip.py la fenêtre s'ouvre et se referme en 0.00000001 sec
alors?
II)comment le compiler en.exe
de manière a ne pas avoir a entrer flip() a chaque fois
voila merci en tout cas désolé si j'ai loupé quelques trucs du cours je ne l'ai pas fini merci
salut merci
en effet je cherchais un équivalent du cond en scheme merci je vais tester tout ça
merci
bon par contre je ne comprends pas la dernière ligne
print "".join( d.get(c,c) for x in input() )
merci de me l'expliquer
j'ai bien appelé le dictionnaire d mais on peut lui donner le nom qu'on veut non?
et ensuite le for x in input ()le x doit être x ou lettre?
et à quoi correspond le d.get(c,c)? je comprends le d.get mais pas le (c,c)
merci de ton aide et désolé pour ma noobitude
Peux-tu nous dire quelle version de python tu utilise (2 ou 3) ?
Par rapport à tes première question :
Tu peux commencer par virer ton os.system() qui n'est pas à utiliser de toute façon et le remplacer par raw_input() (Python 2.x) ou input() (Python 3.x).
Pour que ta fonction soit exécutée lorsque tu double-clic sur le fichier ou que tu lance ton script en console il faut le faire dans le script :
def f():
print("Salutation !")
if __name__ == "__main__":
f()
input('Appuyez sur "entrée"...')
__name__ contient le nom du module ou "__main__" si il s'agit du module principal de ton programme (celui que tu exécute).
Pour la seconde : d.get(c,c) te retourne soit la valeur correspondante à la clés d[c] soit c si il n'y a pas de clés d[c]. (dans l'exemple se serai plutot x)
1) Tout d'abord c'est get(x,x) pas get(c,c), erreur de typo.
2) L'intérêt d'utiliser get(x,x), c'est que du coup tu peux virer les les éléments b, o, s x, z de ton dictionnaire. En effet, comme cela a été précisé, d.get(x,x) retourne soit la valeur correspondant à la clé x, soit s'il n'y a pas de clé, la valeur x.
Donc si tu fait d.get("b", "b"), comme "b" n'est pas dans le dictionnaire, il te retournera "b". Si tu fais d.get("d","d"), comme "d" est dans le dictionnaire, il te retournera d["d"], c'est à dire "p".
@LCN: Très belle manip' ce d.get(x,x), je n'y aurais pas pensé
Alors tu peux enlever le for puisqu'il est déjà dans le "".join( d.get(c,c) for c in input() ).
L'erreur de syntaxe, c'est parce que j'avais mis une parenthèse en trop.
Explication :
(d.get(c,c)forcinchaine)
est un générateur qui retourne à la queue leu leu tous les d.get(c,c) pour tous les caractères de la chaine
le fait de mettre d.get(c,c) et non d[c] évite une erreur si un caractère de la chaîne n'est pas trouvé dans d.
"".join(liste)
colle tous les morceaux de la liste dans une chaîne en intercalant "" entre chaque
oulalala
ok bon alors deja merci pour vos réponses donc :
@LeYan'tibus je suis en V3.1.3 sur win 32 voila
donc je place ton code juste en dessous du def flip() mais est ce que je dois remplacer le main par flip?
j'ai donc si j'ai bien suivi ceci?
input()
def flip():
if __name__ == "__main__":
f()
input('Appuyez sur "entrée"...')
print("entrer chaine")
chaine=input()
for lettre in chaine:
d= {
"a":"ɐ",
"b":"b",
"c":"ɔ",
"d":"p",
"e":"ǝ",
"f":"ɟ",
"g":"ƃ",
"h":"ɥ",
"i":"ı",
"j":"ɾ",
"k":"ʞ",
"l":"l",
"m":"ɯ",
"n":"u",
"o":"o",
"p":"d",
"q":"b",
"s":"s",
"t":"ʇ",
"u":"n",
"v":"ʌ",
"w":"ʍ",
"x":"x",
"y":"ʎ",
"z":"z",
}
return "".join( d.get(x,x) for c in chaine )
et après?ça me sort une erreur à mon avis je pense que c'est un problème de connaissances notamment syntaxique plutôt que de compréhension. L'algo est simple en soi.
donc bon si quelqu'un accepte de me donner sa source pour mon programme ce serait sympa car je patauge vraiment
merci beaucoup en tout cas
def flip(chaine):
d= { # Pas besoin de la double indentation, mais jai la flemme de l'enlever
"a":"ɐ",
"c":"ɔ",
"d":"p",
"e":"ǝ",
"f":"ɟ",
"g":"ƃ",
"h":"ɥ",
"i":"ı",
"j":"ɾ",
"k":"ʞ",
"l":"l",
"m":"ɯ",
"n":"u",
"p":"d",
"q":"b",
"t":"ʇ",
"u":"n",
"v":"ʌ",
"w":"ʍ",
"y":"ʎ"
}
return "".join( d.get(c,c) for c in chaine )
if __name__ == "__main__":
chaine=input("entrer chaine")
flip(chaine)
input()
input()
def flip():
if __name__ == "__main__":
f()
input('Appuyez sur "entrée"...')
La programmation ça n'est pas de la magie Il faut comprendre le sens des lignes que tu écris. Le programme s'exécute ligne par ligne, lorsque la fonction flip est exécutée il lit chaque ligne une par une et exécute donc le input('Apuyez sur "entrée"...') avant d'avoir vraiment exécuté ton algorithme. Tu n'as pas les bases en Python, tu devrais commencer par les acquérir avant d'aller plus loin.
Au passage, tu apprendras qu'on n'indente pas le code sans raison valable en Python (ce que tu fais dès la première ligne de flip).
Je ne comprends pas non plus pourquoi on t'a balancé une solution toute prête alors que tu n'es pas capable de la comprendre. C'est idiot.
ce n'est pas idiot c'est un exemple
comme tu l'as dis je ne comprends pas tout et ce n'est pas de la magie dans tous les cours de toutes les matières tu trouveras des exemples
en effet je ne comprends pas certaines lignes et c'est pour ça que je demande
je ne pense pas que ce soit si dur que ça rassures toi j'ai deja fait de la programmation c'est par curiosité et pour le coté pratique de python que je m'y suis mis
Pour mieux comprendre voilà un exemple que tu devrais enregistrer dans un fichier puis le tester une fois en l'important dans le shell python (IDLE si tu veux) et une autre en l'executant directement.
print("Texte 1 <-- Ce texte s'affiche à chaque importation ou",
"execution du module.")
if __name__ == "__main__":
print("Texte 2 <-- Ce texte s'affiche seulement lors de",
"l'execution du module.")
Ca c'est juste pour l'histoire du if__name__=="__main__":. Après pour les problèmes d'indentation ce sont vraiment les bases de python; l'indentation est une obligation en python et elle doit respecter certaines règles.
salut
merci pour ton code mais j'ai vraiment du mal a saisir la fonction du if _name_ == "main"
que représente t'il même sur le tuto je n'ai pas très bien compris...
et même pas du tout
sinon sur Idle a me sort une erreur de syntaxe au niveau du print
merci
J'ai édité parce que je t'ai filé un truc qui n'expliquait pas très bien ce que je voulais que tu comprenne...
Le but est simplement de se rendre compte qu'à la condition que __name__ soit égale à la chaine "__main__" alors les instructions ne s'execute que quand c'est le script qui est executé et pas importé.
Par contre pour l'erreur, chez moi y'en a pas, ni avec l'ancien exemple ni avec le nouveau...
salut
merci pour ton code mais j'ai vraiment du mal a saisir la fonction du if _name_ == "main"
que représente t'il même sur le tuto je n'ai pas très bien compris...
et même pas du tout
sinon sur Idle a me sort une erreur de syntaxe au niveau du print
Si ça te perturbe, vire le, c'est pas indispensable. Par contre je te déconseille de laisser dans ton code des lignes que tu comprends pas, plus généralement quand on manipule des choses qu'on ne comprend pas trop, ça amène souvent des problèmes tôt ou tard (ici tu as de la chance, c'est tôt).
je suis tout a fait daccord avec toi et c'est d'ailleurs ce que jai fais mon programe est desormais fonctionnel je vous remercie tous
certes simple mais concret
quelques questions de debutants
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Blond, bouclé, toujours le sourire aux lèvres...