2015-10-29 75 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

堆棧溢出不是一個代碼寫入服務。如果您遇到關於您遇到的問題的具體問題,最好使用代碼表明您已經完成了一些工作和研究,我們很樂意幫助 – 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的方式。

請注意,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

感謝您的幫助。我試圖編寫代碼,但仍然不太明白。你能幫我解析文件嗎? –

相關問題