鱼C论坛

 找回密码
 立即注册
查看: 5481|回复: 34

[技术交流] Python:每日一题 91(答题领鱼币)

[复制链接]
发表于 2017-9-5 08:31:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
昨天的题目难度有些大,今天再来个简单的。
我们知道英文字符A~Z从外观上看,有左右对称的如AM等,也有上下对称的如BK等,也有旋转180度重合的,也称作旋转对称如SN等,也有符合前面三种的称为全对称,现在给出一个字符串,统计出各种对称和非对称的字符数量。注对于全对称的字符就不再计入前三种对称中了。字符串中有重复的字符则都计算在内,如有两个W,则记为左右对称字符2个。

  1. >>> str1 = 'WEFNKDSPHOFGMAFW'
  2. >>> StrCount(str1)
  3. 字符串中共有左右对称字符4个,上下对称字符3个,旋转对称字符2个,全对称字符2个,其他字符5个。
复制代码


我的程序:
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-9-5 09:09:22 | 显示全部楼层
  1. def StrCount(s):
  2.     Mylist=['HIOX','AMTUVWY','BCDEK','NSZ']
  3.     Mycount=[0,0,0,0,0]
  4.     for i in s:
  5.         if i in Mylist[0]:Mycount[0]+=1
  6.         elif i in Mylist[1]:Mycount[1]+=1
  7.         elif i in Mylist[2]:Mycount[2]+=1
  8.         elif i in Mylist[3]:Mycount[3]+=1
  9.         else:Mycount[4]+=1
  10.     print ('字符串中共有左右对称字符%d个,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其他字符%d个。'%(Mycount[1],Mycount[2],Mycount[3],Mycount[0],Mycount[4]))
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5

查看全部评分

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

使用道具 举报

发表于 2017-9-5 09:27:10 | 显示全部楼层
with many thanks
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-5 09:40:21 | 显示全部楼层
  1. from itertools import groupby
  2. group = lambda s: 'RL' if s in 'AMTUVWY' else ('UD' if s in 'BCDEK' else ('RA' if s in 'NSZ' else ('ALL' if s in 'HIOX' else 'Others')))
  3. str1 = 'WEFNKDSPHOFGMAFW'
  4. for m,n in groupby(sorted(list(str1), key=group), key=group):
  5.         if m == 'RL': print('左右对称%d个' % len(list(n)), end=', ')
  6.         if m == 'UD': print('上下对称%d个' % len(list(n)), end='. ')
  7.         if m == 'RA': print('旋转对称%d个' % len(list(n)), end=', ')
  8.         if m == 'ALL': print('全对称%d个' % len(list(n)), end=', ')
复制代码

全对称2个, 旋转对称2个, 左右对称4个, 上下对称3个.  

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-9-5 09:55:54 | 显示全部楼层

def StrCount(a):
    zy=0
    sx=0
    xz=0
    qd=0
    qt=0
    for i in a:
        if i in 'AMTUVWY':
            zy += 1
        elif i in 'BKCDE':
            sx += 1
        elif i in 'SNZ':
            xz += 1
        elif i in 'OHIX':
            qd += 1
        elif i in 'FGJLPQR':
            qt += 1
    print ('字符串中共有左右对称字符%d个,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其他字符%d个'%(zy,sx,xz,qd,qt))

a = 'WEFNKDSPHOFGMAFW'
StrCount(a)

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-9-5 10:15:19 | 显示全部楼层
  1. def strcount(st):
  2.     str_dict = {'左右对称':'AMTUVWY','上下对称':'BCDEK','旋转对称':'NSZ','全对称':'HIOX','其他字符':'FGJLPQR'}
  3.     count_dict = {'左右对称':0, '上下对称':0,'旋转对称':0,'全对称':0,'其他字符':0}
  4.     for each in st:
  5.         for key in str_dict.keys():
  6.             if each in str_dict[key]:
  7.                 count_dict[key] += 1
  8.                 break
  9.     result = '字符串中共有'
  10.     for key in count_dict.keys():
  11.         result += '%s%d个,'%(key,count_dict[key])
  12.     return result[:-1] + '。'
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-9-5 10:18:36 | 显示全部楼层
def StrCount(str1):
    i=0
    j=0
    k=0
    m=0
    n=0
    dict1={'lr':'AMTUVWY','ud':'BCDEK','rotate':'NSZ','all':'HIOX','other':'FGJLPQR'}
    for each_str in str1:
        for each_item in dict1:
            for each_str1 in dict1[each_item]:
                if each_str == each_str1:
                    if each_item=='lr':
                        i+=1
                    elif each_item=='ud':
                        j+=1
                    elif each_item=='rotate':
                        k+=1
                    elif each_item=='all':
                        m+=1
                    elif each_item=='other':
                        n+=1

    print('字符串中共有左右对称字符%d,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其它字符%d个'%(i,j,k,m,n))
   


