【Educoder作业】问题求解——字符信息

这次作业就是处理字符,关键在于字符串的一些函数要掌握熟练。

这个题是容易的,只需要做到8 8 8位取出来就行,具体处理题目描述里已经给出了。


def parseQR(x) :
    l = len(x)
    ret = ''
    for i in range(l // 8) :

        mdl = x[i * 8 : (i + 1) * 8]
        val = int(mdl, 2)
        ret = ret + chr(val)
    return ret

code = input()
info = parseQR(code)
print('%s\n-> %s' % (code, info))

这个题也一样,题目让干啥就干啥,函数运用灵活一点即可。
异或操作可以转换成整数后直接用^即可。


def enChar(x) :
    val = ord(x)
    mdl = bin(val)
    mdl = mdl.replace('0b', '')
    mdl = '0' * (8 - len(mdl)) + mdl
    mdl = mdl[7] + mdl[: 7]
    key, ret = '10100101', ''
    for i in range(8) :

        ret = ret + str(eval(mdl[i]) ^ eval(key[i]))
    return ret

def deChar(y):
    x,key = '','10100101'
    for i in range(len(y)):
        if y[i]==key[i]:
            x=x+'0'
        else:
            x=x+'1'
    x = x[1:len(x)]+x[0]
    x = int(x,2)
    x = chr(x)
    return x

def enText(txt):
    enTxt = ''
    for x in txt:
        enTxt = enTxt+enChar(x)+' '
    return enTxt

def deText(txt):
    txt=txt.replace(' ','')
    deTxt = ''
    for i in range(len(txt)//8):
        y = txt[8*i:8*(i+1)]
        deTxt = deTxt+deChar(y)
    return deTxt

txt = input()
enTxt = enText(txt)
deTxt = deText(enTxt)
print('明文:', txt)
print('加密:', enTxt)
print('解密:', deTxt)

本题的话,把权重和答案放进一个列表和字符串里是很明智的,写起来会很好看而且短。


ans = '10X98765432'
v = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
def checksum(x) :
    l, Sum = len(x), 0
    for i in range(l) :

        Sum += int(x[i]) * v[i]
    return ans[Sum % 11]

ID = input()
cs = checksum(ID)
print('%s -> %s' % (ID, cs))

或许需要一些小技巧,我们用一个t m p tmp t m p记录一下字符出现了多少次,然后如果当前字符和上一个不一样,我们就把次数和上一个字符加进答案,次数重置为1 1 1;如果一样就次数+ 1 +1 +1。
注意要单独输出最后一个。


def RLE(x) :
    ret = ''
    l, tmp = len(x), 1
    for i in range(1, l) :
        if x[i] == x[i - 1] :
            tmp += 1
        else :
            ret = ret + str(tmp) + x[i - 1]
            tmp = 1
    ret = ret + str(tmp) + x[l - 1]
    return ret

x = input()
y = RLE(x)
print('原始数据:', x)
print('行程编码:', y)

本题和T 3 T3 T 3类似,把质量和代表元素的字符塞进字符串和列表是明智的,我们用i n d e x index i n d e x函数完成对字符串的索引就可以减少大量特判。


Idx = 'OCNSH'
v = [16, 12, 14, 32, 1]
def molecularWeight(x) :
    t, l, Sum = 0, len(x), 0
    while t < l :
        w = v[Idx.index(x[t])]
        t += 1
        mdl = 0
        while t < l and x[t].isdigit() :
            mdl = mdl * 10 + int(x[t])
            t = t + 1
        if not mdl :
            mdl = 1
        Sum += mdl * w
    return Sum

formula = input()
weight  = molecularWeight(formula)
print('%s的分子量是:%d'%(formula, weight))


def Gcd(x, y) :
    if x % y == 0 :
        return y
    return Gcd(y, x % y)

def add(x, y) :
    mx, my = x.split('/'), y.split('/')

    if len(mx) < 2 :
        mx.append('1')
    if len(my) < 2 :
        my.append('1')
    vx, vy = [], []
    vx.append(int(mx[0])); vx.append(int(mx[1]))
    vy.append(int(my[0])); vy.append(int(my[1]))

    Up, Down = vx[0] * vy[1] + vy[0] * vx[1], vx[1] * vy[1]
    d = Gcd(Up, Down)
    Up = Up // d; Down = Down // d
    if Down == 1 :
        return str(Up)
    else :
        return str(Up) + '/' + str(Down)

x = input()
y = input()
z = add(x, y)
print('%s + %s = %s' % (x, y, z))

Original: https://blog.csdn.net/JZYshuraK/article/details/125015540
Author: JZYshuraK
Title: 【Educoder作业】问题求解——字符信息

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/671352/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球