使用Python在运行时追加列表

时间:2019-02-13 07:45:33

标签: 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"]

如何克服这个问题?

5 个答案:

答案 0 :(得分:1)

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

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))

答案 1 :(得分:0)

这里没有循环。您每次都覆盖值。

尝试:

A, B = [], []
while True:
    A.append(3.5)
    b = input('B value')
    if b == '':
        break
    B.append(b)
    print(A, B)

答案 2 :(得分:0)

目前尚不清楚您要再次运行代码的哪些部分,但似乎您在每次运行(第3d和第4行)时都会重置用户ID和等级列表。因此,“电源”不会被替换。而是使用Vishnu创建一个新列表,并在运行后将您的新输入添加到其中。

答案 3 :(得分:0)

您没有循环。列表的值不会在脚本运行之间保存

print("Welcome to Movie Predictor")
print("Enter your user id: ")
user_ids=["Vishnu"]
user_ratings=[3.5]

while True:
    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("List of users: " + str(user_ids))

答案 4 :(得分:0)

您可能要使用字典和while循环来输入多个用户。该代码将不断迭代,直到用户在第二个输入上输入“ n”为止。

print("Welcome to Movie Predictor")

users = dict(Vishnu = 3.5)

a = 'y'
while a == 'y':
    username=input("Enter your user id: ")
    print("Signing in...Please Wait!")

    if username in users:
        print("do something if user exits")
    else:
        val = float(input(f"Enter value for {username}: "))
        users[username] = val

    print(users)

    avg_rating = sum(users.values()) / len(users)
    print(f"average rating: {avg_rating}")

    a = ''
    while a not in ['y','n']:
        a = input("continue? (y/n)")
    if a == 'n':
        break
    else: 
        continue