#python #string #floating-point
Вопрос:
Я использую файл txt: https://drive.google.com/file/d/1-VrWf7aqiqvnshVQ964zYsqaqRkcUoL1/view?usp=sharin
Я запускаю сценарий:
data = f.read()
ny_sum=0
ny_count=0
sf_sum=0
sf_count=0
for line in data.split('n'):
print(line)
parts = line.split('t')
city = parts[2]
amount = float(parts[4])
if city == 'San Francisco':
sf_sum = sf_sum amount
elif city == 'New York':
ny_sum = ny_sum amount
ny_count = ny_count 1
ny_avg = ny_sum / ny_count
sf_avg = sf_sum / sf_count
#print(ny_avg, sf_avg)
f = open('result_file.txt', 'w')
f.write('The average transaction amount based on {} transactions in New York is {}n'.format(ny_count, ny_avg))
f.write('The average transaction amount based on {} transactions in San Francisco is {}n'.format(sf_count, sf_avg))
if ny_avg>sf_avg:
f.write('New York has higher average transaction amount than San Franciscon')
else:
f.write('San Francisco has higher average transaction amount than New Yorkn')
f.close()
И я ВСЕГДА получаю ошибку:
Ошибка значения: не удалось преобразовать строку в плавающую: »
Я довольно новичок в Python, и я действительно не уверен, что я здесь делаю не так. Я пытаюсь получить средние значения для Нью-Йорка и Сан-Франциско, а затем экспортировать результаты И сравнение в файл результатов txt
Комментарии:
1. Единственное место, которое вы преобразуете в поплавок, находится здесь:
2.
amount = float(parts[4])
3. Так что, по-видимому, он получает значение, которое не может быть преобразовано в значение с плавающей точкой, возможно, пустую строку или что-то с буквами
4. В последней строке файла недостаточно токенов. Смотрите мой ответ ниже
Ответ №1:
Это должно дать вам то, что вы ищете:
from collections import defaultdict as DD
with open('New Purchases.txt') as pfile:
sums = DD(lambda: [0.0, 0])
for line in [line.split('t') for line in pfile]:
try:
k = line[2]
sums[k][0] = float(line[4])
sums[k][1] = 1
except Exception:
pass
for k in ['San Francisco', 'New York']:
v = sums.get(k, [0.0, 1])
print(f'Average for {k} = ${v[0]/v[1]:.2f}')
Ответ №2:
Я перестроил код. Я согласен с BrutusFocus в том, что расколы затрудняют точное чтение местоположения в каждой строке. Я установил его так, чтобы, если он видит местоположение в любой точке строки, он считал его.
with open("data.txt", "r") as f:
data = f.read()
ny_sum=0
ny_count=0
sf_sum=0
sf_count=0
for line in data.split('n'):
parts = line.split('t')
city = parts[2]
amount = float(parts[4])
print(city, amount)
if "New York" in line:
ny_sum = ny_sum amount
ny_count = ny_count 1
elif "San Francisco" in line:
sf_sum = sf_sum amount
sf_count = sf_count 1
ny_avg = ny_sum / ny_count
sf_avg = sf_sum / sf_count
#print(ny_avg, sf_avg)
f = open('result_file.txt', 'w')
f.write('The average transaction amount based on {} transactions in New York is
{}n'.format(ny_count, ny_avg))
f.write('The average transaction amount based on {} transactions in San
Francisco is {}n'.format(sf_count, sf_avg))
if ny_avg>sf_avg:
f.write('New York has higher average transaction amount than San Franciscon')
else:
f.write('San Francisco has higher average transaction amount than New Yorkn')
f.close()
Комментарии:
1. Спасибо за ответ, но я все еще в замешательстве, даже с вашим перестроенным сценарием, я ВСЕ равно получаю ту же самую ошибку. Я не уверен, что именно не так с плавающей строкой