【PAT (Basic Level) Practice (中文)】1044 火星数字 (20 分)python题解及对测试点的说明

火星人是以 13 进制计数的:

  • 地球人的 0 被火星人称为 tret。
  • 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。
  • 火星人将进位以后的 12 个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。

例如地球人的数字 29 翻译成火星文就是 hel mar;而火星文 elo nov 对应地球数字 115。为了方便交流,请你编写程序实现地球和火星数字之间的互译。

输入格式:

输入第一行给出一个正整数 N(<100),随后 N 行,每行给出一个 [0, 169) 区间内的数字 —— 或者是地球文,或者是火星文。

输出格式:

对应输入的每一行,在一行中输出翻译后的另一种语言的数字。

输入样例:

4
29
5
elo nov
tam

结尾无空行

输出样例:

hel mar
may
115
13

结尾无空行

代码:

word1 = ['tret','jan','feb','mar','apr','may','jun','jly','aug','sep','oct','nov','dec']
word2 = ['tret','tam','hel','maa','huh','tou','kes','hei','elo','syy','lok','mer','jou']
def changeMars(word):#把火星文转化为数字的函数
    data = list(word.split())
    length = len(data)
    for i in range(length):
        if data[i] in word1:
            data[i] = word1.index(data[i])
        elif data[i] in word2:
            data[i] = word2.index(data[i])
    S = 0
    for i in range(length-1,-1,-1):
        S += data[i]*13**(length-1-i)
    return S      #返回数字

def changeEarth(num):#把数字转化为火星文的函数
    number = []
    if not num:
        number.append(0)#如果num = 0就加一个0
    while num:
        number.insert(0,(num % 13))
        num //= 13
    length = len(number)
    if length-1:
        for i in range(length-1):
            number[i] = word2[number[i]]
    number[-1] = word1[number[-1]]
    if number[-1] == 'tret' and length > 1:#当位数大于1且个位是tret的时候应该把tret删掉,这是火星文的特殊表示
        number.pop()
    return number

N = int(input())
for i in range(N):
    data = input()
    if data[0].isalpha():
        if len(data) == 3 and data in word2:
            data += ' tret'
        print(changeMars(data))
    else:
        list1 = changeEarth(int(data))
        length = len(list1)
        if length == 1:
            print(list1[0])
        else:
            for i in range(length):
                if i != length-1:
                    print(list1[i]+" ",end='')
                else:
                    print(list1[i])

注意:1.如果输入0应该返回tret(测试点1)

           2.如果输入tam实际表示的是tam tret也就是13进制的10

              火星文表示数字如果十位数字是高位数字应该省略个位的tret

           3.如果输入130应该返回lok (测试点2、4)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值