Chat usando comandos -- python campo con beginner camp codereview Relacionados El problema

Chat using commands


7
vote

problema

Español

He estado aprendiendo Python y estaba tratando de hacer un sistema de chat que puede ser administrado por los comandos. Este es mi primer intento de escribir el código. ¿Tiene esto sentido o es el uso incorrecto de las clases?

Hay una clase 998877666554433111 que contendrá al usuario del chat. El catch2 La clase se utiliza para enviar mensajes y contar su longitud.

  catch3  
Original en ingles

I have been learning Python and was trying to make a chat system which can be run by commands. This is my first attempt to write the code. Does this make sense or is it wrong usage of classes?

There is a User class which will contain the user of the chat. The Message class is used to send messages and count their length.

class User:    def __init__(self):         self.users = []     def add_remove_user(self,input):         command, name = input[:1], input[1:]          if command == "+":             if not name in self.users:               self.users.append(name)         elif command == "-":             if name in self.users:                 self.users.remove(name)   class Message:     def __init__(self,user):         self._messages=[]         self._user=user      def __parseMessage__(self,message):         parsedMessage=tuple(message.split(":"))         return parsedMessage       def send_message(self,inputMessage):         user,message = self.__parseMessage__(inputMessage)         if user in self._user.users:             self._messages.append(message)      def sent_messages_count(self):         count=0         for message in self._messages:             count += len(message)          return count  class MessageClient:     def __init__(self):         self.user=User()         self.message=Message(self.user)      def send(self,inputMessage):         if inputMessage[0] == "+" or inputMessage[0] == "-":             self.user.add_remove_user(inputMessage)         else:             self.message.send_message(inputMessage)      def sent_message_length(self):         return self.message.sent_messages_count() 
     
 
 

Lista de respuestas

3
 
vote
vote
La mejor respuesta
 

Algunos comentarios sobre el estilo (basado principalmente en PEP8 ): < / p>

  • Uso para espacios para cada nivel de sangría
  • Use un espacio alrededor de los operadores binarios como =
  • Usa un espacio después de un , para un argumento
  • No use el estilo de nomenclatura de Camelcase: parsedMessage - & gt; parsed_message , inputMessage - & gt; & gt; & gt; input_message .
  • Trate de no usar los nombres de funciones incorporados ( 9988777665544336 )
  • Para los métodos privados, los nombres usan un solo subrayado (hay un caso de uso para subrayar doble guía en la herencia compleja, pero ese no es el caso aquí)
  • Uso x not in y en lugar de not x in y
  • escribe doctras ( pep257 )

Algunos otros comentarios:

  • ¿Por qué tener un método 99887776655544339 ? Tener ambos ,0 y 99887766555443311 sería más legible.
  • Para los usuarios, es probable que desee usar un ,2
  • Tenga cuidado con la longitud ,3 . Probablemente desee ,4 para evitar problemas con los mensajes que contienen puntos de color.
  • ,5 y ,6 No parece implementar lo que esperaría de su nombre
  • Uso ,7 En lugar de anidar ,8 sentencias. Por ejemplo, en lugar de esto:

      ,9  

    Escribe esto:

      parsedMessage0  

 

A few comments regarding style (mainly based on PEP8):

  • Use for spaces for each level of indentation
  • Use a space around binary operators like =
  • Use a space after a , for an argument
  • Do not use the camelCase naming style: parsedMessage -> parsed_message, inputMessage -> input_message.
  • Try not to use built-in function names (input)
  • For private methods names use a single underscore (there's a use case for double leading underscore in complex inheritance, but that's not the case here)
  • Use x not in y instead of not x in y
  • Write docstrings (PEP257)

Some other comments:

  • Why have an add_remove_user method? Having both add_user and remove_user methods would be more readable.
  • For the users you probably want to use a set
  • Be careful with length message.split(':'). You probably want message.split(':', 1) to avoid problems with messages that contain colons in them.
  • sent_message_length and sent_message_count don't seem to implement what I would expect from their name
  • Use and instead of nesting if statements. For example, instead of this:

    if command == "+":     if not name in self.users:         self.users.append(name) 

    write this:

    if command == "+" and name not in self.users:     self.users.append(name) 
 
 
   
   

Relacionados problema

5  Colector de archivos M3U  ( M3u file collector ) 
Soy nuevo en Python y escribió este código para recopilar todos los archivos en un archivo M3U (Lista de reproducción) y copiándolos en un directorio. impo...

2  Formulario básico de comentarios de PHP  ( Basic php comment form ) 
Soy un novato de programación. He escrito este simple script PHP para ejecutar un formulario de comentarios muy básico y apreciaría cualquier comentario, espe...

12  Autenticación simple en ASP.NET MVC 5  ( Simple authentication in asp net mvc 5 ) 
Estoy construyendo una aplicación ASP.NET MVC 5 y, por razones que son irrelevantes en este punto, estoy intentando construir mi propio medio para autenticar ...

2  Devuelve verdadero si los elementos de una matriz no contienen uno u otro  ( Return true if the elements of an array do not contain one or the other ) 
Estoy completando gradualmente los ejercicios de codificación para Java. Aquí está el uno acabo de hacer: Dada una matriz de INTS, devuelva verdadera si ...

2  Pequeño bot de Twitter hecho en Python  ( Small twitter bot made in python ) 
Acabo de empezar a jugar con Python y he decidido crear un pequeño script que publique Tweets cada hora (Cronjob en Ubuntu) diciendo qué hora es. ¿No estoy ...

6  Palindrome más largo en una matriz  ( Longest palindrome in an array ) 
Soy nuevo en la programación, y creo que este código podría mejorarse. ¿Alguna sugerencia? 'done'0 ...

1  Script por lotes para descargar y extraer nodos.js y paquetes NPM  ( Batch script to download and extract node js and npm packages ) 
El siguiente es mi primer intento real de Scripting por lotes, y lo soy nuevo, así que no estoy seguro de si lo que he hecho es practicar mejor. El código fun...

1  Actualización de una página web de DRUPAL con contenido basado en texto ingresado  ( Updating a drupal web page with content based on inputted text ) 
La intención es actualizar una página web de drupal existente con contenido basado en texto ingresado en un cuadro de texto. La página existente muestra dat...

1  ¿Cómo hacer que esta clase de lector de TLV se vea mejor y funciona más suave?  ( How to make this tlv reader class look nicer and work smoother ) 
Soy bastante nuevo para Java y estaba tratando de mejorar un poco mis habilidades haciendo un lector de archivos binarios. El elegido fue el tlv formato. He...

3  Aplanar para obtener todos los controles infantiles de cierto tipo en una UIView  ( Flatten to get all child controls of certain type in a uiview ) 
extension Array { func flatten<TResult>(transform: (T) -> TResult?, childArray: (T) -> [T]) -> [TResult] { var result = [TResult]() for ...




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