Python César De Chiffrement Décodeur
Dans ma leçon, j'ai été chargé de la création d'un César de Chiffrement décodeur qui prend une chaîne de caractères d'entrée et trouve le meilleur possible de la chaîne à l'aide d'une lettre de fréquences. Si vous ne savez pas faire beaucoup de sens, qui fait mais laissez-post à la question:
Écrire un programme qui effectue les opérations suivantes. Tout d'abord, il faut lire une ligne d'entrée, qui est le message codé, et se composent de lettres majuscules et des espaces. Votre programme doit essayer de décoder le message avec tous les 26 valeurs possibles de la maj S; en dehors de ces 26 d'éventuels messages d'origine, imprimer celui qui a la plus grande bonté.
Pour votre commodité, nous allons pré-définir la variable letterGoodness pour vous, une liste de longueur de 26 ce qui équivaut à les valeurs dans le tableau des fréquences au-dessus de
J'ai ce code pour l'instant:
x = input()
NUM_LETTERS = 26 #Can't import modules I'm using a web based grader/compiler
def SpyCoder(S, N):
y = ""
for i in S:
x = ord(i)
x += N
if x > ord('Z'):
x -= NUM_LETTERS
elif x < ord('A'):
x += NUM_LETTERS
y += chr(x)
return y
def GoodnessFinder(S):
y = 0
for i in S:
if x != 32:
x = ord(i)
x -= ord('A')
y += letterGoodness[x]
return y
def GoodnessComparer(S):
goodnesstocompare = GoodnessFinder(S)
goodness = 0
v = ''
for i in range(0, 26):
v = SpyCoder(S, i)
goodness = GoodnessFinder(v)
if goodness > goodnesstocompare:
goodnesstocompare = goodness
return v
y = x.split()
z = ''
for i in range(0, len(y)):
if i == len(y) - 1:
z += GoodnessComparer(y[i])
print(z)
EDIT: en Fait les modifications suggérées par Cristian Ciupitu
S'il vous plaît ignorer l'indentation des erreurs, il est probablement apparue lorsque j'ai copié mon code.
Le programme fonctionne comme ceci:
- Prendre l'entrée et de le diviser en une liste
- Pour chaque valeur de la liste, je le donner à une bonté finder.
- Il prend la bonté de la chaîne et le compare tout le reste contre, lorsqu'il y a plus de bonté qu'il fait le plus élevé de la bonté de les comparer.
- Il décale alors que la chaîne de texte, j'en quantité pour voir si la bonté est supérieur ou inférieur
Je ne suis pas très bien où est le problème, le premier test: LQKP OG CV GKIJV DA VJG BQQ
Imprime le bon message: aidez-MOI À LE ZOO
Cependant, le test suivant: UIJT JT B TBNQMF MJOF PG UFYU GPS EFDSZQUJOH
Donne la une ordure de la chaîne d': SGHR RH Z RZLOKD KHMD NE PSAP ENQ CDBQXOSHMF
Quand il est censé être: CECI EST UN EXEMPLE de LIGNE DE TEXTE POUR DÉCRYPTER
Je sais que j'ai de:
Essayez chaque changement de la valeur
Obtenir la "bonté" de la parole
De retour de la chaîne avec la plus grande bonté.
J'espère que mon explication a du sens comme je suis assez confus pour l'instant.
Vous devriez essayer de remplacer certains de la magie des chiffres significatifs des constantes, par exemple, 65 avec
ord('A')
, 26 avec NUM_LETTERS
. Par la façon GoodnessComparer
vous avez range(0, 25)
au lieu de (0, 26)
, est-ce une faute de frappe ou pas? Et une autre chose: dans GoodnessFinder
vous n'avez pas besoin de faire ord(i)
à chaque fois, seulement quand i
est un espace (' '
).input(), est l'équivalent de
eval(raw_input())
qui n'a pas de sens, pour le remplacer par un simple raw_input()
appel.Ciupitu: Qui devrait être Python 3 code.
Depuis Débordement de Pile vous permet de poster une réponse à votre propre question et c'est un des devoirs, vous devriez poster votre version finale du décodeur.
OriginalL'auteur Thegluestickman | 2012-05-29
Vous devez vous connecter pour publier un commentaire.
Voici mon application qui fonctionne très bien.
Vous devez imprimer la bonté de chaque message et de voir pourquoi votre programme de la sortie.
Donc il ne peut pas soumettre, mais l'apprentissage de la première.
OriginalL'auteur Kabie
Ma dernière solution qui fonctionne, grâce à la merveilleuse Cristian Ciupitu.
Merci à tous pour votre aide!
OriginalL'auteur Thegluestickman
Je suis en train de travailler sur le même tutoriel et utilisé une méthode légèrement différente. Ce qui permettrait d'éviter la création et l'appel de fonctions:
Noter que de nombreuses parties de ce code pourrait (et devrait) être compressé, par exemple
Ils sont de gauche agrandie pour montrer mon travail " pour un tutoriel exercice.
OriginalL'auteur CJC