Python输出8列数据列表时报unsupported format string错误如何解决
报错原因
- 循环内
print的format参数错误传入了nombre_empleado、cedula、horastrabajadas三个完整列表,而非当前索引n对应的单个元素。Python字符串格式化无法直接按指定的长度格式处理列表对象,因此抛出该错误。 - 额外问题:你定义了
empleadonum作为员工ID,但输出第一列用了从0开始计数的n,和表头的ID定义不匹配。
修复方案
修改循环内format的参数,给三个列表增加索引[n]取对应位置的单个元素,同时调整列宽避免长内容折行、给数值增加保留两位小数的格式优化输出效果,修正后代码如下:
empleadonum =[1,2,3,4,5,6,7,8,9,10] nombre_empleado = ['Juan Medina', 'Lucho Espino', 'Jose Alejandro', 'Sebastian Sandoval', 'Maria Rodriguez', 'Jacky Zamora', 'Ernesto Dominguez', 'Nahuel Damitra', 'Maria ALejandra', 'Arnaldo Moreno'] cedula = ['7-711-2153', '123123123', '23231231', '2132123', '2326566', '123655', '56567244', '12312312', '8779898', '1231231'] horastrabajadas = [25.0, 20.0, 20.1, 30.2, 56.3, 21.3, 20.2, 40.1, 21.0, 21.0] pagoporhora = 7.5 salariobruto = 0.0 segurosocial = 0.0 n=0 print( "{:<10} {:<20} {:<15} {:<18} {:<15} {:<15} {:<18} {:<15}" .format ('ID','Nombre', 'Cédula', 'Horas trabajadas', 'Pago por hora', 'Salario bruto', 'Total deducciones', 'Sueldo por pagar')) while n < 10: salariobruto =horastrabajadas[n]*8.1 segurosocial = salariobruto*0.0975 seguroeducativo = salariobruto * 0.0125 impuestorenta = salariobruto * 0.10 totaldeducciones = segurosocial + seguroeducativo + impuestorenta salariofinal = salariobruto - totaldeducciones print("{:<10} {:<20} {:<15} {:<18} {:<15} {:<15.2f} {:<18.2f} {:<15.2f}".format(empleadonum[n], nombre_empleado[n], cedula[n], horastrabajadas[n], pagoporhora, salariobruto, totaldeducciones, salariofinal)) n=n+1 print("gracias")
内容的提问来源于stack exchange,提问作者Preguntador simple
相关产品推荐
相关产品推荐

