0

我目前有 -

showFile = open("products.txt", 'r')
        lines = showFile.readline()
        while lines:
            print(lines)
            lines = showFile.readline()
        showFile.close()
        showFile = open("products.txt", 'r')
        numbers = []
        for line in showFile:
            tokens = line.split(',')
            numbers.append(min(t for t in tokens[0]))
        minValue = min(numbers)
        print(minValue)

Products.txt -

'Snicker's, 33, 84
'Mars', 18.5, 72
'Bounty', 22, 96

所以其中33是价格,84是数量。18.5是价格,72是数量等等。

我试图让它打印出类似的东西——士力架是每单位 0.39 美元。Mars 是每单位 0.29 美元。赏金为每单位 0.23 美元。赏金是最便宜的

感谢帮助:D

4

2 回答 2

1

您可以使用它print repr(tokens)来显示tokens变量中的内容。我建议你添加它,看看它说了什么。

请注意,Python 有不同类型的值。例如"18.5"or'18.5'是字符串 - 这些适用于实际上是字符串的事物(例如'Bounty'),但它们不适用于数字,因为您无法对它们进行数学运算。

如果你有一个数字,你会想把它转换成float表格(例如18.5)或int表格(例如18)。Python 具有执行此操作的函数,称为float()int()。您可以+-*/对浮点数和整数进行普通数学运算 ( )。

(如果上述内容不清楚:repr将打印带有引号的字符串;它不会在浮点数或整数周围打印引号。 repr将始终为浮点数打印小数点,而从不为整数打印)。

请注意,由于杂散空间,这float('18.5')将起作用,但float(' 18.5')不会。如果您遇到此问题,请查找strip()从字符串中删除前导和尾随空格的函数。

于 2013-05-09T23:26:30.737 回答
0

这是一个解决方案。如果您不熟悉所使用的技术,它的可读性可能会降低,但是一旦您熟悉了它就会非常一致且易于理解。如果有任何不清楚的地方,请在评论中询问。
查找列表理解以了解其products = []工作原理。

#!/usr/bin/env python

import re
import sys

# Gives a list of lists [['Snickers', '33', '84'], ..]
products = [re.sub('[\n \']', '', p).split(',') for p in open("products.txt", "r")]

# Probably not a very good way...
cheapest = ("", sys.float_info.max)

for p in products:
    # Converts price and quantity to float from string, and divide them
    cost = float(p[1]) / float(p[2])

    if cost < cheapest[1]:
        cheapest = (p[0], cost)

    # Snickers is $0.39 per unit
    print "%s is $%.2f per unit." % (p[0], cost)

print "\n%s is the cheapest product and costs $%.2f per unit." % cheapest

产生:

Snickers is $0.39 per unit.
Mars is $0.26 per unit.
Bounty is $0.23 per unit.

Bounty is the cheapest product and costs $0.23 per unit.
于 2013-05-10T00:10:53.520 回答