python - 如何从Python文件中创建元组列表

标签 python tuples knapsack-problem

好的,我有一个类似这样的文件。

panite,1,1800
ruby,2,100
diamond,0.75,900
emerald,3,250
amethyst,2,50
opal,1,300
sapphire,0.5,750
benitoite,1,2000
malachite,1,60

我们的老师给了我们使用 try/except 的代码来帮助我们打开文件。我需要打开文件并读取每一行并使每一行成为一个元组,然后将其放入列表中。该列表应该是最后一个数字除以中间的数字,然后该值后面跟着 gem 的名称(中间的数字是 gem 的克拉)。我遇到的问题是我什至无法让它从文件中生成列表。这就是我尝试打开它但没有成功的方法。

def main():
    fileFound = False
    while not fileFound:
        fileName = input('File name containing jewel data: ')
        try:
            dataFile = open(fileName, "r")
            fileFound = True
            knapsack()
        except:
            print ('Could not find that file -- try again')

def knapsack():
    list = dataFile.readline()

当我将其更改为 def knapsack() 下的简单 printstatement 时,我实际上取得了一些成功,它将打印一些简单的内容,例如 2+2,但是当我尝试创建一个列表时,它给了我 except 错误反而。这是我的第一堂编程课,因此我们将不胜感激。

最佳答案

def make_jewel(line):
    name, carats, price = line.split(",")
    return (float(price)/float(carats), name)

def main():
    while True:
        file_name = input('File name containing jewel data: ')
        try:
            with open(file_name) as inf:
                data = [make_jewel(line) for line in inf]
            break
        except FileNotFoundError:
            print('Could not find that file -- try again')

main()

以及一些评论:

  • except: 没有指定的异常类型,也称为“裸异常”,会令人不悦,因为它会捕获所有内容。您应该指定您期望看到的异常类型,并仅处理这些异常;如果您捕获了所有内容,并且出现了完全意外的失败(即 ComputerOnFireError!),您将永远不会发现它。

  • 首选使用 with 打开文件,因为它可以确保文件始终正确关闭。

  • 当您以文本模式打开文件时,您可以逐行迭代它;这是处理文件的最常见方法。

  • 当你.split()一个字符串时,你会得到一个字符串列表。在对这些片段进行数学运算之前,您必须使用 int()float() 将它们从字符串转换为数值。

希望有帮助。

关于python - 如何从Python文件中创建元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23230107/

相关文章:

arrays - 为什么我会看到这种奇怪的行为?

python - 根据字段获取大量对象列表的最有效组合

python - 根据另一列中的条件填充多个数据框列

python - 如何删除 pandas 系列中的重复子字符串?

python - 使用 Selenium 的预期条件 [Python]

ios - swift 4 : Value of tuple type '(assignment: Assignment, tasks: [Task])' has no member 'subscript'

swift - 为什么 Xcode 将我的 Integers 转换为 Floats 而无需我分配它这样做?

stream - Storm 中的字段和值连接

c# - 下料问题

python - Django ModelForm 无法使用自定义日期格式正确验证