Python每日一练 || 19年8月

题目来源:扇贝编程-每日一练

每日一练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))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353