Suma de elementos combinados de un archivo -- python campo con list campo con text camp Relacionados El problema

Sum of combined elements from a file


1
vote

problema

Español

Soy bastante nuevo en Python y estoy atrapado en la construcción de la lógica para mi programa. Quiero aprender, pero siento que necesito ayuda externa. Tal vez ustedes pueden ayudarme. Esta es la tarea / proyecto.

El list (SalesData.txt) parece esto:

  • Nombre 1
  • 23
  • 34
  • 454
  • Nombre 2
  • 344
  • 34
  • 45

y continúa por al menos 5 nombres diferentes. Pero por ejemplo, esto lo hará.

Básicamente, necesito encontrar un total de todos los números y luego, un total para cada nombre.

Salida :: en este caso (usando el ejemplo)

  1. Gran total = 934 (suma de todos los números)
  2. nombre 1 total = 511 (suma de números para nombre 1)
  3. Nombre 2 Total = 423 (suma de números para nombre 2)

Sé cómo obtener una suma total de un archivo que contiene solo números, pero cuando se trata de una mezcla, estoy muy confundido. Además, ¿cómo puedo especificar para obtener el total de cada uno "name" ? ¿Debo usar el public IQueryable<CustomerMain> testing() { var context = new CustomerEntities(); var query = context.CustomerMains .Where(p=> p.FirstName == "Thor") .Select(p => new CustomerMain {FirstName=p.FirstName,LastName =p.LastName}); return query; } 0 y public IQueryable<CustomerMain> testing() { var context = new CustomerEntities(); var query = context.CustomerMains .Where(p=> p.FirstName == "Thor") .Select(p => new CustomerMain {FirstName=p.FirstName,LastName =p.LastName}); return query; } 1111 Para decir la lista Cuándo sumar y cuándo no resumir?

¿Algún consejo me ayudará! ¡Gracias!

actualización Este es mi código hasta ahora:

  public IQueryable<CustomerMain> testing() {         var context = new CustomerEntities();          var query = context.CustomerMains             .Where(p=> p.FirstName == "Thor")             .Select(p => new CustomerMain {FirstName=p.FirstName,LastName =p.LastName});          return query; } 2  

Esto solo funciona si el archivo es todos los números, eso es bastante fácil sumar el contenido. Pero recuerde, estoy lidiando con una cadena cada 12 números. Estoy tratando de imaginar cómo simplemente hacer la suma solo cuando encuentra una línea con un flotador.

update # 2

¡Todavía me gustaría alguna guía! Estoy empezando a envolver las cosas a mi manera, pero encuentro algunos problemas muy básicos (estoy seguro)

  public IQueryable<CustomerMain> testing() {         var context = new CustomerEntities();          var query = context.CustomerMains             .Where(p=> p.FirstName == "Thor")             .Select(p => new CustomerMain {FirstName=p.FirstName,LastName =p.LastName});          return query; } 3  

Sé que este ejemplo no funciona y quiero saber por qué. Estoy tratando de analizar la lista. Si 'i' es una cadena, el programa (en este ejemplo de letra de impresión ")) si no es una cadena, hará la suma regular de los números. Estoy tomando este programa una pieza en ese momento, quiero poder obtener una suma total de números utilizando la lista proporcionada mixta, pero estoy atrapado en el aspecto de analizar las cuerdas como cuerdas y flotantes como flotadores.

Original en ingles

I'm pretty new to Python and I'm stuck in building the logic for my program. I want to learn, but I feel I need some external help. Maybe you guys can help me. This is Homework/Project.

The list (SalesData.txt) looks like this:

  • Name 1
  • 23
  • 34
  • 454
  • Name 2
  • 344
  • 34
  • 45

And it continues for at least 5 different names. But for the example, this will do.

Basically, I need to come up with a TOTAL of all the numbers and then, a total for every name.

Output :: In this case (using example)

  1. Grand Total = 934 (sum of all the numbers)
  2. Name 1 Total = 511 (sum of numbers for Name 1)
  3. Name 2 Total = 423 (sum of numbers for Name 2)

I know how to get a total sum of a file containing ONLY numbers, but when it comes to a mixture I'm very confused. Also, how can I specified in getting the Total of every single "name". should I use the .isdigit() and .isalpha() to tell the list when to sum and when to not sum?

Any advise will help me! thanks!

UPDATE This is my code so far:

data = [] data = open("SalesData.txt").read().split()     for i in data:         s = sum([ float(i) ]) print "Sum=" , s print "Avg="  , s/len(data) 

This only works if the file is all NUMBERS, that's pretty easy to sum the contents.but remember, I'm dealing with a String every 12 numbers. I'm trying to figure how to just do the sum only when it finds a line with a float.

Update #2

I would still like some guidance! I'm beginning to wrap things up in my own way, but I find some very basic trouble (I'm sure)

