题目1
开发网站时,对于密码有一些规则:
- 密码长度至少为 10
- 只能包含大小写字母 和 数字
- 至少出现 大写字母、小写字母、数字 这3种类型里的 2 种
给定一个密码 mypassword,判断密码是否符合规则?符合返回 true,否则返回 false。
def func(mypassword):
if len(mypassword)<10:
return False
if mypassword.isalnum()==0:
return False
contain_upper = any(c.isupper() for c in mypassword)
contain_lower = any(c.islower() for c in mypassword)
contain_digit = any(c.isdigit() for c in mypassword)
if contain_upper+cntain_lower+contain_digit<2:
return False
else:
return True
题目2
小王有一个银行卡密码(存在字符串中),只包含数字和大写字母,现知道密码的规则如下:
- 必须是一串连续的数字
- 如果数字之间有”BAC“字符串的话,可以消除掉
- 数字可能会很大
现需要从字符串中找到密码,找到的话输出符合规则的最大的数,如果字符串中没有数字的话返回 -1。
def func(mypassword):
newpassword = mypassword.replace("BAC", "")
res=0
cur=""
if newpassword.isalpha():
return -1
for c in newpassword:
if c.isalpha():
if cur:
res = max(res, int(cur))
cur = ""
else:
cur+=c
print(cur)
return max(res, int(cur))
print(func("ABC34BA2BAC3RH45"))
题目3
在数据库中,为了方便存储 ip 地址,一般会把 ip 地址转化为一个十进制数字进行存储。
现需要把一个十进制的数字变回为 ip 地址的形式,规则如下:
- 首先把十进制的数字变成十六进制
- 每 2 位十六进制为一段,将其变成十进制,再加上点’.',填入到 ip 结果中。
现对于一个数字,需要输出其对应的 ip 地址字符串。如果 ip 地址非法,则输出 “invalid”。
'''
有效的IPv4地址每个数字的范围是从00到FF/十六进制(0到255/十进制)
有效的IPv4地址每个数字的范围是从0000到FFFF/十六进制
'''
'''
1. 十进制转十六进制、八进制、二进制
number = 19
hex(number) oct(number) bin(number)
2. 十六进制、八进制、二进制转十进制
hex_number = "0xff"
oct_number = "0o377"
bin_number = "0b11111111"
number1 = int(hex_number, 16)
number2 = int(oct_number, 8)
number3 = int(bin_number, 2)
'''
def func(number):
hex_number=hex(number)[2:] #前两位是0x
res=[]
if len(hex_number)>8:
return "invalid"
elif len(hex_number)<8:
hex_number=hex_number.zfill(8)
for i in range(0, 8, 2):
cur=int(hex_number[i:i+2], 16)
if cur<0 or cur>255:
return "invalid"
res.append(cur)
print(res)
return ".".join(res)
print(func(4311744512))
print(func(2130706433))
题目4
假设有很多不同面额的货币,每个货币只可以使用1次,但可以用不同面额的货币加在一起来购买大面额的商品,但是不想找零,因此对于一些金额的商品,无法进行购买。
比如有 1、2、5 元的货币,我可以购买 3 元的商品(1 + 2),但是由于 5 元无法找零,因此无法购买 4 元的商品。
现给定一个长度为 n 的正整数数组 money,分别表示 n 个货币的金额,求出无法购买的商品最小价格。
#呜呜呜原来如此简单
def func(money):
money.sort()
max_ = 0 #这里是0不是money[0],如果是money[0]的话需要有一个前置条件是money[0]=1
for i in money:
if i>max_+1:
return max_+1
else:
max_ += i
return max_+1
print(func([5,2,1]))
print(func([1,3,5]))