我正在尝试编写一个带有三个参数的函数:字典,emp_dict
,字符串,username
和数字emp_no
。
专用商店员工编号中的关键字值作为关键字,员工名称的字符串。用户名的前三个字母或后三个字母必须与员工姓名的前三个字母匹配。
如何将字符串username
与字典的前三个值字段中的每个字段进行比较。
其他限制条件包括:
这是我到目前为止所拥有的:
def validate_employee(emp_dict, username, emp_no):
if emp_no not in emp_dict:
return False
elif len(username) < 4:
return False
这是我遇到麻烦的地方。我该如何写下两个Elif?
elif username[0:2}.lower == emp_dict.values():
return True
emp_dict={1111:'Sim',1234:'James',9999:'Amy',5555:'Jessica'}
username='Jess'
emp_no=5555
print(validate_employee(emp_dict, username, emp_no))
如果我对这个问题的要求不是很好,或者我犯了一些新秀错误,我深表歉意。总的来说,我对StackOverflow和Python编程还很陌生。有时我在逻辑上思考一些问题时会遇到一些麻烦。
感谢您提供的任何帮助!
答案 0 :(得分:0)
您只需编写一种逻辑即可:
elif username[:3] in map(lambda x:x[:3],emp_dict.values()) or username[-3:] in map(lambda x:x[:3],emp_dict.values()):
return True
或者如果不区分大小写:
elif username[:3].lower() in map(lambda x:x[:3].lower(),emp_dict.values()) or username[-3:].lower() in map(lambda x:x[:3].lower(),emp_dict.values()):
return True
示例:
>>> emp_dict={1111:'Sim',1234:'James',9999:'Amy',5555:'Jessica'}
>>> username='Jess'
>>> username[:3] in map(lambda x:x[:3],emp_dict.values())
True
答案 1 :(得分:0)
您可以使其更简单明了:
def validate_employee(emp_dict, username, emp_no):
if emp_no not in emp_dict:
return False
if len(username) < 4:
return False
head = username[:3]
if list(filter(lambda x: x[:3] == head or x[:3] == head, emp_dict.values())):
return True
没有必要在带有elif
的语句之后写上return
(有时这种语句也称为 guards )。
答案 2 :(得分:0)
我尝试使用内置any()
和str.startswith()
:
employees = {}
employees[0] = 'smith john'
employees[1] = 'paolo smith'
employees[3] = 'jack daniels'
def validate(emp_dict, username, emp_no):
if emp_no not in emp_dict:
return False
if len(username) < 4:
return False
if not any(e.startswith(username[:3]) or e.startswith(username[-3:]) for e in emp_dict.values()):
return False
return True
print(validate(employees, 'paolo john', 3))
print(validate(employees, 'john paolo', 3))
打印:
True
False