python逻辑题

最近开始在找工作了,昨天接了一家公司的笔试。形式是线上笔试。笔试题目是逻辑题。
题目如下:
李雷和韩梅梅坐前后排,上课想说话怕被老师发现,所以改为传纸条。为了不被老师发现他们纸条上写的是啥,,他们约定了如下方法传递信息:

将26个大写英文字母,外加空格,一共27个字符分成三组,每组9个。也就是ABCDEFGHI是第一组,JKLMNOPQR是第二组,STUVWXYZ是第三组(此处用代表空格)。

先根据月份数m,一整个分组为单位进行左移,移动(m-1)次。

然后根据日期数d,对每个分组内的字符进行循环左移,移动(n-1)次。

以3月8日为例,首先移动分组3-1=2次,变成:

STUVWXYZ* ABCDEFGHI JKLMNOPQR21

然后每组内字符移动8-1 = 7次,最终编码为:

Z*STUVWXY HIABCDEFG QRJKLMNOP

对于要传递的信息中的每个字符,用组号和组内序号两个数字来表示。

如果在3月8日传递信息 “HAPPY”,那么H位于第2组的第1个,A位于第二组 第3个 …一次类推,纸条上会写成:

21,23,39,39,19

输入要求:

每个输入包含两行。第一行使用空格分隔的两个数字,第一个数字是月份,第二个数字是日期。输入保证是一个合法日期。

第二个行为需要编码的字符串,仅由A~Z和空格组成,长度不超过1024个字符

输出规范:

对每个输入,打印对应的编码,数字之间用空格分隔,每个输出占一行。

输入示例:

1 1

HI

输出示例:

18 19

解题代码:

item_1 = ['A','B','C','D','E','F','G','H','I']
item_2 = ['J','K','L','M','N','O','P','Q','R']
item_3 = ['S','T','U','V','W','X','Y','Z','*']
big_month=[1,3,5,7,8,10,12]
small_month = [4,6,9,11]
month = 0
day = 0
while True:
    days = 0
    date = input('请输入日期')
    date = date.split(' ')
    if int(date[0]) <= 0 or int(date[0]) >= 12:
        print('输入有误,请重新输入')
        continue
    if int(date[0]) in big_month:
        days = 31
    elif int(date[0]) in small_month:
        days = 30
    elif int(date[0]) == 2:
        days = 28
    else:
        print('输入有误,请重新输入')
        continue
    if int(date[1]) <=0 or int(date[1]) >= days:
        print('输入有误请重新输入')
        continue
    month = int(date[0])
    day = int(date[1])
    break
for i in range(month-1):
    item_1,item_2,item_3=item_2,item_3,item_1
for i in range(day-1):
    item_1.append(item_1.pop(0))
    item_2.append(item_2.pop(0))
    item_3.append(item_3.pop(0))
a = ''.join(item_1)
b = ''.join(item_2)
c = ''.join(item_3)
print(a,b,c)
num = ''
while True:
    codes = input('请输入信息')
    for i in codes:
        if not i.isupper() and i != ' ':
            print('输入有误,请重新输入')
            num = ''
            break
        if i == ' ':
            i = '*'
        for l in item_1:
            if i == l:
                num += '1'+str((item_1.index(l)+1))+' '
                break
        for k in item_2:
            if i == k:
                num += '2' + str((item_2.index(k)+1))+' '
                break
        for n in item_3:
            if i == n:
                num += '3' + str(item_3.index(n)+1)+' '
                break
    break
print(num)
原文地址:https://www.cnblogs.com/big-cabbage/p/10300355.html