通过字典的方式遍历。。

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-9-5 10:23:11 | 显示全部楼层
  1. def StrCount(str1):
  2.   count1,count2,count3,count4,count5 = 0,0,0,0,0
  3.   for i in str1:
  4.       if i in ('HIOX'):#全对称
  5.          count1+=1
  6.       elif i in ('BCDEK'):#上下对称
  7.          count2+=1
  8.       elif i in ('AMTUVWY'):#左右对称
  9.          count3+=1
  10.       elif i in ('SZN'):#旋转对称
  11.          count4+=1   
  12.       else:
  13.          count5+=1
  14.   print('字符串中共有左右对称字符%d个,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其他字符%d个' % (count3,count2,count4,count1,count5))
  15. str1=input('请输入一个字符串:')
  16. StrCount(str1)
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-9-5 10:38:01 | 显示全部楼层
。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-5 15:28:14 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-5 18:17:43 | 显示全部楼层
想问怎么把26个字母分组,是人工分吗?
  1. def StrCount(s):
  2.     return "字符串中共有左右对称字符%s个,上下对称字符%s个,旋转对称字符%s个,全对称字符%s个,其他字符%s个。"%tuple(len([i for i in s if i in j]) for j in ('AMTUVWY','BCDEK','NSZ','HIOX','FGJLPQR'))
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-9-5 20:38:58 | 显示全部楼层
  1. def StrCount():
  2.     ALL='HIOX'
  3.     LR='AMTUVWY'
  4.     UPDOWN='BCDEK'
  5.     Rotate='NSZ'
  6.     al=0
  7.     lr=0
  8.     ud=0
  9.     rotate=0
  10.     els=0
  11.     str1='WEFNKDSPHOFGMAFW'
  12.     for e in str1:
  13.         if e in ALL:
  14.             al+=1
  15.         if e in LR:
  16.             lr+=1
  17.         if e in UPDOWN:
  18.             ud+=1
  19.         if e in Rotate:
  20.             rotate+=1
  21.         else:
  22.             els+=1
  23.    


  24.         
  25.     print ('字符串中共有左\
  26. 右对称字符%d个,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其他字符%d个。'
  27. %(lr,ud,rotate,al,els))
  28. if __name__=="__main__":
  29.     StrCount()
  30. ===================== RESTART: D:\Python36-32\caogao.py =====================
  31. 字符串中共有左右对称字符4个,上下对称字符3个,旋转对称字符2个,全对称字符2个,其他字符14个。
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-9-5 23:23:52 | 显示全部楼层
  1. def strCount(string):
  2.     '统计字符串中左右对称0,上下对称1,旋转对称2,全对称字符3,及其他字符4'
  3.     alphabet = {
  4.         'A': 0,
  5.         'B': 1,
  6.         'C': 1,
  7.         'D': 1,
  8.         'E': 1,
  9.         'F': 4,
  10.         'G': 4,
  11.         'H': 3,
  12.         'I': 3,
  13.         'J': 4,
  14.         'K': 1,
  15.         'L': 4,
  16.         'M': 0,
  17.         'N': 2,
  18.         'O': 3,
  19.         'P': 4,
  20.         'Q': 4,
  21.         'R': 4,
  22.         'S': 2,
  23.         'T': 0,
  24.         'U': 0,
  25.         'V': 0,
  26.         'W': 0,
  27.         'X': 3,
  28.         'Y': 0,
  29.         'Z': 2
  30.     }
  31.     leftright = 0
  32.     topdown = 0
  33.     spin = 0
  34.     complete = 0
  35.     other = 0
  36.     for s in string:
  37.         if alphabet[s] == 0:
  38.             leftright += 1
  39.         elif alphabet[s] == 1:
  40.             topdown += 1
  41.         elif alphabet[s] == 2:
  42.             spin += 1
  43.         elif alphabet[s] == 3:
  44.             complete += 1
  45.         else:
  46.             other += 1
  47.     print('字符串中共有左右对称字符%d个,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其他字符%d个。' % (leftright, topdown, spin, complete, other))

  48. strCount('WEFNKDSPHOFGMAFW')
