鱼C论坛

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

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

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

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

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

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

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

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-9-5 09:09:22 | 显示全部楼层
def StrCount(s):
    Mylist=['HIOX','AMTUVWY','BCDEK','NSZ']
    Mycount=[0,0,0,0,0]
    for i in s:
        if i in Mylist[0]:Mycount[0]+=1
        elif i in Mylist[1]:Mycount[1]+=1
        elif i in Mylist[2]:Mycount[2]+=1
        elif i in Mylist[3]:Mycount[3]+=1
        else:Mycount[4]+=1
    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 | 显示全部楼层
from itertools import groupby
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')))
str1 = 'WEFNKDSPHOFGMAFW'
for m,n in groupby(sorted(list(str1), key=group), key=group):
        if m == 'RL': print('左右对称%d个' % len(list(n)), end=', ')
        if m == 'UD': print('上下对称%d个' % len(list(n)), end='. ')
        if m == 'RA': print('旋转对称%d个' % len(list(n)), end=', ')
        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 | 显示全部楼层
def strcount(st):
    str_dict = {'左右对称':'AMTUVWY','上下对称':'BCDEK','旋转对称':'NSZ','全对称':'HIOX','其他字符':'FGJLPQR'}
    count_dict = {'左右对称':0, '上下对称':0,'旋转对称':0,'全对称':0,'其他字符':0}
    for each in st:
        for key in str_dict.keys():
            if each in str_dict[key]:
                count_dict[key] += 1
                break
    result = '字符串中共有'
    for key in count_dict.keys():
        result += '%s%d个,'%(key,count_dict[key])
    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 | 显示全部楼层
def StrCount(str1):
  count1,count2,count3,count4,count5 = 0,0,0,0,0
  for i in str1:
      if i in ('HIOX'):#全对称
         count1+=1
      elif i in ('BCDEK'):#上下对称
         count2+=1
      elif i in ('AMTUVWY'):#左右对称
         count3+=1
      elif i in ('SZN'):#旋转对称
         count4+=1    
      else:
         count5+=1
  print('字符串中共有左右对称字符%d个,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其他字符%d个' % (count3,count2,count4,count1,count5))
str1=input('请输入一个字符串:')
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个字母分组,是人工分吗?
def StrCount(s):
    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 | 显示全部楼层
def StrCount():
    ALL='HIOX'
    LR='AMTUVWY'
    UPDOWN='BCDEK'
    Rotate='NSZ'
    al=0
    lr=0
    ud=0
    rotate=0
    els=0
    str1='WEFNKDSPHOFGMAFW'
    for e in str1:
        if e in ALL:
            al+=1
        if e in LR:
            lr+=1
        if e in UPDOWN:
            ud+=1
        if e in Rotate:
            rotate+=1
        else:
            els+=1
   


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

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-9-5 23:23:52 | 显示全部楼层
def strCount(string):
    '统计字符串中左右对称0,上下对称1,旋转对称2,全对称字符3,及其他字符4'
    alphabet = {
        'A': 0,
        'B': 1,
        'C': 1,
        'D': 1,
        'E': 1,
        'F': 4,
        'G': 4,
        'H': 3,
        'I': 3,
        'J': 4,
        'K': 1,
        'L': 4,
        'M': 0,
        'N': 2,
        'O': 3,
        'P': 4,
        'Q': 4,
        'R': 4,
        'S': 2,
        'T': 0,
        'U': 0,
        'V': 0,
        'W': 0,
        'X': 3,
        'Y': 0,
        'Z': 2
    }
    leftright = 0
    topdown = 0
    spin = 0
    complete = 0
    other = 0
    for s in string:
        if alphabet[s] == 0:
            leftright += 1
        elif alphabet[s] == 1:
            topdown += 1
        elif alphabet[s] == 2:
            spin += 1
        elif alphabet[s] == 3:
            complete += 1
        else:
            other += 1
    print('字符串中共有左右对称字符%d个,上下对称字符%d个,旋转对称字符%d个,全对称字符%d个,其他字符%d个。' % (leftright, topdown, spin, complete, other))

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[i] for i in range(5)就可以满足
第一个还是不行,求指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-9-7 23:09:31 | 显示全部楼层
def strcount(strn):
    zy,sx,xz,qdc,others = 0,0,0,0,0
    for each in strn:
        if each in 'AMTUVWY':
            zy += 1
        elif each in 'BCDEK':
            sx += 1
        elif each in 'NSZ':
            xz += 1
        elif each in 'HIOX':
            qdc += 1
        else:
            others += 1
    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-11-23 01:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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