Mostrar un tablero de líderes de un archivo de texto y calcular puntos -- python campo con python-3.x campo con csv camp codereview Relacionados El problema

Displaying a leader board from a text file and calculating points


3
vote

problema

Español

El archivo de texto se establece así: Nombre, apellido, victorias, pérdidas

  dex,kop,5,6  desder,jok,0,11  aslan,vert,11,0  jax,sas,2,9  buy,guy,1,10   

Código:

  CheckIn0  

El programa solo debe mostrar jugadores que han ganado al menos 1 juego y calcular sus puntos, una victoria es igual a 3 puntos.

Cualquier sugerencia sobre cómo mejorar el código que cualquier cosa sería genial.

Original en ingles

The text file is laid out like this: first name, last name, wins, losses

dex,kop,5,6  desder,jok,0,11  aslan,vert,11,0  jax,sas,2,9  buy,guy,1,10 

Code:

def points():      template = "|{0:<30}|{1:<30}|{2:<30}|{3:<30}|{4:<30}"     lol = template.format("1st name: ","2nd Name: ", "won: ", "lost: ","points: ")      print(lol)      with open(r'prac2.txt', 'r') as file:          for line in file:              data = line.strip().split(',')              if int(data[2]) >= 1:                  poin = int(data[2]) * 3                  data.append(poin)                  print(template.format(data[0], data[1], data[2], data[3], data[4]),'\n')          file.close()  points() 

The program should only display players that have won at least 1 game and calculate their points, a win is equal to 3 points.

Any suggestions as to how to improve the code any would be great.

        

Lista de respuestas

3
 
vote

Dado que está utilizando todos los elementos de CodeName9 , puede girar:

  (Name)0  

en esto:

  (Name)1  

Consulte aquí para algunos detalles.

 

Since you are using all the elements of data, You can turn:

print(template.format(data[0], data[1], data[2], data[3], data[4])) 

into this:

print(template.format(*data)) 

See here for some details.

 
 
3
 
vote

una punta realmente simple pero útil; Compruebe el nombre de sus VARS. Incluso cuando solo estás haciendo un ejercicio simple.

¿Qué es (Name)2 (Name)3 , lo mismo con el nombre de su método, ¿qué significa (Name)4 ? Agregar, eliminar, actualizar, imprimir puntos?

Piense en alguien sin tiempo que esté buscando su código y está tratando de entender qué está haciendo.

Tal vez algo así como (Name)5 puede ser más fácil de leer / entender. Lo mismo con (Name)6 versus (Name)7 . Etc.

Esta es una cosa simple, incluso cuando no tiene tiempo . ¡Porque cuando no tienes tiempo es cuando todas esas pequeñas cosas lo ayudan!

 

A really simple but useful tip; check the name of your vars. Even when you are just doing a simple exercise.

What is lol and poin, the same with the name of your method, what does points mean? Add, remove, update, print points?

Think about someone without time that is looking your code and is trying to understand what are you doing.

Maybe something like print_leaderboard can be easier to read/understand. Same with lol versus leaderboard_header. Etc..

This is a simple thing, even when you don't have time. Because when you don't have time is when all those little things helps!

 
 
3
 
vote

También cambiaría a usar 9988776655544330 Módulo y la DictReader1 Eso ayudará a que el código sea más legible al tenerlos a nombres de columna asignados a cada una de las columnas .

También mejoraría los nombres de variables, por ejemplo, ya que cada fila en el archivo de entrada representa a un jugador, llamemos a un 9988777665544332 . La tercera columna corresponde al número de WINS: llamemos wins . lol El nombre de la variable no tiene mucho sentido, lo nombraría header Dado que esta es un encabezado de "tabla" de salida.

Otras notas:

  • No necesita cerrar el archivo explícitamente: todo el punto de usar el administrador de contexto context es permitir que Python cierre el archivo de manera implícita y segura
  • Ejecutar la función desde debajo de if __name__ == '__main__': Para evitar que se ejecute en la importación

Aquí está el código con lo anterior y algunos otros cambios aplicados:

  import csv   HEADERS = ["first_name", "last_name", "wins", "losses"] TEMPLATE = "|{first_name:<30}|{last_name:<30}|{wins:<30}|{losses:<30}|{points:<30}"   def report_points(filename):     """     Reads the input file with players data.      Reports players with at least a single win calculating the total number of points.     """     header = TEMPLATE.format(first_name="1st name: ",                              last_name="2nd Name: ",                              wins="won: ",                              losses="lost: ",                              points="points: ")     print(header)      with open(filename, 'r') as file:         reader = csv.DictReader(file, HEADERS)         for player in reader:             wins = int(player["wins"])             if wins >= 1:                 print(TEMPLATE.format(**player, points=wins * 3), ' ')  if __name__ == '__main__':     report_points(r'prac2.txt')   

