2015-10-29 4 views
-2

Кондитерская компания решила предложить скидку на конфетные продукты, которые производятся за 30 дней до текущей даты. Я должен иметь матрицу в качестве результата печати, где программа читает через 2 файла, одна из которых является стоимостью разных конфет разных размеров, а другая является пороговым числом дней, после которых предлагается скидка. Так что в этом вопросе две текстовые файлы выглядят что-то вроде этогоОбработка двух текстовых файлов в матрицу python

candies.txt

31 32 19 11 15 30 35 37 
12 34 39 45 66 78 12 7 
76 32 8 2 3 5 18 32 48 
99 102 3 46 88 22 25 21 
fd zz er 23 44 56 77 99 
44 33 22 55 er ee df 22 

и второй файл days.txt

Discount at days = 30 

Он должен печатать

 $ $ $   
$    $ $ 
     $ $ $ $ $  
     $  $ $ $ 
? ? ? $  
     $  ? ? ? $  

Таким образом, в основном, везде число до 30 (которое является входом от days.txt), оно должно печатать "$" знак и везде больше, чем число (30 в нашем случае), оно должно просто печатать пробелы на своем месте. У нас также есть аномально, где у нас есть английские алфавиты в матрице candies.txt, и поскольку мы ищем номера для проверки цены, а не буквы, она должна печатать знак "?" на своем месте, поскольку он не распознается.

Вот что я пытаюсь сделать.

def candyShop(candy, price): 
    try: 
     candyfile = open("candes.txt", "r") 
     readCategory = process_file(candyfile) 
     if readCategory str.isdigit(): 
      if readCategory > 30: 
       print("$") 
     elif: 
      print("?") 
     else: 
      print("") 

    return candyShop() 
+3

Что именно ваш вопрос? – Darendal

+0

Я пытаюсь написать код для описания выше. Просто нужна помощь/подсказки. –

+4

Stack Overflow - это не служба написания кода. Если у вас есть конкретный вопрос о проблеме, с которой вы столкнулись, желательно с кодом, который показывает, что вы уже приложили некоторые усилия и исследования, мы будем рады помочь – Darendal

ответ

0

Вы должны понимать, что нам необходимо обработать файл и изменить данные таким образом, чтобы вы могли использовать данные позже. Как насчет 2D-списка?

parsedList=[] 
with open("demo.txt","r") as f: 
    lst=f.read().splitlines() 
    for i in lst: 
     parsedList.append(i.split()) 

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

with open("days.txt","r") as f: 
    param = int(f.readline().split("=")[1]) 

for innerList in parsedList: 
    for element in innerList: 
     if element.isdigit(): 
      if int(element)>=param: 
       print " ", 
      else: 
       print "$", 
     else: 
      print "?", 
    print 
+0

Итак, как мы будем использовать второй текстовый файл? число 30 фактически исходит из второго текстового файла, и это может быть что угодно. Он может даже измениться, поэтому мы не можем его жестко закодировать. –

+0

@PaulJacobsen, см. Обновленный ответ. –

+0

Спасибо! Он принимает значения из файлов, но не печатает в матричной форме ... –

0

EAFP -aware way.

Обратите внимание, что join() сохраняет тесты для последних итераций (ужасные) или зачистки завершающих пробелов. (уродливый)

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

Чтобы получить threshold разобранный файл конфигурации, вы также можете использовать re или обычную строку split().

import re 

DATA = ''' 
31 32 19 11 15 30 35 37 
12 34 39 45 66 78 12 7 
76 32 8 2 3 5 18 32 48 
99 102 3 46 88 22 25 21 
fd zz er 23 44 56 77 99 
44 33 22 55 er ee df 22 
''' 

PLACEHOLDER = ' ' 
DISCOUNT_MARKER = '$' 
VOID_MARKER = '?' 

SEP = PLACEHOLDER # your mileage may vary 


def dump(x, threshold): 
    s = None 
    try: 
     if int(x) < threshold: 
      s = DISCOUNT_MARKER 
     else:  
      s = PLACEHOLDER 
    except ValueError: 
     s = VOID_MARKER 
    return s 


if __name__ == '__main__': 
    threshold = 30 # gather that from the config file 

    for line in DATA.splitlines()[1:]: 
     print(SEP.join(
      map(lambda x: dump(x.group(0), threshold), 
       re.finditer('(\w+)', line) 
      ) 
     )) 

выход:

 $ $ $  
$   $ $ 
    $ $ $ $ $  
    $  $ $ $ 
? ? ? $   
    $ ? ? ? $ 
+0

Это действительно хорошо, но мы не можем жестко закодировать данные. Он должен читать оба текстовых файла. Первый текстовый файл имеет матричные данные, а второй имеет значение, для которого нам нужно преобразовать символы в $, пробел или?. Значение во втором файле может измениться –

+1

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

+0

Спасибо за помощь. Я пытаюсь написать код, но все еще не совсем понимаю его. Не могли бы вы помочь мне разобрать файлы? –

Смежные вопросы