鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: zltzlt

Python:每日一题 264

[复制链接]
 楼主| 发表于 2019-10-27 16:59:56 | 显示全部楼层
__mrsq__ 发表于 2019-10-27 15:56
我觉得可以理解为:

C 是仓库里常规物品的合集

差不多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 17:00:12 | 显示全部楼层
本帖最后由 阴阳神万物主 于 2019-10-27 17:28 编辑

这锅我背了,我换个好懂的描述吧:
背景

小明同学是我们的执行人,他要去本公司旗下的某家商店采购一些东西,并调查该商店销售的商品是否符合本公司的规定。如果需要采购的东西商店存货不足,则可以向该商店提出进货要求,直到满足采购需求。但是,当要采购的东西商店没有存货,并且这个东西不符合公司规定时,由于小明失落的心情,会直接放弃采购,也不会调查了,因为小明认为在该商店中不可能购买到该商品。

描述

关于规定:当商店销售的商品中,出现规定以外的东西,则应该将该商店查封。
商店销售的商品记为字符串 A ,小明要采购的东西记为字符串 B ,公司规定的商品记为字符串 C 。
这三个字符串的内容均为:首字母大写的英文单词,每个单词用空格分开(在英文中有空格的单词,空格用短横线代替,如:Ice cream 在字符串中为 Ice-cream),某一单词的数量即为该单词代表的商品的数量。但在字符串 C 中不会出现重复的单词。

输入

A B C 三个字符串。

输出格式

当小明失落时,只需输出一个单词:Impossible
但是,他不失落时,需要输出:
第一行:小明是否采购成功?
第二行:按照规定,该商店是否 查封?
若小明采购失败,从第三行开始,往后的每一行(按照在 B 中从左往右出现的顺序)都是:采购失败的物品的单词+一个空格+商店需要进货的最少数量

输入输出样例

输入 #1
输出 #1
  1. A = 'Ball Ball Ball Knife Knife Condom Ice-cream'
  2. B = 'Ball Condom Ball'
  3. C = 'Ball Knife Condom'
复制代码

  1. True
  2. False
复制代码



输入 #2 输出 #2
  1. A = 'Ball Ball Ball Ball Ball Ball Ball Ball Ball Ball Ball Ball Ball Ball Ball Ball Ball Ball Ball Ball Star Star Star Sun'
  2. B = 'Ball Moon Star'
  3. C = 'Ball Star Sun Moon'
复制代码

  1. False
  2. True
  3. Moon 1
复制代码



输入 #3
输出 #3
  1. A = 'Jin-Yong Country-love-story Country-love-story Country-love-story Guitar Guitar Guitar'
  2. B = 'Little-Turtle'
  3. C = 'Jin-Yong Guitar'
复制代码

  1. Impossible
复制代码



点评