Si está en Python3.6, también buscaría usar f-strings9 En lugar de formatear a través de DictReader0 .

 

I would also switch to using csv module and the DictReader that will help make the code more readable by having column names assigned to each of the columns.

I would also improve on variable names - for instance, since each row in the input file represents a player, let's call it a player. The third column corresponds to the number of wins - let's call it wins. lol variable name does not make much sense, I would name it header since this is an output "table" header.

Other notes:

  • you don't need to close the file explicitly - the whole point of using the with context manager is to let Python close the file implicitly and safely
  • execute the function from under the if __name__ == '__main__': to avoid it being execute on import

Here is the code with the above and some other changes applied:

import csv   HEADERS = ["first_name", "last_name", "wins", "losses"] TEMPLATE = "|{first_name:<30}|{last_name:<30}|{wins:<30}|{losses:<30}|{points:<30}"   def report_points(filename):     """     Reads the input file with players data.      Reports players with at least a single win calculating the total number of points.     """     header = TEMPLATE.format(first_name="1st name: ",                              last_name="2nd Name: ",                              wins="won: ",                              losses="lost: ",                              points="points: ")     print(header)      with open(filename, 'r') as file:         reader = csv.DictReader(file, HEADERS)         for player in reader:             wins = int(player["wins"])             if wins >= 1:                 print(TEMPLATE.format(**player, points=wins * 3), '\n')  if __name__ == '__main__':     report_points(r'prac2.txt') 

If you are on Python3.6, I would also look into using f-strings instead of formatting via .format().

 
 

Relacionados problema

5  Analice un archivo CSV y devuelva un objeto o matriz  ( Parse a csv file and return an object or array ) 
Recientemente publiqué un módulo de JavaScript para NPM que también está disponible on Github por el nombre de Rawiki-Pars-CSV. El código lleva datos RAW C...

3  Cómo pedir a un usuario a guardar y regenerar algunas entradas en un archivo  ( Prompting a user to save and regenerate some entries in a file ) 
Quiero eliminar mi goto en este código, pero no estoy seguro de cómo. Debe haber una forma más limpia de escribir mi código. Tal vez mueva la declaración "IF"...

7  La forma más rápida de escribir un archivo CSV grande en Python  ( Fastest way to write large csv file in python ) 
Soy bastante nuevo para Python y Pandas, pero tratando de mejorar con él para analizar y procesar archivos de datos grandes. Actualmente estoy trabajando en u...

8  Python CSV a XML Converter  ( Python csv to xml converter ) 
Estoy creando una aplicación que se lee en los datos de un archivo CSV y crea un archivo XML usando LXML. El siguiente código funciona como se esperaba. Sin e...

24  Generando cuerdas CSV para varias utilidades de terceros  ( Generating csv strings for various 3rd party utilities ) 
Estoy generando cuerdas de CSV para varias utilidades de terceros y esta sección del código se repite en muchas clases. ¿Hay una mejor manera de generar esta ...

1  Copiando CSV a SQL_Table  ( Copying csv to sql table ) 
Escribí el código que lleva CSV y expórtelo a la tabla SQL. Parece esto: output_leftBound()1 Este método creará una tabla basada en la variable de nombr...

6  Herramientas de línea de comandos para formatear tablas  ( Command line tools to format tables ) 
Soy un gran fanático de un revestimiento usando sed awk 9988777665544332 y otras herramientas. Pero hay cosas difíciles de hacer en una sola línea, como...

3  Determinar los promedios de columnas  ( Determine column averages ) 
Estoy tratando de escribir código de TERSE PERL para calcular el promedio de cada columna en un archivo. El archivo puede tener & gt; = 1 columnas. use str...

4  73 líneas de mayhem - analizar, ordenar y guardar en CSV en PHP CLI  ( 73 lines of mayhem parse sort and save to csv in php cli ) 
Dentro de una carpeta llamada dispatch_sync(dispatch_get_main_queue(), ^{1 Tengo 138 archivos de texto (un total de 349 MB) lleno de direcciones de correo e...

4  Vectorizamos la prueba exacta de Fisher  ( Vectorize fishers exact test ) 
Tengo dos marcos de datos / listas de datos, humanSplit 9988776655544331 , y son del formulario > ratSplit$Kidney_F_GSM1328570 ratGene ratRepli...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos