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

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