2017-05-10 2 views
2

Je suis nouveau à python (version 3.4.) Et je me demande comment je peux faire un code similaire à celui-ci:Lettres faits à partir de lettres

#block letters 
B1 = ("BBBB ") 
B2 = ("B B ") 
B3 = ("B B ") 
B4 = ("BBBB ") 
B5 = ("B B ") 
B6 = ("B B ") 
B7 = ("BBBB ") 
B = [B1, B2, B3, B4, B5, B6, B7] 

E1 = ("EEEEE ") 
E2 = ("E  ") 
E3 = ("E  ") 
E4 = ("EEEEE ") 
E5 = ("E  ") 
E6 = ("E  ") 
E7 = ("EEEEE ") 
E = [E1, E2, E3, E4, E5, E6, E7] 

N1 = ("N N") 
N2 = ("NN N") 
N3 = ("N N N") 
N4 = ("N N N") 
N5 = ("N N N") 
N6 = ("N NN") 
N7 = ("N N") 
N = [N1, N2, N3, N4, N5, N6, N7] 
for i in range(7): 
    print(B[i], E[i], N[i]) 

La sortie de mon code actuel ressemble à ceci:

BBBB EEEEE N N 
B B E  NN N 
B B E  N N N 
BBBB EEEEE N N N 
B B E  N N N 
B B E  N NN 
BBBB EEEEE N N 

Mais je veux savoir comment faire un qui peut prendre l'entrée de l'utilisateur et l'imprimer dans le style ci-dessus. J'ai essayé pendant quelques heures et je n'arrive pas à trouver une solution, ce serait génial de voir comment les autres pourraient le faire. Je pense que cela devient beaucoup plus difficile lorsque les lettres ne correspondent pas à l'écran, donc je veux seulement pouvoir imprimer 10 lettres. Merci

Répondre

3

Assomption: vous avez tous les lettres construites et que toutes les lettres ont le même nombre de lignes.

Dans ce cas, vous pouvez construire un dictionnaire, comme:

ascii_art = { 'B': B, 'E': E, 'N': N } 

bien sûr dans la vie réelle, vous construire un dictionnaire avec toutes les lettres, et peut-être des espaces, des chiffres, etc.

maintenant, vous pouvez prendre une chaîne en entrée avec:

text = input('Enter text? ') 

Suivant w e carte la chaîne sur un itérables de lettres:

chars = map(ascii_art.get,text) 

et enfin nous les mettons dans un zip et imprimer que:

for d in zip(*chars): 
    print(*d) 

Ou mettre tous ensemble:

ascii_art = { 'B': B, 'E': E, 'N': N } 
text = input('Enter text? ') 
chars = map(ascii_art.get,text) 
for d in zip(*chars): 
    print(*d) 

En cas que vous voulez limite la sortie à 10 caractères par ligne, vous pouvez modifier le code à:

ascii_art = { 'B': B, 'E': E, 'N': N } 
text = input('Enter text? ') 
for i in range(0,len(text),10): 
    chars = map(ascii_art.get,text[i:i+10]) 
    for d in zip(*chars): 
     print(*d) 

Il en résulte en:

Enter text? BEBEBEBBEBEENNNENNNN 
BBBB EEEEE BBBB EEEEE BBBB EEEEE BBBB BBBB EEEEE BBBB 
B B E  B B E  B B E  B B B B E  B B 
B B E  B B E  B B E  B B B B E  B B 
BBBB EEEEE BBBB EEEEE BBBB EEEEE BBBB BBBB EEEEE BBBB 
B B E  B B E  B B E  B B B B E  B B 
B B E  B B E  B B E  B B B B E  B B 
BBBB EEEEE BBBB EEEEE BBBB EEEEE BBBB BBBB EEEEE BBBB 
EEEEE EEEEE N N N N N N EEEEE N N N N N N N N 
E  E  NN N NN N NN N E  NN N NN N NN N NN N 
E  E  N N N N N N N N N E  N N N N N N N N N N N N 
EEEEE EEEEE N N N N N N N N N EEEEE N N N N N N N N N N N N 
E  E  N N N N N N N N N E  N N N N N N N N N N N N 
E  E  N NN N NN N NN E  N NN N NN N NN N NN 
EEEEE EEEEE N N N N N N EEEEE N N N N N N N N 

Nous pouvons ajouter une ligne vide par ligne, en ajoutant une seule instruction supplémentaire:

ascii_art = { 'B': B, 'E': E, 'N': N } 
text = input('Enter text? ') 
for i in range(0,len(text),10): 
    chars = map(ascii_art.get,text[i:i+10]) 
    for d in zip(*chars): 
     print(*d) 
    print()

