2014-11-10 4 views
1

Trouble с питоном 3x с входом и выходом из файловЧтения из файла в Python, с расщеплением

Таким образом, Im делает задание для моего компьютера класса науки и у меня небольшая проблема. Мой профессор хочет, чтобы мы добавили некоторые строки кода, которые требуют, чтобы программа открывала файл .txt и считывала данные из файла .txt через программу. В этом случае моя программа представляет собой ежемесячную платежную программу. Обычно вы просите пользователя указать, сколько он/она заимствует, процентную ставку и срок в годах. Но данные для всех трех из них уже предварительно записаны в файле .txt, в котором он хочет, чтобы мы считывали данные. Теперь у меня проблемы с моим кодом.

Это мой код:

import decimal 

print("\t".join(s.rjust(15) for s in ("Payment", "Amount Paid", "Balance"))) 
print("-"*54) 

filename = "LoanData.txt" 
values = [] 

with open(filename) as f: 
    for line in f: 
     values.append([int(n) for n in line.strip().split(' ')]) 
for arr in values: 
    try: 
     balance,rate,term = arr[0],arr[1],arr[2] 
    except IndexError: 
     print ("Index error occured, a line doesn't have the crucial amount of entries.") 

balance *= (1 + rate * term) 
payment = balance/(12 * term) 
total = 0 
for month in range(12 * term): 
    if balance < payment: 
     payment = balance 
    print(("{: >15.2f}\t"*3)[:-1].format(payment, total, balance)) 
    total += payment 
    balance -= payment 

и это им ошибка при получении:

Traceback (most recent call last): 
File "C:/Users/Python/Desktop/loan.py", line 11, in <module> 
values.append([int(n) for n in line.strip().split(' ')]) 
File "C:/Users/Python/Desktop/loan.py", line 11, in <listcomp> 
values.append([int(n) for n in line.strip().split(' ')]) 
ValueError: invalid literal for int() with base 10: '5.5' 

Это то, что файл выглядит следующим образом:

5000 5.5 10 
25000 10.0 10 
100000 8.5 20 

ответ

1

Причина, по которой это не работает, заключается в том, что вы пытаетесь преобразовать десятичное значение (например, 5.5) в int. Теперь, даже если вы измените его, чтобы преобразовать к поплавку, дополнительное исправление по-прежнему необходимо, как вы не можете использовать поплавок в качестве итератора для для цикла:

1.Change

balance,rate,term = arr[0],arr[1],arr[2] 

К

balance,rate,term = int(arr[0]),arr[1],int(arr[2]) 

2.Изменение:

values.append([int(n) for n in line.strip().split(' ')]) 

Для

values.append([float(n) for n in line.strip().split(' ')]) 

Это должно заставить ваш код работать. То, что он делает, это преобразовать все входы в float, а затем преобразовать баланс и термин в целые числа, чтобы они могли использоваться в вашем цикле for. Я пробовал код на своем ПК, и он должен работать.

+0

Он работает в определенной степени, это то, что он печатает, хотя: Оплата \t Сумма Paid \t Баланс ------------------------- ----------------------------- 71250,00 \t 0,00 \t 17100000,00 71250,00 \t 71250,00 \t 17028750,00 71250,00 \t 142500,00 \t 16957500,00 Он держит делая это для 100 строк –

+0

Есть ли что-то не так с этим выходом, или это правильный вывод? –

+0

Ну, это неправильно, но я думаю, что это может быть математика. В основном я пытаюсь рассчитать сумму кредита в месяц, и есть только 3 строки в тексте, а вот почему я не понимаю, почему он дает мне 400. –

0

См отслеживающий исключения , Ошибка указана в строке 11, и в основном она говорит, что «5.5» не является int. Что правильно - это поплавок (десятичный). Line 11 в настоящее время:

values.append([int(n) for n in line.strip().split(' ')]) 

Try:

values.append([float(n) for n in line.strip().split(' ')]) 
0

Вы пытаетесь вызвать int() на десятичное значение, или float в питона. Вот почему он не работает. попробуйте int('5.5') в вашей интерактивной оболочке (IDLE), и вы получите ту же ошибку.

Попробуйте это:

values.append([int(float(n)) for n in line.strip().split()]) 

Это будет делать работу, если вы не против потери точности ваших ценностей, int округляет их до целого числа, и если вы не против их все будут плавать, тогда просто используйте float вместо int

Смежные вопросы