一家巧克力公司决定对当前日期前30天生产的糖果产品提供折扣。我必须有一个矩阵作为打印结果,其中程序读取2个文件,一个是不同大小的不同糖果的成本,另一个是提供折扣的阈值天数。所以在这个问题中,两个文本文件看起来像这样
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()
答案 0 :(得分: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
答案 1 :(得分:0)
EAFP - 意识到的方式。
请注意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)
)
))
输出:
$ $ $
$ $ $
$ $ $ $ $
$ $ $ $
? ? ? $
$ ? ? ? $