cela génère:

Enter text? BBBEEEEEEENNNNN 
BBBB BBBB BBBB EEEEE EEEEE EEEEE EEEEE EEEEE EEEEE EEEEE 
B B B B B B E  E  E  E  E  E  E  
B B B B B B E  E  E  E  E  E  E  
BBBB BBBB BBBB EEEEE EEEEE EEEEE EEEEE EEEEE EEEEE EEEEE 
B B B B B B E  E  E  E  E  E  E  
B B B B B B E  E  E  E  E  E  E  
BBBB BBBB BBBB EEEEE EEEEE EEEEE EEEEE EEEEE EEEEE EEEEE 

N N N N N N N N N N 
NN N NN N NN N NN N NN N 
N N N N N N N N N N N N N N N 
N N N N N N N N N N N N N N N 
N N N N N N N N N N N N N N N 
N NN N NN N NN N NN N NN 
N N N N N N N N N N 
2

Première vous devrez manuellement faire l'alphabet comme vous l'avez fait auparavant,

N1 = ("N N") 
N2 = ("NN N") 
N3 = ("N N N") 
N4 = ("N N N") 
N5 = ("N N N") 
N6 = ("N NN") 
N7 = ("N N") 
N = [N1, N2, N3, N4, N5, N6, N7] 

Procédez ainsi pour chaque lettre.[Az]

# Now to let user input print your alphabet we will use a dictionary 
# The the key is the letter and value is the printable array 
d = {'a':A,'b':B, ... , 'z':Z } 

# Let's ask for user input: 
line = input('What do you want to print> ') 

# Now lets print what the user said in our alphabet 
# iterate through the input and print it 

sentence = map(d.get,line) 
for letter in zip(*sentence): 
    print(*letter) 
+0

Cela ne l'imprimer comme * lettres de bloc *, mais * représentation * de la * liste des listes *. –

+0

Vous avez raison! J'ai besoin de 'map',' zip' le 'output' de' dict' pour être imprimable ... Je vais le modifier. – Ludisposed

+0

@BenjaminWheaton: Non, j'ai oublié un astérisque dans le mien, c'est corrigé maintenant. –

2

Sans obtenir super sophistiqué, vous avez besoin hardcore (c.-à-définir statiquement) chaque lettre comme une liste de chaînes, semblable à la façon dont vous l'avez fait avec B, E et N.

Ensuite, vous construisez un dictionnaire qui associe chaque lettre à la liste correspondante:

>>> letters = { 
...  'b': ["BBBB ", "B B ", "B B ", "BBBB ", "B B ", "B B ", "BBBB "], 
...  'e': ["EEEEE ", "E  ", "E  ", "EEEEE ", "E  ", "E  ", "EEEEE "], 
...  'n': ["N N", "NN N", "N N N", "N N N", "N N N", "N NN", "N N"] 
... } 

Cet exemple ne contient que les définitions pour les lettres b, e et n, vous devez ajouter les définitions de tous les autres vous-même. Assurez-vous que toutes les listes ont la même longueur. Une fois que vous avez terminé avec cela, vous pouvez utiliser ce dictionnaire pour afficher toute séquence de lettres que vous obtenez à partir de l'entrée de l'utilisateur. Démo:

>>> name = raw_input('enter your name: ') 
enter your name: Ben 
>>> 
>>> for row in zip(*[letters[x.lower()] for x in name]): 
...  print ''.join(row) 
... 
BBBB EEEEE N N 
B B E  NN N 
B B E  N N N 
BBBB EEEEE N N N 
B B E  N N N 
B B E  N NN 
BBBB EEEEE N N 
+1

(Utilisez 'input' au lieu de' raw_input' et 'print (''. Join (row))' dans Python 3.) – timgeb

0

J'ai trouvé une réponse moins compliquée (pour moi). Je ne comprends pas comment utiliser zip ou carte, mais de cette façon travailler avec eux.Et je peux comprendre ce que le code est en train de faire.

A =[" A ", #CREATING LIST OF LETTERS 
    " A A ", 
    " A A ", 
    "AAAAAAA ", 
    "A  A ", 
    "A  A ", 
    "A  A "] 

créer l'alphabet de cette manière alors:

#PUTTING LETTERS IN LIST 
Alphabet = {"A":A,"B": B, "C": C, "D":D, "E":E ,"F":F, "N": N} 
#ASKER USER FOR INPUT 
text = input('Enter text(Only takes A, B, C, D, E, F, N)? ') 
#INPUT IN UPPERCASE 
text = text.upper() 
for i in range(7): 
    for letter in text: 
     temp = Alphabet[letter] 
     print(temp[i],end="") 
    print('')