#python #file-io
#python #file-io
Вопрос:
Я пытаюсь прочитать из файла, который содержит названия городов, показания одометра и количество оставшегося топлива. Содержимое текстового файла:
Kennewick 97840.4 40.0<br>
Benton_City 97861.3 37.6<br>
Prosser 97878.2 35.9<br>
Grandview 97886.5 35.0<br>
Sunnyside 97894.6 34.1<br>
Granger 97904.6 33.1<br>
Toppenish 97913.0 32.2<br>
Wapato 97921.7 31.3<br>
Union_Gap 97931.6 30.4<br>
Yakima 97935.2 30.0<br>
Selah 97939.4 29.6<br>
Ellensburg 97972.7 26.0<br>
Thorp 97981.1 25.1<br>
Rosyln 98002.8 22.6<br>
Easton 98016.1 21.1<br>
North_Bend 98058.1 16.9<br>
Preston 98067.7 16.0<br>
Issaquah 98073.6 15.4<br>
East_Gate 98082.9 14.4<br>
Mercer_Island 98088.5 13.7<br>
Seattle 98095.4 13.0<br>
Частью назначения является вычитание текущего считывания из последнего считывания (оба этих значения хранятся в переменной miles).
def BusRoute():
path = "C:\"
ext = ".txt"
lines = ""
stopname = ""
miles = 0
prevmiles = 0
milest = 0
fuel = 0.0
mpg = 0.0
i = 0
filename = input("Please enter the file name. The file path [C:...] and extension [*.txt] is not required: ")
inFile = open(path filename ext, "r")
for lines in inFile:
stopname, miles, fuel = lines.split(" ")
miles = float(miles)
fuel = float(fuel)
prevmiles = miles
milest = miles - prevmiles
miles = 1
print("Since last stop:", float(milest), "miles")
Моя проблема в том, что я пытаюсь сохранить последнее прочитанное значение miles
в вызываемой переменной prevmiles
, а затем вычесть prevmiles
(последнее прочитанное значение пробега) из ТЕКУЩЕГО значения miles
, но оно продолжает вычитать текущее miles
значение из текущего miles
, очевидно, делая значение, которое я хочу распечатать, равным 0.0.
Ответ №1:
У вас есть
prevmiles = miles
milest = miles - prevmiles
что гарантирует, что наименьшее значение будет равно 0. Попробуйте просто изменить порядок этих двух строк.
Комментарии:
1. Итак, я попробовал это только сейчас, и он выводит первое «С момента последней остановки: -97840,4 мили», и все равно выводит 0.0 для остальных.
Ответ №2:
Здесь происходят две вещи:
- вам нужно инициализировать
stopname
,prevmiles
, иfuel
первой строкой файла, и - вам нужно поменять местами две строки, в которых вы назначаете
miles
prevmiles
.
Вот обновленная функция:
def BusRoute():
path = "C:\"
ext = ".txt"
lines = ""
stopname = ""
miles = 0
prevmiles = 0
milest = 0
fuel = 0.0
mpg = 0.0
i = 0
filename = input("Please enter the file name (no extension)").strip()
inFile = open(path filename ext, "r")
stopname, prevmiles, fuel = inFile.readline().split()
prevmiles = float(prevmiles)
fuel = float(fuel)
for lines in inFile:
stopname, miles, fuel = lines.split(" ")
miles = float(miles)
fuel = float(fuel)
milest = miles - prevmiles
prevmiles = miles
miles = 1
print("Since last stop:", float(milest), "miles")
Комментарии:
1. Большое вам спасибо. Этот код работал; все, что я с ним сделал, это немного изменил его, чтобы он соответствовал согласованному формату для остальных моих программ.
Ответ №3:
Вы должны просто изменить порядок операций. Сначала выполните вычитание, а затем присвоите значение prevmiles .
Комментарии:
1. Я думаю, что то, что вы говорите, похоже на то, что ответил другой человек, но пока это работает не совсем так, как мне нужно. Для первого он показывает «С момента последней остановки: -97840,4 мили», а для остальных по-прежнему выводит 0.0.
Ответ №4:
Я переключил две строки и получил то, что, как я думаю, вы ищете.
prevmiles = miles
milest = miles - prevmiles
Примечание — Этот код предназначен для Python 2.5.4, поэтому синтаксис изменяется в нескольких частях, и из
-за того, что в конце строки плавающие значения для fuel выдавали ошибки, поэтому я прокомментировал это.
def BusRoute():
path = "C:\"
ext = ".txt"
lines = ""
stopname = ""
miles = 0
prevmiles = 0
milest = 0
fuel = 0.0
mpg = 0.0
i = 0
filename = raw_input("Please enter the file name. The file path [C:...] and extension [*.txt] is not required: ") #raw_input for text in Python 2.5
inFile = open(path filename ext, "r")
for lines in inFile:
stopname, miles, fuel = lines.split(" ")
miles = float(miles)
##fuel = float(fuel) (Gives me an error message)
milest = miles - prevmiles
prevmiles = miles
miles = 1
print "Since last stop:", float(milest), "miles" #Print syntax is different in Python 2.5
BusRoute()
Выдает результат:
Please enter the file name. The file path [C:...] and extension [*.txt] is not required: name
Since last stop: 97840.4 miles
Since last stop: 20.9 miles
Since last stop: 16.9 miles
Since last stop: 8.3 miles
Since last stop: 8.10000000001 miles
Since last stop: 10.0 miles
Since last stop: 8.39999999999 miles
Since last stop: 8.7 miles
Since last stop: 9.90000000001 miles
Since last stop: 3.59999999999 miles
Since last stop: 4.2 miles
Since last stop: 33.3 miles
Since last stop: 8.40000000001 miles
Since last stop: 21.7 miles
Since last stop: 13.3 miles
Since last stop: 42.0 miles
Since last stop: 9.59999999999 miles
Since last stop: 5.90000000001 miles
Since last stop: 9.29999999999 miles
Since last stop: 5.60000000001 miles
Since last stop: 6.89999999999 miles
Почему бы вам не попробовать распечатать мили из файла в цикле, чтобы убедиться, что вы получаете правильные значения?
Комментарии:
1. @Ethan Как так? Если он хочет, чтобы в первой строке было напечатано 0 миль, ему нужно использовать другой набор логики. В нынешнем виде было бы разумно, что если он установит miles равным 0 в начале, первым результатом будет 97840.4
2. В одном из своих других комментариев он заявляет … о, -97840.4 — думаю, мне следует почистить очки. Отмена downvote. Извините!
3. Все в порядке, мне было интересно, была ли это проблема, без проблем: D