有一个用于名称的字典和一个用于打印字典的函数。问题是,当我运行create_user()函数时,它仅捕获并打印最后一个值。
users={}
def create_users():
while True:
choice=input('Create a new user?: Y/N ')
if(choice=='y'):
first_name= input('Enter first name: ')
users['first_name'] = first_name
last_name= input('Enter last name: ')
users['last_name']=last_name
print(len(users))
if(choice=='n'):
print('Exit')
break
def print_dir():
print('Directory Item ','\n')
for k,v in users.items():
print(k,v)
create_users()
print_dir()
我也在下面尝试过此操作,在此之前和之后捕获。那没有解决。
def create_user():
first_name= input('Enter first name: ')
users['first_name'] = first_name
last_name= input('Enter last name: ')
users['last_name']=last_name
while True:
choice=input('Create a new user?: Y/N ')
if(choice=='y'):
first_name= input('Enter first name: ')
users['first_name'] = first_name
last_name= input('Enter last name: ')
users['last_name']=last_name
任何提示/提示如何解决?谢谢
我根据建议尝试的其他项(嵌套词典)
users={}
users['username'] = {}
while True:
choice=input('Create a new user?: Y/N ')
if(choice=='y'):
first_name= input('Enter first name: ')
users['username']['first_name'] = first_name
last_name= input('Enter last name: ')
users['username']['last_name']=last_name
我仍然遇到无法获取所有值的问题
创建新用户?:是/否y
输入名字:james
输入姓氏:琼斯
创建新用户吗?:是/否
输入名字:rob
输入姓氏:威廉
创建新用户?:是/否n
退出 目录项
用户名{'first_name':'rob','last_name':'william'}
答案 0 :(得分:0)
users['last_name']=last_name
您的问题是用户正被用来存储单个用户的数据。您想要的更像是
users[username]['last_name']=last_name
为用户提供词典字典。在哪里获取用户名取决于您。如果您没有很好的消息来源,那么将用户纳入词典列表可能会更好。
答案 1 :(得分:0)
字典是一个键值对。字典具有唯一的键。因此,当您运行该程序并选择第二次“ y”时,它将更新现有的密钥“ first_name”和“ last_name”。在这种情况下,您字典中没有数据,例如{'first_name':'A','last_name':'B','first_name':'C','last_name':'D'}重复按键。但是,您可以将first_name保存为键,将firstname保存为值。参见下面的代码。
template <auto MEMBER>
struct C
{
template <class RET, class T, class... ARGS>
static constexpr auto deduce_RET(RET (T::*member)(ARGS...)) -> RET;
template <class RET, class T, class... ARGS>
static constexpr auto deduce_T(RET (T::*member)(ARGS...)) -> T;
using RET = decltype(deduce_RET(MEMBER));
using T = decltype(deduce_T(MEMBER));
template <class... ARGS>
RET operator()(ARGS&&... args)
{
return (reinterpret_cast<T*>(0)->*MEMBER)(std::forward<ARGS>(args)...);
}
};