不会做大餐的屌丝不是好测试
报个到
站在项目角度、客户角度,有问题解决问题,资源总是有限的,一定是有取舍的,至于具体的措辞态度,对人下菜了,毕竟有的开发喜欢攻,有的开发喜欢受
叫兽,我还是来跟你混可好?
同是养老险,已离职
1、定义 base_dict = {1: [2, 4, 5], 2: [1, 3, 4, 5, 6], 3: [2, 5, 6], 4: [1, 2, 5, 7, 8], 5: [1, 2, 3, 4, 6, 7, 8, 9],
6: [2, 3, 5, 8, 9], 7: [4, 5, 8], 8: [4, 5, 6, 7, 9], 9: [5, 6, 8]}
2、递归获取 n 位密码。递归思路:n-1 位密码的列表逐个判断是否可以再加 1 位,如果是则加 1 位变为新的 n 位密码放到 n 位密码列表;当 n-1 = 1 时,返回 [[1], [2], [3], [4], [5], [6], [7], [8], [9]]
3、如何判断一个密码列表是否可以再加 1 位:全集 [1, 2, 3, 4, 5, 6, 7, 8, 9] 去掉当前密码已经使用的数字,与 base_dict[当前密码最后一位] 交集,如果交集长度大于 0,则可以再加 1 位
以上基于 python3.6 实现,效率还是可以的
def run():
pw = PassWd(9)
print(pw.passwd())
class PassWd:
def __init__(self, n):
# self.start = random.randint(1, 9)
self.n = n
self.all = [1, 2, 3, 4, 5, 6, 7, 8, 9]
self.besides = {1: [2, 4, 5], 2: [1, 3, 4, 5, 6], 3: [2, 5, 6],
4: [1, 2, 5, 7, 8], 5: [1, 2, 3, 4, 6, 7, 8, 9],
6: [2, 3, 5, 8, 9], 7: [4, 5, 8], 8: [4, 5, 6, 7, 9],
9: [5, 6, 8]}
def passwd(self):
print('n:%d' % self.n)
res = self.generate_passwds(self.n)
print('pwds_count:%d, pws:%s' % (len(res), res))
return res[random.randint(0, len(res)-1)]
def generate_passwds(self, count):
if count == 1:
return [[1], [2], [3], [4], [5], [6], [7], [8], [9]]
new_res = []
res = self.generate_passwds(count - 1)
for pwd in res:
numbers = self.next_numbers(pwd)
if numbers:
for child in numbers:
new_res.append(pwd + [child])
return new_res
def next_numbers(self, pwd):
numbers = list(set(self.all).difference(set(pwd)).intersection(set(self.besides[pwd[-1]])))
return numbers
不会做大餐的屌丝不是好测试