Problème création programme 2nd option ICN

Fermé
TheGameKiller Messages postés 10 Date d'inscription mercredi 19 décembre 2018 Statut Membre Dernière intervention 19 décembre 2020 - Modifié le 19 déc. 2018 à 13:55
TheGameKiller Messages postés 10 Date d'inscription mercredi 19 décembre 2018 Statut Membre Dernière intervention 19 décembre 2020 - 19 janv. 2019 à 19:39
Bonjour, je suis en classe de 2nd et je doit crée un programme qui doit respecter les contraintes suivante :
1) La donnée en entré sera du Texte
2) Le script devra transformer ce texte et donnera comme résultat un autre texte ou une autre mise en forme de texte
3) Ce script devra être écris à l’aide d’instruction choisie parmi les différente instructions rencontré en cours TD et TP. De rares exceptions seront acceptées( j'ai vue la boucle "while", "for i in range", "if et else" "les liste"
4) Ce script doit être écrit en Python 3
je voudrait faire un programme qui transforme A en Z, B en en X ...ect. Pour moi le script ressemble à ça mais cella ne fonctionne pas:

# -*- coding:utf-8 -*-
liste=str(input("veillez saisir un mot, s'il vous plait:")) #entré du texte sous forme de liste
A=len(liste) #nombre de caractère dans la liste pour faire tourné la boucle "for"
for i in range (0,A):
B=liste.pop(0) # j'ai mis liste.pop(0) comme sa sa retire le 1er caractère a chaque fois
if B=="a":
print ("z",end=" ")
if B=="b":
print ("y",end=" ")
if B=="c":
print ("x",end=" ")
...ect

Merci d'avance je doit le rendre pour le 29/01/2019
A voir également:

4 réponses

Bonjour.

str propose une méthode permettant de remplacer certains caractères par d'autres, str.translate, celle-ci s'appuyant sur une table de translation devant être crée avec str.maketrans.

>>> table_encode = str.maketrans('abcdefghojklmnopqrstuvwxyz', 'bcdefghojklmnopqrstuvwxyza')
>>> table_decode = str.maketrans('bcdefghojklmnopqrstuvwxyza', 'abcdefghojklmnopqrstuvwxyz')
>>> s = 'salut ! comment vas-tu ?'
>>> s_encode = s.translate(table_encode)
>>> s_encode
'tbmvu ! dpnnfou wbt-uv ?'
>>> s_decode = s_encode.translate(table_decode)
>>> s_decode
'salut ! comment vas-tu ?'


L'idée pour toi serait de faire la même chose en définissant une table pour convertir tel caractère par tel autre caractère.

table = ('abcdefghojklmnopqrstuvwxyz', 'bcdefghojklmnopqrstuvwxyza')

def encode(char):
    i = table[0].find(char)
    # str.find retourne -1 si le caractère n'est pas dans la chaîne
    if i != -1:
        char = table[1][i]
    return char
    
def decode(char):
    i = table[1].find(char)
    if i != -1:
        char = table[0][i]
    return char
    

string = input('words ? ')
encoded_string = ''.join(encode(char) for char in string)
print(encoded_string)
decoded_string = ''.join(decode(char) for char in encoded_string)
print(decoded_string)
1
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171
19 déc. 2018 à 14:10
Tu ne peux pas appliquer la méthode pop sur une chaîne de caractère. Transforme ton mot d'entrée en liste avant d'utiliser pop :
liste = list(liste) # penser à renommer liste, c'est assez illisible
0
TheGameKiller Messages postés 10 Date d'inscription mercredi 19 décembre 2018 Statut Membre Dernière intervention 19 décembre 2020
20 déc. 2018 à 18:31
ok, merci
0
TheGameKiller Messages postés 10 Date d'inscription mercredi 19 décembre 2018 Statut Membre Dernière intervention 19 décembre 2020
17 janv. 2019 à 20:37
bonjour j'ai encore un petit problème je ne peut modifier qu'une lettre à la fois.
voila mon programe:
# -*- coding:utf-8 -*-"
#programme qui cript un texte et retourne le texte cripté
a=str(input("veillez saisir mot, s'il vous plait:"))
A=[a]
C=len(A)
B=A.pop(0)
for i in range (0,C):
if B=="a":
print ("z")
if B=="b":
print ("y")
if B=="c":
print ("x")
if B=="d":
print("w")
if B=="e":
print ("v")
if B=="f":
print ("u")
ect...
0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171
17 janv. 2019 à 22:54
Normal, la variable B est en réalité constante. La ligne est mal placée dans le programme.
0
Allineed Messages postés 4 Date d'inscription vendredi 18 janvier 2019 Statut Membre Dernière intervention 24 janvier 2019
18 janv. 2019 à 15:56
phrase=input("Saisir un texte")

ch="abcdefghijklmnopqrstuvwxyz"

ch1=[i for i in ch]

ch2=list(ch1)

ch1.sort(reverse=True)

dico={i:j for i,j in zip(ch2,ch1)}

phrase=[dico[i] for i in phrase ]

phrase="".join(phrase)

print(phrase)
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
18 janv. 2019 à 22:36
ch1=[i for i in ch]
Juste
ch1=list(ch)
suffit
ch1.sort(reverse=True)
Pourquoi faire un tri quand on peut juste prendre la liste à l'envers
ch2=ch1[::-1]
?
Pourquoi faire des listes pour construire
dico
quand on peut utiliser une
range
dans la compréhension
dico={ch[i]: ch[-1-i] for i in range(len(ch))}
?
Pourquoi construire une liste intermédiaire quand
str.join
prend tout aussi bien un générateur:
"".join(dico[i] for i in phrase)
?
On peut toujours faire plus simple en Python ;)
phrase=input("Saisir un texte")
ch="abcdefghijklmnopqrstuvwxyz"
dico={ch[i]: ch[-1-i] for i in range(len(ch))}
print("".join(dico[i] if i in dico else i for i in phrase))
0
TheGameKiller Messages postés 10 Date d'inscription mercredi 19 décembre 2018 Statut Membre Dernière intervention 19 décembre 2020
19 janv. 2019 à 19:39
Merci beaucoup, mais j'ai des restrictions à suivre. Je doit utiliser que les choses que j'ai vu en cours. En plus mon programme fonctionne mais je n'arrive pas à le faire tourner en boucle. Serte, je suis sur qui peut être perfectionner mais sa doit quand même ressembler à un programme du lycéen en 2nd
0