美文网首页
Python每日一练 || 19年8月

Python每日一练 || 19年8月

作者: 洋阳酱 | 来源:发表于2019-08-17 10:54 被阅读0次

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

    每日一练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))
    

    相关文章

      网友评论

          本文标题:Python每日一练 || 19年8月

          本文链接:https://www.haomeiwen.com/subject/dexfsctx.html