data = [] data = open("SalesData.txt").read().split()     for i in data:         if str(i):             print 'This one is Letter'         elif float(i):             s = sum([ float(i) ]) print "Sum=" , s print "Avg="  , s/len(data) 

I know this example doesn't work and I want to know why. I'm trying to analyze the list. IF 'i' is a string, the program will (in this example print 'Letter') if it's not a string, it will do the regular sum of numbers. I'm taking this program one piece at the time, I want to be able to get a total sum of numbers using the mixed provided list, but I'm stuck in the aspect of analyzing the strings as strings and floats as floats.

        

Lista de respuestas

3
 
vote

NOTA QUE .isdigit() devolverá False Si tiene un valor no entero o negativo (por ejemplo, 342.2 o -342), de modo que puede que no sea un buen mecanismo para usar.

Como señaló Kreeativitea, int() se puede usar para discernir palabras de números (enteros, específicamente), pero considere que float() funcionaría en el caso más general cuando los números Puede ser un punto entero o flotante.

 

Note that .isdigit() will return False if you have a non-integer or negative value (e.g. 342.2 or -342), so that may not be a good mechanism to use.

As Kreativitea noted, int() may be used to discern words from numbers (integers, specifically), but consider that float() would work in the more general case when the numbers may be integer or floating point.

 
 
   
   
2
 
vote

Dado que esta es la tarea, solo daré directrices generales.

  1. no necesitas usar isdigit o isalpha. ¿Qué sucede cuando intenta usar un int() en algo que no es un entero? De acuerdo, ahora tienes un proceso que discierne entre los dos grupos.
  2. ¿La lista de números siempre tendrá el mismo número de artículos después de eso? Si no, un bucle sum5 puede ser una buena idea.
  3. En cualquier caso, ¿qué calidad tiene los datos, como en, describen los datos en términos abstractos? ¿Qué estructuras de datos se asignan bien a ese tipo de datos?
  4. romper el proceso; Es mejor crear dos funciones que sean fáciles de leer que una función que es difícil de leer.

buena suerte. :)

 

Since this is homework, I will just give general guidelines.

  1. You don't need to use isdigit or isalpha. What happens when you try to use an int() on something that isn't an integer? Okay, now you have a process that discerns between the two groups.
  2. Will the list of numbers always have the same number of items after it? If not, a while loop might be a good idea.
  3. In either case, what quality does the data have, as in, describe the data in abstract terms. What data structures maps well to that kind of data?
  4. Break up the process; it's better to create two functions that are easy to read than one function that's difficult to read.

Good luck. :)

 
 
 
 
0
 
vote

Suponiendo que los nombres son únicos, puede llenar una DICT < / A> del archivo para que las claves sean nombres y valores que sean listas de números. Luego será fácil obtener sum para cada elemento y también un sum de sumas.

Para construir un DICT, necesita armar un parser simple. Por ejemplo:

  def parse(fname):     data = {}     numbers = []     for line in f:        # figure out if line has name or number        if ... # this is a number            numbers.append(float(line))        else:            data[name] = numbers     return data   

Esto no es un código completo, porque es una pregunta de tarea. También tenga en cuenta que probablemente necesite cuidar correctamente el primer nombre que lee en la primera línea.

 

Assuming the names are unique, you can fill a dict from the file so that keys are names and values are lists of numbers. Then it'll be easy to get sum for each item and also a sum of sums.

To build a dict, you need to put together a simple parser. For instance:

def parse(fname):     data = {}     numbers = []     for line in f:        # figure out if line has name or number        if ... # this is a number            numbers.append(float(line))        else:            data[name] = numbers     return data 

This is not full code, because it's a homework question. Also note that you probably need to correctly take care of the very first name you read on the first line.

 
 
 
 
0
 
vote

Con respecto a la actualización # 2: Hay varios problemas lógicos aquí.

primero, if str(i): no significa "si i es una cadena, ...". Significa "Crear una cadena de i ; Ahora, si la cadena resultante no está vacía, ...".

Segundo, i proviene de data , que es una lista de líneas del archivo. Así que debe ser una cadena. Eso es lo que obtienes cuando lees un archivo. No se hace ningún intento para interpretar los diversos símbolos como números hasta que le diga al programa a .

Tercero, cuando falla tal conversión, fallará al elevar una excepción. No puede probarlo con un bloque try5 . Debe usar try / except Manipulación de excepciones.

