Je dois créer un programme qui obtient une chaîne et un entier n em>; Il incremportera chaque caractère de la chaîne par n caractères; Par exemple, si la chaîne est "abc" et n = 1 em>, la sortie serait "BCD", si n = 2 em>, ce serait "CDE". jusqu'à présent, j'ai écrit ce code p> néanmoins, si j'entraîne "xyz" et n = 1 em>, je reçois "yz { ", ce qui a du sens puisque le prochain caractère d'ASCII à" Z "est" {". Vous pouvez imaginer que pour un n em> plus élevé, ça empire; J'ai essayé de résoudre ce problème pour tout n em> à l'aide de MODULO, essayé de profiter du fait qu'il y a 26 lettres, mais je suis toujours incapable de trouver un incrément mathématique qui détecte lorsque la chaîne a été incrémenté plus loin que "Z", alors il "se remet" à "A". P> Des recommandations? Merci d'avance. P> p>
3 Réponses :
briser le bas de sorte que des étapes individuelles avec des variables nommées précisent ce que vous traitez:
def shift_letter(letter, n): asciiValue = ord(letter) alphabetIndex = asciiValue - ord('a') alphabetIndex = (alphabetIndex + n) % 26 asciiValue = alphabetIndex + ord('a') return chr(asciiValue) string = list( input( "Insert a string, it will be codified: " ) ) n = int( input( "Insert an integer, each string's character will be increased by that number: " ) ) for characterIndex in range( len( string ) ): string[characterIndex] = shift_letter(string[characterIndex], n) print( ''.join( string ) )
C'est une sorte de triche, mais voici l'approche que je prendrais: impressions: p> essentiellement, je numérise la chaîne convertir les caractères en position de la chaîne d'alphabet; ajouter 1 à chaque position; et reconstruire la chaîne de ces positions. La "triche" ajoute un "A" supplémentaire, donc un poste-25 (comptant de 0) 'z' se traduit par cette position supplémentaire-26 'A'. P> Si cela vous offense, vous pouvez partir hors de l'extra 'A' et à la place, prenez simplement une autre passe à la liste des positions et lorsque vous voyez "26" (qui aurait dépassé la fin du Ce n'est qu'une preuve de concept pour votre exemple; Pour soutenir un décalage arbitraire, vous allez étendre le En outre, j'utiliserais des expressions de liste à la place des boucles code> pour code>, mais que vous n'avez peut-être pas encore rencontré ceux-ci, alors j'ai utilisé plus explicite lettre_list code> sans le 'a'), frappez-le jusqu'à zéro. p>
letter_list code> pour l'alphabet complet et utilisez modulo sur l'entrée (par exemple,
n = n% 26 code>) pour assurer l'entrée. resté à portée. p>
pour code> boucles au lieu de ci-dessus. p> p>
Cela me semble inutilement complexe (et c'est un peu inefficace car il scanne la chaîne "ABCD ... une" chaîne pour chaque caractère de la chaîne d'entrée).
Voici la réponse modifiée des commentaires:
c = chr((ord(a) - 97) % 25 + 97)
Ce n'est pas clair ce que vous faites ici: qu'est-ce que a code>? Est-ce que cela signifie être appliqué après i> ajout
n code>? Sinon, où est
n code> ajouté? Et
% 25 code> est clairement faux.
Vous recherchez modulo. par exemple:
(ord (a) - 97)% 25 + 1 code>
Cela a fonctionné, mais j'ai dû changer les 1 derniers pour un 97 et "A" dans "ORD (A)" pour "String [Caractéristique]". Je le clarifie au cas où quiconque trébuche sur cette même question.
Je sais que c'est probablement ridicule, mais je n'ai jamais aimé les approches de la carte entre des personnages et des entiers à l'aide d'Ord () et de Chr (). En ces jours d'ASCII presque universel, c'est probablement une bizarrerie personnelle ridicule; Mais j'ai grandi sur Ebcdic, où les lettres ne font pas de carte contiguë aux entiers, et certaines choses sont difficiles à secouer.
@Codingatty Oui, surtout avec la domination de l'UTF-8. Si vous le trouvez si offensant (ou si vous vous trouvez réellement sur une machine EBCDIC), vous pouvez simplement ajouter des conversions vers et depuis ASCII (ou UTF-8).
Oh, pas offensant du tout. La chose la plus importante est que cela fonctionne. Comme je l'ai dit, juste une bizarre personnelle ridicule sur ma part.Je n'ai pas touché Ebcdic depuis 30 ans, mais certaines choses vont juste profondément.