把数字从字符串中分离出来做数学运算并返回字符串和结果

2024-09-27 22:23:13 发布

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

我有一些这样的档案。这是一些餐馆的收据。你知道吗

---------------------------
CompanyID: 000000000000
ProductName: quantity costPerPizza sumCost
---------------------------

例如:

---------------------------
CompanyID: 000000000000
Pizza: 2   3.15    6.30
spaghetti:  1   7    7
ribye: 2  40  80
---------------------------
CompanyID: 000000000001
burger: 1   3.15    6.30
spaghetti:  1   7    7
ribye: 2  40  80
---------------------------

如果用户输入产品名称,我想打印CompanyID和销售额。你知道吗

f=list(open(input('\nGive me the Filename: ')))

Tags: 用户档案quantityburger收据销售额pizza产品名称
1条回答
网友
1楼 · 发布于 2024-09-27 22:23:13

这个问题有几个不同的组成部分。首先,如何将收据拆分为各个公司。接下来,您需要能够解析公司的ID。最后,您需要能够解析行项目的数量、成本和总成本。你知道吗

拆分收据

拆分收据的方法取决于分隔符。如果你知道连字符的数目是相同的,你可以在上面分割你的输入。你知道吗

SEPARATOR = "             -"

with open('input-file.txt') as f:
    contents = f.read()

# We only want to keep chunks of the file that have content.
company_receipts = []
for receipt in contents.split(SEPARATOR):
    if receipt.trim():
        company_receipts.append(receipt)

这将为您提供一个列表,其中每个项目类似于:

CompanyID: 000000000000
Pizza: 2   3.15    6.30
spaghetti:  1   7    7
ribye: 2  40  80

正在分析公司ID

这里的简单假设是,每张收据的第一行是公司。我们可以使用与之前相同的split操作来分隔收据的行以及行的各个部分。你知道吗

text = \
"""
CompanyID: 000000000000
Pizza: 2   3.15    6.30
spaghetti:  1   7    7
ribye: 2  40  80
"""

lines = text.split('\n')
company_line = lines[0]

print(company_line.split(' '))
# Output: ['CompanyID:', '000000000000']

您可以使用它们的索引拉出行的相关部分,并且可以使用int(value)将字符串转换为数字。你知道吗

分析行项目

您还可以使用拆分来获取每个行项目的数量、成本和总成本。使用上面的lines变量:

# Remember lines also includes the company line, which we want to exclude
items = lines[1:]

for item in items:
    item_components = item.split(' ')

    # Now you can pull out the components you want
    item_name = item_components[0]         # Example: 'Pizza:'
    item_cost = item_components[1].trim()  # Example: '3.15'

由于这些组件中有一些是小数,因此可以用float(而不是int)来解析它们,尽管对于货币,您可能需要处理美分而不是美元,因此所有内容都是整数,不存在舍入问题。你知道吗

撰写

你应该能够使用上面列出的逻辑来构建你自己的逻辑并完成你的目标。你知道吗

相关问题 更多 >

    热门问题