Python - Ejercicio basico de python

 
Vista:

Ejercicio basico de python

Publicado por Gemima (1 intervención) el 26/04/2025 00:43:27
Hola, esperando que alguien me ayude con este problema porfavor:

7.2 Escribir un programa que solicita un nombre de archivo, a continuación, abre el archivo y lee a través del archivo, en busca de líneas de la forma:
X-DSPAM-Confidence: 0.8475
Cuenta estas líneas y extrae los valores de coma flotante de cada una de las líneas y calcula el promedio de esos valores y produce una salida como se muestra a continuación. No uses la función sum () o una variable llamada sum en tu solución.
Puedes descargar los datos de muestra en http://es.py4e.com/code3/mbox-short.txt para probar la función, ingrese mbox-short.txt como el nombre del archivo.

el resultado debe ser:
Average spam confidence: 0.750718518519

mi codigo es el siguiente;
fname = input("Ingrese el nombre del archivo: ")
fh=open(fname)
inp=fh.read()
count = 0
total = 0
for linea in fh:
if linea.startswith("X-DSPAM-Confidence:"):
punto = linea.find(":")
numero = float(linea[20:26])
count=count+1
total=total+numero
promedio=total/count
print("Average spam confidence:", promedio)

yo solo quiero imprimir el ultimo valor de la iteraciones.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ejercicio basico de python

Publicado por tincopasan (1087 intervenciones) el 26/04/2025 07:59:03
hola:
bueno, ya casi lo tenés, hice solo unos cambios y le doy la sangría correcta.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fname = input("Ingrese el nombre del archivo: ")
with open(fname) as fh:  # uso with porque cuando termine cierra el archivo
  count = 0
  total = 0
  for linea in fh:
    if linea.startswith("X-DSPAM-Confidence:"):
        punto = linea.find(":")
        numero = float(linea[20:26])
        count += 1
        # es un poco más corto de escribir y parece más python, se puede como estaba
        total += numero
 
promedio = total/count
print(f"Average spam confidence: {round(promedio, 12)}")
#le di formato a la cadena y redondeo la parte decimal para que de el mismo resultado buscado

pocos cambios y listo.
consejo: hay un tag </> Código para que veamos mejor que indentación estás usando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Ejercicio basico de python

Publicado por Rolando José (66 intervenciones) el 09/05/2025 04:54:52
bueno aqui te lo dejo con GUI, en tcltk para que lo ejecutes con python y tkinter donde puedes seleccionar el archivo que desees filtrar y con el filtro que necesitas, donde %f reemplaza al valor decimal que se requiere para hacer el promedio.

Ver lineas te muestra el calculo de cada linea coincidente con el filtro.

filtrando_texto
texto_filtrado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import tkinter as tk
w=tk.Tk()
 
code='''
catch {destroy .fi}
toplevel .fi -bg #AAA
wm geometry .fi "800x800+500+0"
wm withdraw .
set filtro "X-DSPAM-Confidence: %f"
set verbose 0
place [button .fi.l0 -text "Archivo:" -command {
if {![file exist $arch]} {set arch [tk_getOpenFile -filetypes {{{txt} {*.txt}} {{all} {*.*}}}]}
set fh [open $arch r]
set data [read $fh]
close $fh
.fi.f0.t insert end $data
}] -x 10 -y 0 -width 150
place [entry .fi.e0 -textvar arch -width 60] -x 200 -y 10 -width 500
place [button .fi.l1 -text "Filtro:" -command {
        .fi.f0.t delete 0.0 end
	set suma 0.0
	set n 0
	foreach {line} [split $data "\n"] {
		if {[scan $line $filtro valor]>=1} {
			.fi.f0.t insert end "\n$line\n$valor"
			set suma [expr {$suma + $valor}]
			set prom [expr $suma/$n]
			incr n
		if {$verbose==1} {.fi.f0.t insert end "$line ==>$valor=+=>$suma=~=>[expr $suma/$n]"}
		}
	}
.fi.f0.t insert 0.0 "\nPromedio: [expr $suma/$n]\n"
.fi.f0.t insert end "\n\n========\n========FIN\n========\n========"
}]  -x 10 -y 60 -width 150
place [checkbutton .fi.vb -text "ver lineas" -variable verbose] -x 550 -y 60
place [entry .fi.e1 -textvar filtro -width 60] -x 200 -y 70 -width 300
place [frame .fi.f0 -bg #FFD -width 800 -height 600] -x 0 -y 120
place [scrollbar .fi.f0.sy -command {.fi.f0.t yview} -width 20] -x 0 -y 0 -height 600
place [text .fi.f0.t -undo 1 -tabs 50 -font "arial 16" -yscrollcommand {.fi.f0.sy set}] -x 20 -y 0 -width 800
'''
w.eval(code)
w.mainloop()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar