我是Python的新手,到目前为止,我已经学习了一些基本知识,如数据类型、周期和函数的工作方式。问题是我对数据库一无所知…
我想写一个秘密的圣诞老人密码,为我和我的朋友做一个机器人。这个想法是,在你被邀请加入机器人后,你输入你的名字和姓氏,然后分配给一个人(我需要姓氏部分,因为有些人同名)。之后,需要从初始“目标”列表中删除分配的名称,这样就不会将其分配给其他任何人。
到目前为止,我已经完成了作业部分:
def appointer(name, surname):
template = "You are {}'s Secret Santa, congrats!"
targets = ['George Orwell', 'Vladimir Nabokov', 'Vladimir Sorokin']
if name == 'George' and surname == 'Orwell':
targets.remove('George Orwell')
print(template.format(random.choice(targets)))
elif name == 'Vladimir' and surname == 'Nabokov':
targets.remove('Vladimir Nabokov')
print(template.format(random.choice(targets)))
elif name == 'Vladimir' and surname == 'Sorokin':
targets.remove('Vladimir Sorokin')
print(template.format(random.choice(targets)))
print(targets)
else:
print('Wrong name, check again!')
(我需要单独的姓名,我的语言名称中的目标公司名单被拒绝。)
是的,这就是我能走的路
因此,下一步是让机器人记住指定的名称,并将其从“目标”列表中删除,这样当下一个人使用机器人时,他或她就不会得到相同的名称。
我尝试将分配的名称放入单独的列表中,但由于存在多个“如果”循环,因此无法工作。
所以我一直在想,有没有办法不用借助数据库就能完成这件事
这里有一个更新:
通过内置字典记住指定人员的计划不起作用,每次我运行代码时,这个dict都会重置为零。
然后我发现了一个非常有用的搁置模块。
下面是我在Tom的帮助下编写的代码:
import shelve
shelveFile = shelve.open('mydata')
import random
participants = [....]
template = "You're {}'s Secret Santa, congrats!"
def appointer(name, surname):
fullname = name + ' ' + surname
if fullname not in participants:
print("Wrong name, check again!)
return
if fullname in shelveFile.keys():
print("You already have your victim!")
return
options = [i for i in participants if i != fullname and i not in shelveFile.values()]
selection = random.choice(options)
shelveFile[fullname] = selection
print(template.format(selection))
if __name__ == '__main__':
appointer(name = input('Enter your name: ').lower().title(), surname = (input('Enter your surname:').lower().title()))
shelveFile.close()
Shelve模块为您提供了一个内置数据库,每次运行代码时,您仍然可以记住所有指定人员
一个好的改变是在检查案例时减少
appointer
的显式性。可以使用name
和surname
参数动态检查名称。因此,您可以(在appointer
内)执行以下操作,而不是为每个名称执行一个if
块:作为跟踪一切的工具,我认为有多种体面的方法可以做到这一点。一种可能是有一本字典,将每个参与者与他们得到的人联系起来。因此,当您分配某人时,您1)从参与者列表中筛选出他们的名字,2)筛选出已经有圣诞老人的人,3)选择一个新名字,4)将连接存储在字典中:
因此,如果你想任命所有人,你可以:
然后检查
santas
之后,查看谁被分配给谁:希望这不会太伤你的脚,祝你好运
相关问题 更多 >
编程相关推荐