Почему мой код не читает трехзначные числа из моего текстового файла? - PullRequest
0 голосов
/ 19 октября 2018

Вот мой код:

Top_5 = []
with open (("winscorefile.txt"),"r") as Top5_File:
    for number in Top5_File:
        Top_5.append(number)
        Top_5.sort()
        Top_5.reverse()
        number_of_items = len(Top_5)
     while number_of_items > 5:
        Top_5.pop()
        number_of_items = len(Top_5)

    for data in Top_5:
        print(data)

Мой текстовый файл выглядит так (это набор баллов и имен пользователей):

62 rob 
100 rob
56 ROB 
54 rob 
76 bor 
64 bor 
52 a 
44 p1 
54 p1 
46 p2 
74 p1 
52 p2 
66 p2 
76 p2 
38 p2 
60 p1 
58 p1

Мой файл предназначен для вывода верхнего5 наивысших баллов.он делает это, но выводит только старшие двузначные числа.Я не знаю, почему он игнорирует 100 баллов.

Ответы [ 4 ]

0 голосов
/ 19 октября 2018

Вы можете разделить отдельные строки в пространстве и преобразовать первую часть в целое число.

Затем вы можете добавить номер и человека в качестве кортежа в ваш список:

Top_5 = []
Top5_File = """
    62 rob
    100 rob
    56 ROB
    54 rob
    76 bor
    64 bor
    52 a
    44 p1
    54 p1
    46 p2
    74 p1
    52 p2
    66 p2
    76 p2
    38 p2
    60 p1
    58 p1
""".strip().split("\n")
for number in Top5_File:
    number, person = number.strip().split(" ")
    Top_5.append((int(number), person))
# sort only once, outside the loop!
Top_5.sort(reverse=True)
number_of_items = len(Top_5)
while number_of_items > 5:
    Top_5.pop()
    number_of_items = len(Top_5)

for data in Top_5:
    print(data)

Вывод:

(100, 'rob')
(76, 'bor')
(76, 'p2')
(74, 'p1')
(66, 'p2')

Если вам не нужен кортеж, вы можете использовать:

for number in Top5_File:
    Top_5.append(number.strip())
Top_5.sort(key=lambda x: int(x.split(" ")[0]), reverse=True)
number_of_items = len(Top_5)
while number_of_items > 5:
    Top_5.pop()
    number_of_items = len(Top_5)

for data in Top_5:
    print(data)

Вывод:

100 rob
76 bor
76 p2
74 p1
66 p2
0 голосов
/ 19 октября 2018

Вы можете сделать что-то вроде этого

Top_5 = []
with open (("winscorefile.txt"),"r") as Top5_File:
    for line in Top5_File:
        score, name = line.split(' ')
        Top_5.append(int(score))

Top_5.sort(reverse=True)
print(Top_5[:5])
0 голосов
/ 19 октября 2018
 for number in Top5_File:
        Top_5.append(number)
        Top_5.sort()
        Top_5.reverse()
        number_of_items = len(Top_5)

в основном number - это строка ваших данных, т.е. первая будет 62 rob

Чтобы извлечь это, вам нужно будет сделать что-то вроде этого:

number.split(" "), который разделит строку на массив, содержащий: ["62", "rob"] Затем вам нужно проанализировать int, который вы могли бы сделать с arr[0] = int(arr[0] Теперь ваша строка будет иметь вид:

arr = [62, "rob"] сейчасЯ бы предложил добавить кортеж (score, name) в ваш массив Top_5 следующим образом: Top_5.append((arr[0], arr[1]))

Тогда вам придется изменить sort and reverse, так как вы будете хранить кортежи, а не просто строку в массивеТоп-5.Это можно сделать с помощью ключевого параметра и лямбда-выражения.Это будет выглядеть примерно так: sort(key = lambda x: x[0]) и то же самое можно сделать для реверса.

Надеюсь, это поможет!

0 голосов
/ 19 октября 2018

Вам нужно .read () или .readlines () после открытия файла

Top_5 = []
with open (("winscorefile.txt"),"r") as Top5_File:
    for line in Top5_File.readlines():
        line = line.strip()    # remove white spaces
        number, txt = line.split(' ')   # txt is useless here
        Top_5.append(int(number))
    Top_5.sort()
    Top_5.reverse()
    for data in Top_5[:5]:   # this grabs the first 5 elements including 0,1,2,3,4 elements
        print(data)

edit *, если ввод: 76 p2, line.split ('') должен вернуть массивиз двух объектов (есть один пробел), поэтому, похоже, ваш файл данных имеет более одного пробела в качестве разделителя.попробуйте это:

for line in Top5_File.readlines():
    line = line.strip()    # remove white spaces
    if ' ' in line:        # check to make sure theres a space in there
        splitted = line.split(' ')
        number = splitted[0]
        Top_5.append(int(number))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...