复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-9-6 12:33:14 | 显示全部楼层
def StrCount(str1):
    zuoyou='AMTUVWXY'
    shangxia='BCDEK'
    xuanzhuan='NSZ'
    quanduichen = 'HIOX'
    count_zuoyou = 0
    count_shangxia = 0
    count_xuanzhuan = 0
    count_quanduichen = 0
    count_qita = 0
    for each in str1:
        if each in zuoyou:
            count_zuoyou += 1
        elif each in shangxia:
            count_shangxia += 1
        elif each in xuanzhuan:
            count_xuanzhuan += 1
        elif each in quanduichen:
            count_quanduichen += 1
        else:
            count_qita += 1
               
    print("字符串中共有左右对称字符",count_zuoyou,"个,上下对称字符",count_shangxia,"个,旋转对称字符",count_xuanzhuan,"个,全对称字符",count_quanduichen,"个,其他字符",count_qita,"个")


   

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-9-6 12:35:21 | 显示全部楼层
工程狗 发表于 2017-9-6 12:33
def StrCount(str1):
    zuoyou='AMTUVWXY'
    shangxia='BCDEK'

弱弱的问一句,你们那个可以复制代码的是怎么弄上去的??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-7 10:43:04 | 显示全部楼层
def StrCount(tt):
    list1=['A','M','T','U','V','W','Y']
    list2=['B','C','D','E','K']
    list3=['N','S','Z']
    list4=['H','I','O','X']
    list5=['F','G','J','L','P','Q','R']
    a = dict().fromkeys(range(5), 0)
    for i in tt:
        for x in range(1,6):
            if i in list(str(x)):
                a[x]+=1
    print('字符串中共有左右对称字符%d个,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其他字符%d个'%(a[0],a[1],a[2],a[3],a[4]))

NN=input('请输入:')
StrCount(NN)
===================
输出错误。我有两个问题,1:怎么        在for x in range(1,6):
                                                                 if i in list(str(x)):处让其判定是否在list(x)中的写法是什么(我这个有问题)
2: print('字符串中共有左右对称字符%d个,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其他字符%d个'%(a[0],a[1],a[2],a[3],a[4])) 处:
我想把%(a[0],a[1],a[2],a[3],a[4)改成类似%(a[i] for i in range(5))怎么写?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-7 11:10:58 | 显示全部楼层
土沙拉 发表于 2017-9-7 10:43
def StrCount(tt):
    list1=['A','M','T','U','V','W','Y']
    list2=['B','C','D','E','K']

第二个问题我解决了 tuple(a for i in range(5)就可以满足
第一个还是不行,求指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-7 22:36:38 | 显示全部楼层
  1. str1 = 'WEFNKDSPHOFGMAFW'
  2. def StrCount(Str):
  3.     count = [0]*5
  4.     for i in list(Str):
  5.         if i in list("AMTUVWY"):
  6.             count[0]+=1
  7.         elif i in list("BCDEK"):
  8.             count[1]+=1
  9.         elif i in list("NSZ"):
  10.             count[2]+=1
  11.         elif i in list("HIOX"):
  12.             count[3]+=1
  13.         else:
  14.             count[4]+=1
  15.     print("字符串中共有左右对称字符%d个,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其他字符%d个。" % (count[0],count[1],count[2],count[3],count[4]))
  16. StrCount(str1)
复制代码

结果:
============
字符串中共有左右对称字符4个,上下对称字符3个,旋转对称字符2个,全对称字符2个,其他字符5个。
>>>

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

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

使用道具 举报

发表于 2017-9-7 23:09:31 | 显示全部楼层
  1. def strcount(strn):
  2.     zy,sx,xz,qdc,others = 0,0,0,0,0
  3.     for each in strn:
  4.         if each in 'AMTUVWY':
  5.             zy += 1
  6.         elif each in 'BCDEK':
  7.             sx += 1
  8.         elif each in 'NSZ':
  9.             xz += 1
  10.         elif each in 'HIOX':
  11.             qdc += 1
  12.         else:
  13.             others += 1
  14.     print('字符串中共有左右对称字符%d个,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其他字符%d个。'%(zy,sx,xz,qdc,others))

复制代码

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

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

使用道具 举报

 楼主| 发表于 2017-9-7 23:24:18 | 显示全部楼层
土沙拉 发表于 2017-9-7 10:43
def StrCount(tt):
    list1=['A','M','T','U','V','W','Y']
    list2=['B','C','D','E','K']

可以用local(),这是一个字典,包括了所有定义了的变量。
if i in locals()['list' + str(x)]:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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