题目来源:扇贝编程-每日一练
每日一练0801:为了督促学生们锻炼身体,学校在校园里放置来4个打卡器,要求每人每日至少打卡两次。每天打卡器会传回一些数据,请你写一个函数,找出没有完成锻炼的学生。
# 作业
def solution(lst):
name_unfinished = []
for name in lst:
if lst.count(name)<2:
name_unfinished.append(name)
return name_unfinished
print(solution(['王萌萌','扇小贝', '王萌萌', '林小米','林小米','晨','王萌萌','晨']))
每日一练0802:注册邮箱时建立的新密码只有满足一些规则后才能创建成功。请你创建一个验证密码的函数,以符合以下规则:长度在 6 到 24 个之间。 至少一个大写字母( A-Z )。 至少一个小写字母( a-z )。 至少一个数字( 0-9 )。 最多 2 个重复字符:“aa” 可以;“aaa” 不行。 支持的特殊字符:! @#$%^&*()+ = _ - {} [] :; “'? <> ,.
# 作业
def solution(password):
if len(password)>24 or len(password)<6:
return False
for p in password:
if p.isdigit():
p_digit = True
break
else:
p_digit = False
for p in password:
if p.islower():
p_lower = True
break
else:
p_lower = False
for p in password:
if p.isupper():
p_upper = True
break
else:
p_upper = False
if p_digit==p_lower==p_upper==False:
if not (p in "! @#$%^&*()+ = _ - {} [] :; “'? <> ,."):
return False
for i in range(len(password)-2):
if password[i] == password[i+1] and password[i+1] == password[i+2]:
return False
if p_digit==p_lower==p_upper==True:
return True
else:
return False
print(solution("iLoveYou"))
# 参考答案
def solution(password):
count1 = 0
count2 = 0
count3 = 0
if len(password) < 6 or len(password) > 24:
return False
for ch in password:
if ch.isupper():
count1 += 1
if ch.islower():
count2 += 1
if ch.isdigit():
count3 += 1
if count1 < 1 or count2 < 1 or count3 < 1:
return False
for i in range(len(password)-2):
if password[i] == password[i+1] and password[i+1] == password[i+2]:
return False
return True
print(solution('iLoveYou'))
每日一练0803:推出奶茶颗数限制系统后,店长想知道奶茶店几款限制珍珠奶茶销售的总利润。 他从系统中调出一个字典,其中包含每单杯成本价格,单杯售价和卖出杯数。 请你写一个函数,返回所得的总利润(四舍五入)。
# 作业
d={
"cost_price": 18.67,
"sell_price": 25.00,
"inventory": 1200
}
def solution(dit):
return round((dit["sell_price"]-dit["cost_price"])*dit["inventory"])
print(solution(d))
# 参考答案
d={
"cost_price": 18.67,
"sell_price": 25.00,
"inventory": 1200}
def solution(dit):
a = dit["cost_price"]*dit["inventory"]
b = dit["sell_price"]*dit["inventory"]
return round(b-a)
print(solution(d))
每日一练0804:写一个函数,判断两条直线是否平行。行由列表 [a,b,c] 表示,其对应于行 ax + by = c。
# 作业
def solution(l1,l2):
if l1[0]/l1[1] == l2[0]/l2[1]:
return True
else:
return False
print(solution([1, 2, 3], [1, 2, 4]))
# 参考答案
def solution(l1, l2):
a1, b1, a2, b2 = l1[0], l1[1], l2[0], l2[1]
return (a1/b1) == (a2/b2)
print(solution([2, 4, 1], [4, 2, 1]))
每日一练0805:给定一个奇数,然后判断最少几个 9 除于该数的结果为整数。
# 作业
def solution(num):
i = 1
while True:
number = []
for n in range(i):
number.append('9')
number = int("".join(number))
if number%num == 0:
break
else:
i += 1
return i
print(solution(13))
# 参考答案
def solution(num):
a=9
i=1
while a%num !=0:
a=a*10+9
i+=1
return i
print(solution(3))
每日一练0806:编写一个程序,输出某字符串形式的日期是该年的第几天
# 参考答案
def solution(str1):
y,m,d=map(int,str1.split("-"))
D=0
days=[31,0,31,30,31,30,31,31,30,31,30,31]
if ((y%400==0)|((y%4==0)&(y%100!=0))):
days[1]=29
else:
days[1]=28
for i in range(m-1):
D=D+days[i]
return(D+d)
print(solution("2050-10-01"))
每日一练0807:小贝得到一个神奇的数列: 1,12,123,...12345678910,1234567891011...。 并且小贝对于能否被3整除这个性质很感兴趣。 小贝希望你能帮她计算一下从数列的第m个到第n个(包含端点)有多少个数可以被3整除。
# 作业
def solution(m,n):
count = 0
for i in range(m,n+1):
if sum(list(range(1,i+1)))%3 == 0:
count+=1
return count
print(solution(5,15))
# 参考答案
def solution(m,n):
nn=n//3*2+ (1 if n%3==2 else 0)
mm=(m-1)//3*2+ (1 if (m-1)%3==2 else 0)
return(nn-mm)
print(solution(5,15))
每日一练0808:小贝去闻闻老师家补课,出门的时候面向北方,但是现在迷路了。只记得自己拐过n个方向,l表示左拐,r表示右拐; 请你编个程序帮帮小贝帮帮小贝,输出小贝最后面向的方向,N表示北,S表示南,E表示东,W表示西。
# 作业
def Ori(direction,RL):
if direction == 'N':
dirL = 'W'
dirR = 'E'
if direction == 'E':
dirL = 'N'
dirR = 'S'
if direction == 'S':
dirL = 'E'
dirR = 'W'
if direction == 'W':
dirL = 'S'
dirR = 'N'
if RL == 'l':
return dirL
else:
return dirR
def solution(n,m):
direction = 'N'
for i in m:
direction = Ori(direction,i)
return direction
print(solution(3,"lrr"))
print(solution(6,"rrrrlr"))
print(solution(5,"rlrll"))
# 参考答案
def solution(n,m):
dict1={'1':'E','2':'S','3':'W','0':'N'}
init=0
for i in range(int(n)):
if m[i]=='l':
init-=1
else:
init+=1
return(dict1[str(init%4)])
print(solution(6,"rrrrlr"))
每日一练0809:给定一个正整数数组,它的第 i 个元素是比特币第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一次),设计一个算法来计算你所能获取的最大利润。注意:不能在买入比特币前卖出。
# 作业
def solution(lst):
buy_min = min(lst[:-1])
loc_min = lst.index(min(lst[:-1]))
buy_max = max(lst[loc_min:])
return (buy_max-buy_min)
print(solution([7,2,5,2,1,2,6,3]))
print(solution([600,482,520,500,803,585]))
# 参考答案
# pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
def solution(lst):
sum=0
while len(lst)!=1:
a=lst.pop(0)
b=max(lst)
if b-a>sum:
sum=b-a
return sum
print(solution([600,482,520,500,803,585]))
每日一练0810:公司组织团建活动,到某漂流圣地漂流,现有如下情况: 员工各自体重不一,第 i 个人的体重为 lst[i],每艘漂流船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 为节省开支,麻烦帮忙计算出载到每一个人所需的最小船只数(保证每个人都能被船载)。
# 作业
def solution(lst,limit):
lst.sort()
anw=0
while lst:
for j in lst[:0:-1]:
if j+lst[0]<=limit:
lst.remove(j)
lst=lst[1:]
anw+=1
break
else:
return anw+len(lst)
print(solution([110, 120, 150, 170, 200, 220],300))
每日一练0811:给定一个字符串,输出所有指定长度为n的子串,没有则输出-1
# 作业
def solution(strs,n):
s = []
if len(strs)>=n:
for i in range(len(strs)-n+1):
s.append(strs[i:i+n])
return (",".join(s))
else:
return ('-1')
print(solution('1234',5))
print(solution('12',2))
print(solution('123456789',6))
每日一练0811:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
def solution(n):
result = lambda n: n if n < 2 else 2 * solution(n - 1)
return result(n)
print(solution(5))
每日一练0812:通过键盘输入一串小写字母(a~z)组成的字符串。 请编写一个字符串归一化程序,统计字符串中相同字符出现的次数,并按字典序输出字符及其出现次数。
# 作业
def solution(s):
s_count = []
word = []
count_word = []
for i in s:
word.append(i)
count_word.append(s.count(i))
s_zip = zip(word,count_word)
s_zip = sorted(s_zip)
s_temp = {key:value for key,value in s_zip}
for key,value in s_temp.items():
s_count.append(str(key))
s_count.append(str(value))
return ("".join(s_count))
print(solution('cccddecca'))
print(solution('dabcab'))
print(solution('aacbac'))
# 参考答案
def solution(s):
return "".join([i+str(s.count(i)) for i in sorted(set(s))])
print(solution('cccddecca'))
print(solution('dabcab'))
print(solution('aacbac'))
每日一练0813:你需要创建一个带有两个参数的函数: (1)玩家的手中牌的列表 (2)牌桌上当前 面朝上的牌。如果玩家可以进行游戏,则该函数将返回True;如果玩家必须从牌组中抽取,则该函数将返回False。如果有以下情况,玩家可以进行游戏: 他们的卡片与面朝上卡片的颜色相同。 他们的卡号与面朝上卡的号码相同。
# 作业
def solution(hand,face):
color_face = face.split(" ")[0]
number_face = face.split(" ")[1]
for card in hand:
color_hand = card.split(" ")[0]
number_hand = card.split(" ")[1]
if color_hand==color_face or number_hand==number_face:
return True
return False
print(solution(["yellow 3", "red 8"], "green 2"))
# 参考答案
def solution(hand, face):
for card in hand:
if card[:4] in face or card[-1] in face:
return True
return False
print(solution(["yellow 3", "yellow 5", "red 8"], "red 2"))
每日一练0814:创建一个函数,该函数反转字符串中的字母,但保持当前顺序的数字。
# 作业
def solution(txt):
txt = list(txt)
letter = []
for t in txt:
if t.isalpha():
letter.append(t)
j = len(letter)
for i in range(len(txt)):
if txt[i].isalpha():
txt[i] = letter[j-1]
j = j-1
return ("".join(txt))
print(solution("ab89c"))
# 参考答案
def solution(txt):
letters=[i for i in txt if i in 'abcdefghijklmnopqrstuvwxyz']
letters=letters[::-1]
ans=''
step=0
for i in range(len(txt)):
if txt[i] in letters:
ans+=letters[step]
step+=1
else: ans+=txt[i]
return ans
print(solution("123a45"))
每日一练0815:小贝比较重口,喜欢吃辣的饭菜,但闻闻一点辣也吃不了。 于是,小贝经常一个人吃完了所有辣的菜品,同时还吃掉一半不辣的菜。今天,小贝摸着圆圆的肚子,终于良心发现,决定以后和闻闻分摊不辣的菜品,辣的菜自己支付。小贝给你两个有序列表,一个将菜肴分为辛辣和非辣,另一个列出它们的价格,请你写一个函数输出一个列表,其中第一个元素是小贝支付金额,第二个元素是闻闻支付金额。
# 作业
def solution(spicy, cost):
cost_xiaobei = 0
cost_wenwen = 0
for i in range(len(spicy)):
if spicy[i] == 'N':
cost_xiaobei = cost_xiaobei+cost[i]/2
cost_wenwen = cost_wenwen+cost[i]/2
else:
cost_xiaobei = cost_xiaobei+cost[i]
return [cost_xiaobei,cost_wenwen]
print(solution(["N", "N"], [10, 10]))
print(solution(["N", "S", "N"], [10, 10, 20]))
# 参考答案
def solution(spicy, cost):
s = sum(y for (x,y) in zip(spicy,cost) if x=='S')
n = (sum(cost)-s)
return [n/2+s,n/2]
print(solution(["N", "N"], [10, 10]))
每日一练0816:创建一个函数,输入三个参数:字符串,2个字母。在字符串中,如果第一个字母都出现在第二个字母之前,则返回True。
# 作业
def solution(s, first, second):
loc_second = s.index(second)
s = s[::-1]
loc_first = len(s)-s.index(first)+1
return loc_first<loc_second
print(solution("a rabbit jumps joyfully", "a", "j"))
print(solution("knaves knew about waterfalls", "k", "w"))
print(solution("happy birthday", "a", "y"))
print(solution("precarious kangaroos", "k", "a"))
# 参考答案
def solution(s, first, second):
fInd = max([i for i in range(len(s)) if s[i] == first])
sInd = min([i for i in range(len(s)) if s[i] == second])
return fInd < sInd
print(solution("a rabbit jumps joyfully", "a", "j"))
每日一练0817:创建一个对列表执行奇偶变换n次的函数。 每个奇偶变换:每个奇数整数加2(+2)。 每个偶数整数减2(-2)。
# 作业
def solution(lst, n):
for i in range(len(lst)):
if lst[i]%2 == 0:
lst[i] = lst[i]-2*n
else:
lst[i] = lst[i]+2*n
return lst
print(solution([3, 4, 9], 3))
网友评论