2
votes

Convertisseur de caractères

turk = {"Ç":"C","ç":"c","Ğ":"G","ğ":"g","İ":"I","ı":"i",
        "Ö":"O","ö":"o","Ş":"S","ş":"s","Ü":"U","ü":"u"}

eng = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgijklmnopqrstuvwxyz"

space = " "

word = input("Enter a word")


def turkChar (word, turk):
    newword = ""
    for c in word:
        if c in eng:
            newword = newword + c
        elif c in turk:
            newword = newword + turk[c]
        else:
            newword = newword + space
    return newword
       
I wrote this simple code which turns Turkish chars into English. I added space variable to make a space but what if user wants to make more space or tab or even numbers. How can I make this ?

0 commentaires

3 Réponses :


0
votes

Je pense que vous devriez avoir une seule carte du turc vers l'anglais. Ainsi, A correspondrait à A, B à B et ainsi de suite, en plus du dictionnaire turc que vous avez déjà. Vous pouvez ensuite ajouter l'espace, la tabulation et tout autre caractère au mappage.

Votre code devient une boucle avec une recherche dans le dictionnaire à l'aide de la fonction get.


1 commentaires

Oh ok cela a du sens maintenant j'ajoute de l'espace, des tabulations et d'autres choses au dictionnaire, comment puis-je ajouter des nombres dans ce code?



2
votes

Python a une fonction de chaîne appelée translate() qui est faite pour cela et qui est très efficace (beaucoup plus efficace qu'une boucle / dict-lookup). Vous pouvez faire une table de traduction avec un dictionnaire exactement comme celui que vous avez déjà, que vous pouvez créer avec maketrans() puis passer à translate() :

turk = str.maketrans({"Ç":"C","ç":"c","Ğ":"G","ğ":"g","İ":"I","ı":"i",
        "Ö":"O","ö":"o","Ş":"S","ş":"s","Ü":"U","ü":"u"})

s = "Hellö ĞÇ 123"

s.translate(turk)
# 'Hello GC 123'


1 commentaires

C'est génial mais j'ai besoin d'apprendre à coder de manière si difficile est la meilleure pour le moment, merci quand même.



0
votes

Je ne pense pas que vous devriez traiter les caractères d'espace, de tabulation et de nombre différemment de vos caractères eng . Je voudrais simplement étendre vos personnages comme ceci:

turk = {"Ç":"C","ç":"c","Ğ":"G","ğ":"g","İ":"I","ı":"i",
        "Ö":"O","ö":"o","Ş":"S","ş":"s","Ü":"U","ü":"u"}

eng = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz \t1234567890"

word = input("Enter a word")

def turkChar(word, turk):
    newword = ""
    for c in word:
        if c in eng:
            newword = newword + c
        elif c in turk:
            newword = newword + turk[c]
    return newword

Ensuite, nous pouvons supprimer les parties `` espace '' pour aboutir à ceci:

eng = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz \t1234567890"
  • Un caractère de tabulation est écrit comme \t dans une chaîne.
  • Vous avez remarqué que vous aviez un h inférieur manquant dans votre chaîne d' eng .
  • Vous avez défini turk comme un argument mais pas eng , définissez les deux ou ni l'un ni l'autre.
  • Si le personnage n'est pas trouvé dans eng ni dans turk il est ignoré.


3 commentaires

Cela fonctionne mais si je donne deux espaces, cela échoue


Hmm, je ne pense pas que cela devrait échouer. Cela fonctionne quand je l'essaye. Pourriez-vous créer un résumé de votre exemple d'utilisation?


J'ai supprimé l'argument "turk" et maintenant cela fonctionne grâce