Чтение из файла, сохранение значений и математические операции - PullRequest
1 голос
/ 17 октября 2011

Я пытаюсь прочитать из файла, который содержит названия городов, показания одометра и сколько топлива осталось.Содержимое текстового файла:

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>

Часть присвоения вычитает текущее чтение из последнего чтения (оба значения хранятся в переменной миль).

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 (последнее чтение пробега) из значения CURRENT miles, но он продолжает вычитать текущий miles из текущего miles, очевидно, делая значение, которое я хочу распечатать, 0.0.

Ответы [ 4 ]

2 голосов
/ 17 октября 2011

У вас есть

prevmiles = miles

milest = miles - prevmiles

, который гарантирует, что самое милое будет 0. Попробуйте просто изменить порядок этих двух строк.

1 голос
/ 17 октября 2011

Здесь происходит две вещи:

  1. вам нужно инициализировать stopname, prevmiles и fuel первой строкой файла, а
  2. вынужно поменять местами две строки, где вы присваиваете 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")
0 голосов
/ 17 октября 2011

Я переключил две линии и получил то, что, как мне кажется, вы ищете.

prevmiles = miles

milest = miles - prevmiles

Примечание. Этот код предназначен для Python 2.5.4, поэтому синтаксис изменяется в нескольких частях, и из-за
в конце строки значения для поплавков приводили к ошибкам, поэтому я это прокомментировал.

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

Почему бы вам не попытаться распечатать мили из файла в цикле, чтобы убедиться, что вы получаете правильные значения?

0 голосов
/ 17 октября 2011

Вы должны просто изменить порядок операций. Сначала выполните вычитание, а затем присвойте значение prevmiles.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...