我很赞同!: 5.0
我很赞同!: 5
真是辛苦你了  发表于 2019-10-27 17:02
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 17:04:59 | 显示全部楼层
zltzlt 发表于 2019-10-27 16:40
往后,当 A 中无法取出 B 中列出的物品时,每一行为:{需要的物品单词} {如果 A 要满足 B 的需求需要进货 ...

OKOK
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 17:06:21 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2019-10-27 17:17 编辑
  1. def makedict(s):
  2.     s=s.split(' ')
  3.     return {i:s.count(i) for i in set(s)}
  4. def function(A,B,C):
  5.     set_c=set(C.split(' '))
  6.     a=makedict(A)
  7.     b=makedict(B)

  8.     res=[True]
  9.     for i in b:
  10.         try:
  11.             if a[i]<b[i]:
  12.                 res[0]=False
  13.                 res.append(f'{i} {b[i]-a[i]}')
  14.         except:
  15.             res[0]=False
  16.             if i not in set_c:
  17.                 print("Impossible")
  18.                 return
  19.             else:
  20.                 res.append(f'{i} {b[i]}')
  21.     res.insert(1,bool(len(set(a)-set_c)))
  22.     print(*res,sep='\n')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-27 17:09:15 | 显示全部楼层

OK
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-27 17:11:46 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-27 17:15:04 | 显示全部楼层

输入:A='Z S E E S A', B='Z Z A A S E', C='A Z'
输出:False
False
A 1
Z 1
预期结果:False
True
A 1
Z 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 17:16:22 | 显示全部楼层
阴阳神万物主 发表于 2019-10-27 17:00
这锅我背了,我换个好懂的描述吧:
背景

话说应该查封难道不应该是True吗……为什么是False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 17:23:42 | 显示全部楼层
zltzlt 发表于 2019-10-27 17:15
输入:A='Z S E E S A', B='Z Z A A S E', C='A Z'
输出:False
False

感觉你和他的例子冲突了啊……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-27 17:28:14 | 显示全部楼层
永恒的蓝色梦想 发表于 2019-10-27 17:23
感觉你和他的例子冲突了啊……

好吧,你的输出是对的

评分

参与人数 1荣誉 +1 收起 理由
永恒的蓝色梦想 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 17:28:56 | 显示全部楼层
永恒的蓝色梦想 发表于 2019-10-27 17:16
话说应该查封难道不应该是True吗……为什么是False

我在那里有个否定词
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 17:36:51 | 显示全部楼层
__mrsq__ 发表于 2019-10-27 16:39
打印{需要的物品单词} {如果 A 要满足 B 的需求需要进货的最少数量}

感谢,已经解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 17:57:16 | 显示全部楼层
zltzlt 发表于 2019-10-27 17:15
输入:A='Z S E E S A', B='Z Z A A S E', C='A Z'
输出:False
False

买不着,货都有但不够 ——> 第一行 False
商店违规进货 ——> 第二行 False
小明没有失落,按照 B 中从左到右的规则输出补货需求:
Z 1
A 1

所以,前两行没毛病,问题出在后面的顺序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 18:58:32 | 显示全部楼层
本帖最后由 danteer 于 2019-10-27 20:10 编辑
  1. def func(stra,strb,strc):
  2.     dicta = {}
  3.     dictb = {}
  4.     stra = stra.split()
  5.     for each in set(stra):
  6.         dicta[each] = stra.count(each)
  7.     strb = strb.split()
  8.     for each in set(strb):
  9.         dictb[each] = strb.count(each)
  10.     listc = strc.split()
  11.     kind = True
  12.     kindforbidden = True
  13.     kindless = []
  14.     number = True
  15.     numberless = {}
  16.    
  17.     for each in dictb:
  18.         if not each in dicta:
  19.             kind = False
  20.             kindless.append(each)
  21.         else:
  22.             if dicta[each] < dictb[each]:
  23.                 number = False
  24.                 numberless[each] = dictb[each] - dicta[each]
  25.                
  26.     for each in dictb:
  27.         if not each in dicta and not each in listc:
  28.             print('Impossible')
  29.             return None
  30.         
  31.     if number == True and kind == True:
  32.         print(True)
  33.     else:
  34.         print(False)
  35.         
  36.     for each in dicta:
  37.         if not each in listc:
  38.             kindforbidden = False
  39.     if kindforbidden == True:
  40.         print(True)
  41.     else:
  42.         print(False)
  43.    
  44.     for each in strb:
  45.         if strb.count(each) > 1:
  46.             counter = strb.count(each) - 1
  47.             while counter > 0:
  48.                 strb.remove(each)
  49.                 counter -= 1
  50.    
  51.     for each in strb:
  52.         if each in kindless:
  53.             print(each,str(dictb[each]))
  54.         elif each in numberless:
  55.             print(each,str(numberless[each]))
复制代码

真实的阅读理解题

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 20:03:18 | 显示全部楼层
  1. A = 'Star Chimpanzee Monkey Monkey Little-Turtle Mom Son Ball Ball Ball'
  2. B = 'Ball Star Ball'
  3. C = 'Star Chimpanzee Monkey Little-Turtle Mom Son Ball'

  4. # 要求a
  5. print(sum(list(map(lambda x:x in A.split(' ') and B.split(' ').count(x)<=A.split(' ')
  6.                    .count(x),B.split(' '))))==len(B.split(' ')))

  7. print(sum(list(map(lambda x:x in C.split(' '),set(A.split(' ')))))==len(set(A.split(' '))))

  8. #要求b
  9. if sum(list(map(lambda x:x in A.split(' ') and B.split(' ').count(x)<=A.split(' ')
  10.                    .count(x),set(B.split(' ')))))!=len(B.split(' ')):
  11.     for i in list(set(B.split(' '))):
  12.         if i not in A.split(' '):
  13.             if i not in C.split(' '):
  14.                 print('{%s}Impossible'%(i))
  15.             else:
  16.                 print('{%s}{%d}'%(i,B.split(' ').count(i)))
  17.         elif B.split(' ').count(i)>A.split(' ').count(i):
  18.             print('{%s}{%d}'%(i,B.split(' ').count(i)-A.split(' ').count(i)))

复制代码

评分

参与人数 1贡献 +1 收起 理由
zltzlt + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 22:45:39 | 显示全部楼层
def solution(A: str, B:str, C:str) -> str :
    from collections import Counter
    A = A.split()
    B = B.split()
    C = C.split()

    if set(A).intersection(set(B)) != set(B) and set(B).union(set(C))!=set(C):
        return "Impossible"

    res = list()
    tmp = list()
    dictA = Counter(A)
    dictB = Counter(B)
    dictA.subtract(dictB)
    #print(dictA)
    for i,v in dictA.items():
        if v<0:
            res.append("False")
            tmp.append(i)
            tmp.append(str(-v))
    if len(res)>0:
        res = res[:1]
    else:
        res.append("True")
    res.append(str(set(A).union(set(C))==set(C)))
    res = res+tmp
    return "\n".join(res)

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-27 23:23:12 | 显示全部楼层
题目没看懂 真的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-28 11:50:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-28 20:51:47 | 显示全部楼层
本帖最后由 华一仙 于 2019-10-28 22:15 编辑
  1. def f264(A, B, C):
  2.     """
  3.     A: 仓库存货
  4.     B: 采购列表
  5.     C: 合法清单
  6.     """
  7.     a_list, b_list = A.split(), B.split()
  8.     a_set, b_set, c_set = set(a_list), set(b_list), set(C.split())
  9.     for b in b_set - c_set:
  10.         if b not in a_set:                          # 若 B 的非法物品在 A 仓库中没有库存
  11.             print("Impossible")
  12.             return

  13.     repo_dict = {i:a_list.count(i) for i in a_set}  # 用来放 A 仓库的存货
  14.     lack_dict = {}                                  # 用来放 A 仓库无法满足 B 的部分
  15.     legal = True                                    # 默认 A 仓库的物品均合法
  16.     for b in b_set:                                 # 将 A 仓库无法满足 B 的物品放入 lack_dict
  17.         cnt = b_list.count(b)
  18.         if b not in a_set:
  19.             lack_dict[b] = cnt
  20.         elif repo_dict[b] < cnt:
  21.             lack_dict[b] = cnt - repo_dict[b]
  22.     for a in a_set:
  23.         if a not in c_set:                          # 若 A 仓库有非法物品,则做好标记并退出循环
  24.             legal = False
  25.             break

  26.     bought_all = lack_dict == {}
  27.     print(bought_all)                               # B 中的物品是否能买齐
  28.     print(legal)                                    # A 中的物品是否均合法
  29.     if not bought_all:
  30.         lack_list = [k for k in lack_dict.keys()]
  31.         lack_list.sort(key=b_list.index)
  32.         for b in lack_list:                         # 按 B 中的顺序输出没买齐的物品
  33.             print(b, lack_dict[b])
  34.     return
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-28 21:37:09 | 显示全部楼层
  1. from collections import Counter


  2. class Kao():

  3.     def __init__(self, A, B, C):
  4.         self.shopGoodLst = Counter(list(A.split()))
  5.         self.buyGoodLST = Counter(list(B.split()))
  6.         self.soldGoodLst = Counter(list(C.split()))
  7.         self.a, self.b = self.shopBuygoods()

  8.     def isFoul(self):
  9.         for good in self.shopGoodLst:
  10.             if good not in self.soldGoodLst:
  11.                 return True
  12.         else:
  13.             return False

  14.     def haveGood(self):
  15.         for good in self.buyGoodLST:
  16.             if good not in self.shopGoodLst:
  17.                 return True
  18.         else:
  19.             return False

  20.     def shopBuygoods(self):
  21.         a, b = '', ''
  22.         for good in self.buyGoodLST:
  23.             if self.shopGoodLst[good]:
  24.                 if self.buyGoodLST[good] > self.shopGoodLst[good]:
  25.                     a += good + ' ' + str(self.buyGoodLST[good] - self.shopGoodLst[good]) + '\n'
  26.             else:
  27.                 b += good
  28.                 a += good + ' ' + str(self.buyGoodLST[good] - self.shopGoodLst[good]) + '\n'
  29.         return a, b

  30.     def juge(self):
  31.         s, s1 = True, True
  32.         if self.isFoul() and self.haveGood():
  33.             return 'Impossible'
  34.         if self.b or self.a:
  35.             s = False
  36.         if self.isFoul():
  37.             s1 = False
  38.         return str(s) + '\n' + str(s1) + '\n' + self.a



  39. A = 'Z S E E S A'
  40. B = 'Z Z A A S E'
  41. C = 'A Z'
  42. print(Kao(A, B, C).juge())
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-28 11:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表