# Imprimiendo un patrón a través del uso de un diccionario -- python campo con python-3.x campo con hash-map campo con ascii-art camp codereview Relacionados El problema

## Printing a pattern through the use of a dictionary

1

### problema

Español

Tuvimos que pagar un programa C a Python. El código funciona, pero utiliza un diccionario para resolver el problema. Esto no se siente como el uso correcto de un diccionario. ¿Hay una mejor manera?

` ` #!/usr/bin/env python3  def main():     while True:         height = input("Height: ")         try:             height = int(height)             if height >= 0:                 break         except:             pass      mtn={}     space_mtn(height,mtn)     hashs_mtn(height,mtn)     print_mtn(height,mtn)  def space_mtn(height,mtn):      for i in range(height):         for j in range(2*height+2):             mtn[i,j]=" "     return   def hashs_mtn(height,mtn):      for i in range(height):         for  j in range(height-1,height-i-2,-1):             mtn[i,j] = '#'      for i in range(height):         for j in range(height+2,height+i+3):             mtn[i,j] = '#'     return  def print_mtn(height,mtn):      for i in range(height):         for j in range(height+3+i):             print("{}".format(mtn[i,j]),end="")         print("")     return   if __name__ == "__main__":     main()  ` `
Original en ingles

We had to port a c program to python. The code works but uses a dictionary to solve the problem. This doesn't feel like the right use of a dictionary. Is there a better way?

``#!/usr/bin/env python3  def main():     while True:         height = input("Height: ")         try:             height = int(height)             if height >= 0:                 break         except:             pass      mtn={}     space_mtn(height,mtn)     hashs_mtn(height,mtn)     print_mtn(height,mtn)  def space_mtn(height,mtn):      for i in range(height):         for j in range(2*height+2):             mtn[i,j]=" "     return   def hashs_mtn(height,mtn):      for i in range(height):         for  j in range(height-1,height-i-2,-1):             mtn[i,j] = '#'      for i in range(height):         for j in range(height+2,height+i+3):             mtn[i,j] = '#'     return  def print_mtn(height,mtn):      for i in range(height):         for j in range(height+3+i):             print("{}".format(mtn[i,j]),end="")         print("")     return   if __name__ == "__main__":     main() ``

## Lista de respuestas

1

La mejor respuesta

¿Por qué lo está utilizando, parece un ` list ` de ` list s tendría más sentido que un 9988776665544332 . Esto es algo así como una matriz de 2 dimensiones en c. `

Su ` mtn ` La inicialización se convierte en:

` ` mtn = []  ` `

Tendrá que hacer un poco más de trabajo en ` space_mtn para generar los sublistas: `

` ` def space_mtn(height,mtn):     for i in range(height):         mtn.append([])             # Append an empty sublist at each level         for j in range(2*height+2):             mtn[-1].append(" ")    # Append a space to the end of the currently-last list     return   ``

Ahora en ` hash_mtn ` y ` print_mtn8 `, simplemente cambie su ` mtn[i,j] ` llamadas a ` list0 . `

Ahora, hay muchas maneras de hacer que este código sea menos similar a C y más "Pythonic". Tales discusiones son probablemente mejores para revisión del código . Solo diré que es posible (aunque no necesariamente "mejor") obtener una funcionalidad equivalente al reemplazar todo después de su entrada ` list1 ` bucle con una línea:

` ` list2  ``

For how you're using it, it seems like a `list` of `list`s would make more sense than a `dict`. This is somewhat like a 2-dimensional array in C.

Your `mtn` initialization becomes:

``mtn = [] ``

You'll need to do a little more work in `space_mtn` to generate the sublists:

``def space_mtn(height,mtn):     for i in range(height):         mtn.append([])             # Append an empty sublist at each level         for j in range(2*height+2):             mtn[-1].append(" ")    # Append a space to the end of the currently-last list     return ``

Now in `hash_mtn` and `print_mtn`, just change your `mtn[i,j]` calls to `mtn[i][j]`.

Now, there are lots of ways to make this code less C-like and more "Pythonic". Such discussions are probably better for Code Review. I'll just say that it's possible (although not necessarily "best") to get equivalent functionality by replacing everything after your input `while` loop with one line:

``print('\n'.join('{0:>{1}}  {0:{1}}'.format('#'*(i+1), height) for i in range(height))) ``

-1

Los diccionarios son geniales. Mientras no le importe un pedido específico (aunque hay formas de hacerlas ordenadas y creo que estarán en una próxima liberación de Python).

En su caso, tal vez el uso de zip podría ser útil .

Dictionaries are great. As long as you don't care about a specific order (though there are ways of making them ordered and I believe they will be in a upcoming release of python).

In your case maybe the use of zip could be useful.

6  Haciendo un patrón en forma de rectangular  ( Making a rectangular shaped pattern )
Me gustaría que alguien sugiera una mejor manera de crear este patrón en Java, que estoy seguro, es posible: package com.spakai.undoredo; public interface...

9  Python impar número diamante  ( Python odd number diamond )
Hice un programa de diamantes rápido que toma solo números impares mientras devuelve un error con números, o 0. El código se ve bastante feo para mí, especi...

5  La forma correcta de colgar un hombre: parte final  ( The right way to hang a man final part )
El problema: Haciendo un juego de Hangman simple. Esta es una continuación de la siguiente pregunta: la forma correcta de colgar un hombre . Allí acababa d...

7  Imprime un tablero de ajedrez  ( Print a chessboard )
Estoy trabajando a través de elocuente javascript y acaba de hacer los ejemplos en el Capítulo 2. Uno es crear Una cuadrícula de tablero de ajedrez de tamañ...

43  La forma correcta de colgar a un hombre  ( The right way to hang a man )
Problema: He visto algunas preguntas sobre Hangman. Por lo general, esto se hace de una manera muy hackeable, que generalmente no se puede generalizar más. ...

6  Imprimiendo una escalera de texto  ( Printing a staircase of text )
Básicamente, se le solicita a un usuario que ingrese una serie de escaleras y una escalera cuando se genera un tipo en él. Sé que esto es descuidado y mis nom...

6  Buscar número de más en una matriz 2D  ( Find number of plus in a 2d array )
Problema Chargrid El CharGrid La clase encapsula una matriz de 2-D con una pareja de operaciones. INT APULUS () Busque un patrón '+' en la cuadrícu...

8  Impresión de letras en orden como una pirámide  ( Printing letters in order like a pyramid )
Hay este HackerRank Pregunta , donde necesitamos un Rhombus de letras . En cuanto a mi opinión, se puede ver como un poco de fractal, o lógica similar. Bu...

12  Imprimir grandes números, o no grande pero grande  ( Printing large numbers or not large but large )
Acabo de empezar a aprender a Java hace aproximadamente un mes. Me pregunto, ¿qué hará un desarrollador experimentado de manera diferente en el código a conti...

1  Simulación de la placa de galton  ( Galton board simulation )
Este programa está escrito para Windows 7 en MINGW utilizando GCC. Estoy buscando recomendaciones para mejorar la portabilidad del programa. /* galtonboa...