首页 > 解决方案 > 在 Python 中在运行时附加列表

问题描述

我正在创建一个项目,其中有两个列表。一个列表是user_ids,其中存储了用户的用户名。另一个是存储用户评分的user_ratings 。在相应的索引处,存储用户评分。如果有新用户,列表会在运行时动态附加。这是代码:

print("Welcome to Movie Predictor")
print("Enter your user id: ")
user_ids=["Vishnu"]
user_ratings=[3.5]
username=input()
print("Signing in...Please Wait!")
if username in user_ids:
    user_index=user_ids.index(username)
    avg_rating=user_ratings[user_index]
    new_user=0
else:
    user_ids.append(username)
    user_ratings.append(3.5)
    avg_rating=3.5
    new_user=1

在我第一次运行程序后,我输入了一个列表中没有的用户名,这里是数组。

user_ids=["Vishnu","Power"]
user_ratings=["3.5","3.5"]

但这就是问题所在。下次我再次运行它时,我的最后一个元素"Power"将被替换,但列表中没有附加一个新项目。

这是第二次运行后的列表:

user_ids=["Vishnu","Ranger"]
user_ratings=["3.5","3.5"]

如何克服这个问题?

标签: python

解决方案


每次运行后尝试将数据保存到磁盘,并在下次运行前读取数据:

import os.path

if not os.path.exists("mydatabase.txt"):
    # initialize
    user_ids=["Vishnu"]
    user_ratings=[3.5]
else:
    # read previous data from database file
    user_ids=[]
    user_ratings=[]
    with open("mydatabase.txt", "r") as databasefile:
        for line in databasefile:
             userid, rating_str = line.split()
             rating = float(rating_str)
             user_ids.append(userid)
             user_ratings.append(rating)

print("Welcome to Movie Predictor")
print("Enter your user id: ")
username=input()
print("Signing in...Please Wait!")
if username in user_ids:
    user_index=user_ids.index(username)
    avg_rating=user_ratings[user_index]
    new_user=0
else:
    user_ids.append(username)
    user_ratings.append(3.5)
    avg_rating=3.5
    new_user=1

print("Current user ids: %s" % user_ids)
print("Current user ratings: %s" % user_ratings)

# write data to database file
with open("mydatabase.txt", "w") as databasefile:
    for userid, rating in zip(user_ids, user_ratings):
        databasefile.write("%s %.1f\n" % (userid, rating))

推荐阅读