CUARTO, está intentando calcular s Cada vez que obtiene un número, usando una lista de un elemento con ese número. Eso no va a darte una suma de todos los números. Si desea sumar varios números, debe poner los números juntos en algún lugar primero.

quinto, use len(data) como el recuento de números para dividir la suma por. Esto es incorrecto, ya que ese es el número de líneas en su archivo, y ya ha dicho que algunos de ellos pueden ser excluidos. Usted quiere contar solo los números, lo que nuevamente requiere poner esa lista juntos primero.

Escribe algo que puede darle la lista de números primero, y luego es una simple cuestión de usar i0 y i1111 con esa lista (una vez, fuera de el bucle).

 

Regarding update #2: there are several logical problems here.

First off, if str(i): does not mean "if i is a string, ...". It means "create a string from i; now, if the resulting string is non-empty, ...".

Second, i comes from data, which is a list of lines of the file. So it must be a string. That's what you get when you read a file. No attempt is made to interpret the various symbols as numbers until you tell the program to.

Third, when such a conversion fails, it will fail by raising an exception. You cannot test for that with an if block. You must use try/except exception handling.

Fourth, you are trying to calculate s every time you get a number, using a one element list with just that number. That's not going to give you a sum of all the numbers. If you wan to sum several numbers, you have to put the numbers together somewhere first.

Fifth, you use len(data) as the count of numbers to divide the sum by. This is wrong since that is the number of lines in your file, and you've already said that some of them might be excluded. You want to count up just the numbers, which again requires putting that list together first.

Write something that can give you the list of numbers first, and then it is a simple matter of using sum and len with that list (once each, outside of the loop).

 
 

Relacionados problema

2  Imprimiendo tanto la línea y las líneas coincidentes ± 1 sobre la coincidencia regex (1 linero)  ( Printing both the matched line and lines %c2%b11 upon regex match 1 liner ) 
¿Cómo puedo imprimir una línea emparejada, así como una línea antes y después de ella? Actualmente tengo: perl -lane 'print if $F[3] > 100000 && $F[2] =~ /...

76  Cómo romper la palabra después de un carácter especial como guiones (-)  ( How to break word after special character like hyphens ) 
Dado un CSS relativamente simple: div { width: 150px; } <div> 12333-2333-233-23339392-332332323 </div> ¿Cómo lo hago para que la cade...

17  Cómo eliminar Acentos y Tilde en un C ++ Std :: String  ( How to remove accents and tilde in a c stdstring ) 
Tengo un problema con una cadena en C ++ que tiene varias palabras en español. Esto significa que tengo muchas palabras con acentos y tildes. Quiero reemplaza...

1  Documento, formato de texto  ( Document text format ) 
Para mi proyecto, necesito editor de documentos para muchos tipos de documentos (datos tabulares, facturas, cartas, algunos formulares, ...) y estoy buscando ...

0  Python Tkinter desplazando dos widgets de texto al mismo tiempo con las teclas de flecha  ( Python tkinter scrolling two text widgets at the same time with arrow keys ) 
Estoy construyendo una GUI que tiene 2 widgets de texto. (Quiero decir que tiene un montón de cosas, pero el bien de esta pregunta le permite dejarlo en 2 wid...

0  Inferencia de texto Android  ( Text invertion android ) 
cualquiera sabe cómo escribir texto al revés de la edición de texto en Android gracias / minhaz ...

0  MySQL: Posible pérdida de datos UTF de la conversión de tipo de campo de caracteres de texto?  ( Mysql possible loss of utf data from char to text field type conversion ) 
Tengo una base de datos que utilizo para una aplicación web de Idioma / Vocabulario extranjero y se conectó con él a través de PhpMyAdmin (y, por supuesto, PH...

1  C #: ¿Qué debería ser la expresión regular para esto?  ( C what should the regular expression be for this ) 
Sé que hay muchos asn.1 analizador por ahí, pero cuestan bastante Lote y como tal, estoy tratando de escribir mi propia. Soy un poco nuevo para la expresi...

8  ¿Use la tecla TAB-TABLE en un texto multilíneo archivado en SWT?  ( Use tab key on a multiline text filed in swt ) 
¿Cómo evito un campo de texto de múltiples líneas de las pulsaciones de teclas de pestaña "robar"? Me refiero: Me gustaría usar la pestaña en el ciclo entre...

0  ActionScript 3, lee el texto del archivo en el tiempo de compilación?  ( Actionscript 3 read file text at compile time ) 
Hay alguna manera de hacer que el flash coloque el contenido de un archivo de texto en una cadena, o al menos lo ponga en el .swf, ¡así que el usuario no nece...




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