如何修复此列表将保存功能添加到文件?

时间:2019-07-17 19:39:02

标签: python

我希望它成功保存

outfile = open(file_name, "w")
for i in card_list:
    outfile.append(str(card_list[i]) + "\n")
try:
    card_list=[]
    for i in range (5):
        card = int(input("Enter a card number: "))
        while card <1 or card > 13:
            print("Invalid Card")
            card = int(input("Enter a card number: "))
        card_list.append(card)
    print(card_list)

    file_name = input("What name would you like to save them as? ")

    outfile = open(file_name, "w")
    for i in card_list:
        outfile.append(str(card_list[i]) + "\n")
    print()
    print("Your cards were successfully saved.")
    print()
except ValueError:
    print()
    print("Card must Be an integer not a string.")
    print()

它应该可以成功保存

2 个答案:

答案 0 :(得分:0)

使用

for i in range(0, len(card_list)):
    outfile.write(str(card_list[i]) + '\n')

for card in card_list:
    outfile.write(str(card) + '\n')

也请不要忘记outfile.close(),然后再将文件缓冲在内存中(如果更改很小)。如果您尝试附加到该文件(如果存在),请使用"a"代替"w"

答案 1 :(得分:0)

有几种方法可以解决您的问题。

您的原始循环:

for i in card_list:
    outfile.append(str(card_list[i]) + "\n")

应该成为

for card in card_list:
    outfile.append(str(card) + "\n")

(或其他一些变量名)。由于您没有使用通常用“ i”表示的索引,因此没有理由明确地删除索引。

但是有一些方法可以做到:

for i, card in enumerate(card_list): 将使str(card)str(card_list[i])完全相等。

枚举允许您从列表(例如“卡”)中获取每个项目以及列表中该项目的索引(例如“ i”)

如果您想要列表中项目的索引,也可以使用rangefor i in range(len(card_list) - 1):

范围会创建一个数字列表,因此该调用会要求一个列表,其中包含从0到card_list中项目数的数字。如果card_list包含2个项目,例如['card1','card2'],即索引0和索引1。因此,如果您在创建范围列表时未减去1: range(len(card_list))您将获得[0, 1, 2]的列表,并且当循环达到“ 2”时,索引将超出card_list[i]的范围。

我还担心没有用于写入文件的“附加”方法,但是我对文件的方法不了解。我相信您在写入文件时需要使用.write(而不是.append(。使文件追加还是覆盖文件的原因与您首先打开文件的方式相同。