Разбиение .txt целых чисел в список Python - PullRequest
0 голосов
/ 25 января 2020

Я рассматриваю вопрос Google Ha sh Code , но сталкиваюсь с некоторыми проблемами, связанными с практическими проблемами ! Проблема в том, чтобы заказать несколько кусков пиццы, не превышая лимит. Ввод дает вам различное количество срезов для каждого типа. Это входной файл c_medium.in:

4500 50
7 12 12 13 14 28 29 29 30 32 32 34 41 45 46 56 61 61 62 63 65 68 76 77 77 92 93 94 97 103 113 114 114 120 135 145 145 149 156 157 160 169 172 179 184 185 189 194 195 195

Чтобы определить мои варианты размеров, я использую этот код:

file = open('c_medium.in','r')
raw_pizza_types = file.readline(2)
pizza_types = raw_pizza_types.split()
print(pizza_types)
max = file.readline(1)
def solution() -> None:
  #pizza_types = [int(i) for i in pizza_types] # will loop through strings and convert them to ints 
  pass

Этот код должен распечатать список с номером кусочков на разных пирогах, но вместо этого просто печатает ['45']. Может кто-нибудь помочь мне исправить это?

Ответы [ 2 ]

2 голосов
/ 25 января 2020

параметр в readline() указывает размер для чтения, а не количество строк для чтения. Таким образом, вы предлагаете прочитать только первые два символа, которым по 45, а затем остановиться.

То, что вы хотите сделать, это использовать команду readlines(), которая по умолчанию читает все строки в виде списка. Тогда вам просто нужно обработать данные из списка. Я бы порекомендовал что-то вроде:

file = open('filename', 'r')
raw_pizzas = file.readlines()
slices = []
for p in raw_pizzas:
    for s in p.split():
        slices.append(s)
print(slices)

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

1 голос
/ 25 января 2020

Параметр метода readline равен size и не читает вторую строку, что, как я полагаю, и есть то, что вы хотите сделать. Файловые дескрипторы являются итераторами и не могут go вернуться к предыдущей строке, если вы не seek. Поэтому я бы прочитал ваши переменные в порядке их появления в файле:

# the with statement is the pythonic way to open files
# since you don't need to remember to close them
with open('c_medium.in','r') as fh:
    # read the first line to max, but max itself is a function
    # so we will name it something else
    maximum_slices = [int(x) for x in next(fh).split()]

    # this will split the second line on any whitespace character
    pizza_types = next(fh).split()

После этого вам должно быть вполне достаточно понимания списка. Я также предполагаю, что maximum_slices также должен быть список целых чисел

...