将两个文本文件处理成python矩阵

2024-10-04 11:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

一家巧克力公司决定对在当前日期前30天以上生产的糖果产品提供折扣。我必须有一个矩阵作为打印结果,程序读取2个文件,一个是不同大小的不同糖果的成本,另一个是提供折扣后的天数阈值。所以在这个问题上,两个文本文件看起来像这样

你知道吗糖果.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

第二个文件呢天.txt你知道吗

Discount at days = 30

应该打印出来

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

所以基本上,每个地方的数字都在30以下(这是天.txt)它应该打印一个"$"符号,在大于数字的任何地方(在我们的例子中是30),它应该只在它们所在的位置打印空格。我们也有一个异常,在那里我们有英文字母表糖果.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()

Tags: 文件txtif产品地方符号公司矩阵
2条回答

您应该明白,我们必须处理文件并重新调整数据的形状,以便您以后可以使用这些数据。二维列表呢?你知道吗

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

感知方式。你知道吗

请注意,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)
            )
        ))

输出:

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

相关问题 更多 >