python: Как найти строку с наибольшим номером в ней? - PullRequest
0 голосов
/ 12 сентября 2018

Как найти строку с наибольшим номером в файле строк, который содержит строки и цифры

def topSpeed(cars): 

y = raw_input("car type:")
with open("cars","r") as f:
    for l in f.readlines():
        list = []
        p = l.strip().split("|")
        type = p[1]
        max_speed = p[7]
        if y == type:
            list.append(l)
            a = 0
            for i in list:
                p = i.strip().split("|")
                max_speed = p[7]                    
                if max_speed > a:
                    a = max_speed
                    print(i)
                    pass 
                else:
                    print("...")    

        else:
            print("no cars of that type")

я пробую это, но он печатает все машины типа, которые вводят

и список автомобилей:

a1|bmw|a|3.5|2.6|1.6|2018|150|3|5|x
a2|audi|a|2.50|1.60|4.50|2017|220|3|2|y
a3|audi|b|2.30|1.80|5.00|2011|180|4|4|x
a4|bmw|b|duz|vis|sir|god|230|3|5|y

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Предполагая, что скорость всегда находится в семи позициях, вы можете попробовать что-то вроде этого:

with open('cars.txt') as infile:
    speed = max(infile.readlines(), key=lambda l: int(l.strip().split('|')[7]))
    print(speed)

выход

a4|bmw|b|duz|vis|sir|god|230|3|5|y

Вы можете использовать параметр key функции max, в этом случае он говорит разделить строку на '|' и использовать значение из семи позиций в качестве ключа. В этом ответе также предполагается, что скорость является целым числом, как в ваших примерах.

0 голосов
/ 12 сентября 2018

Ваша проблема с циклом:

for i in list:
    p = i.strip().split("|")
    max_speed = p[7]                    
    if max_speed > a:
        a = max_speed
        print(i)
         pass 
    else:
        print("...")

Это будет печатать «i» каждый раз, когда max_speed> a, поэтому, если ваши максимальные скорости находятся в порядке возрастания, он будет печатать каждую машину.Что вам нужно сделать, это сохранить автомобиль с максимальной скоростью, а затем распечатать его в конце.

max_speed_car = ''
for i in list:
    p = i.strip().split("|")
    max_speed = p[7]                    
    if max_speed > a:
        a = max_speed
        max_speed_car = i
        pass 
    else:
        print("...")
print(max_speed_car)

что-то подобное должно сделать это.Вот полный код, который отлично работал на моем компьютере: (я использую python 3.6)

def topSpeed(cars):
    y = input("car type:")
    with open(r"\cars.txt","r") as f:
            for l in f.readlines():
        list = []
        p = l.strip().split("|")
        type = p[1]
        max_speed = p[7]
        if y == type:
            list.append(l)
    a = 0
    max_speed_car = ''
    for i in list:
        p = i.strip().split("|")
        max_speed = int(p[7])                    
        if (max_speed > a):
            a = max_speed
            max_speed_car = i

        else:
            print("...")

    print(max_speed_car) 
...