我正在创建一个项目,其中有两个列表。 其中一个列表是 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"]
如何克服这个问题?
答案 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