冬雪雪冬 发表于 2017-9-6 17:02:03

Python:每日一题 93(答题领鱼币)

我们知道计算器显示数字是用的7段数码字,就如下图所示。


把它旋转180°,会变成另外的数字。


当然有些看起来像英文字母LhE,我们把这些看作36进制的数字(正好36进制用0~9和A~Z来表示)。
现在给出一个数字,把它旋转后得到的36进制数再转为10进制的数作为结果。
如123,旋转为16进制E21,10进制为18217
如6574,旋转为16进制hL59,10进制为820557


def fun(num):
    ......

我的解法:
**** Hidden Message *****


baicel21314 发表于 2017-9-6 17:09:10

看看帖子里藏了啥好东西~~~

suloman 发表于 2017-9-6 18:09:56

def fun(b):
    a=
    c=""
    for i in str(b):
      c = str(a)+c
    print (c)
    x=0
    for i in range(len(c)):
      if c[-i-1] == 'e':
            temp=14
      elif c[-i-1] == 'h':
            temp=17
      elif c[-i-1] == 'l':
            temp= 21
      else:
            temp=int(c[-int(i)-1])
      x=x+36**i*temp
    print(x)
      
fun(6574)

solomonxian 发表于 2017-9-6 18:20:28

利用字符串操作
python3 貌似不允许 03 04 这样直接 0 开头的数字,输入字符串'03' '04'会更好
def fun(num):
    maps = str.maketrans("0123456789","012EH59L86")
    return int(str(num).translate(maps)[::-1], 36)

younasd 发表于 2017-9-6 19:03:20

学到了

bush牛 发表于 2017-9-6 22:05:24

def fun(num):
    s = list(str(num))
    s.reverse()
    pattern = {'3':'e', '4':'h', '7':'l', '6':'9','9':'6'}
    s = if x in pattern else x for x in s]
    return int(''.join(s), 36)

chunchun2017 发表于 2017-9-6 22:39:11

def fun(num):
   str0 = ''
   sum = 0
   num0 = str(num)
   for i in num0[::-1]:
      if(i in ('1','2','5','8')):
         str0+=i
      elif(i=='3'):
         str0+='E'
      elif(i=='4'):
         str0+='H'
      elif(i in ('6','9')):
         str0+=str(15-int(i))
      elif(i=='7'):
         str0+='L'
   for i in str0:
       index0=len(str0)-str0.index(i)-1
       if(i=='E'):
          sum+=14*(36**index0)
       elif(i=='H'):
          sum+=17*(36**index0)
       elif(i=='L'):
          sum+=21*(36**index0)
       else:
          sum+=int(i)*(36**index0)
   print(sum)
import math
num = int(input('请输入一个数:'))
fun(num)
运行结果:
请输入一个数:123
18217

请输入一个数:6574
820557

chunchun2017 发表于 2017-9-6 22:46:49

看了各位大神的解法,才发现各位的思路都是太巧妙了,一个是直接把数字对应16进制再到十进制后的值,一个是利用列表的下标和值,一个是利用maketrans方法,太巧妙了,相比之下,自己的一步一步的算,差距相当大啊,加油!

古堡主人。 发表于 2017-9-6 22:51:04

solomonxian 发表于 2017-9-6 18:20
利用字符串操作
python3 貌似不允许 03 04 这样直接 0 开头的数字,输入字符串'03' '04'会更好

本来还想写,一看写不出更好的放弃了

Noregret 发表于 2017-9-6 23:55:13

def fun(num):
    from functools import reduce
    a = str(num)
    b = list(a)
    b.reverse()

    if '3' in b:
      theindex = b.index('3')
      b = '14'

    if '4' in b:
      theindex = b.index('4')
      b = '17'

    if '6' in b:
      theindex = b.index('6')
      b = 'wait'

    if '7' in b:
      theindex = b.index('7')
      b = '21'

    if '9' in b:
      theindex = b.index('9')
      b = '6'

    if 'wait' in b:
      theindex = b.index('wait')
      b = '9'
   
    def calc(x, y):
      return x * 36 + y

    c = list(map(int, b))
    d = reduce(calc, c)
    return d

if __name__ =='__main__':
    print(fun(123))
    print(fun(6574))

mass 发表于 2017-9-7 17:06:39

大神

solomonxian 发表于 2017-9-7 18:29:18

古堡主人。 发表于 2017-9-6 22:51
本来还想写,一看写不出更好的放弃了

你不是来做练习的嘛,写自己的啊,哥{:10_258:}

不可以 发表于 2017-9-7 22:11:53

完全不懂

樱花冷雨 发表于 2017-9-8 11:46:33

学习学习{:5_109:}

liuwenqi 发表于 2017-9-13 17:54:30

def fun(num):
    result = 0
    i = 0
    for item in num:
      if item == '3':
            result += 14*(36**i)
      elif item == '4':
            result += 17*(36**i)
      elif item == '6':
            result += 9*(36**i)
      elif item == '7':
            result += 21*(36**i)
      elif item == '9':
            result += 6*(36**i)
      else:
            result += int(item)*(36**i)
      i += 1
   
    return result

num = input('请输入:')
result = fun(num)
print(result)

2740710202 发表于 2017-9-14 10:37:29

Qking 发表于 2017-9-26 21:14:34

。。。

shigure_takimi 发表于 2017-12-4 16:58:52

s = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
turn = {'0':'0','1':'1','2':'2','3':'E','4':'H','5':'5','6':'9','7':'L','8':'8','9':'6'}
def fun(num):
    newNumIn36 = for i in str(num)]
    newNumIn36 = newNumIn36[::-1]
   
    return sum() * (36 ** (len(str(num))-i-1)) for i in range(len(str(num)))])

print(fun(123))
print(fun(6574))


## 题目写错啦!
##如123,旋转为16进制E21(应该是36进制E21),10进制为18217
##如6574,旋转为16进制hL59(应该是36进制hL59),10进制为820557

colinshi 发表于 2017-12-4 17:28:17

没有考虑任何效率问题直接做了一张转换表。最后用INT函数将36进制的数据转换为10进制
def go36(num):
    l= {'0':'0','1':'1','2':'2','3':'e','4':'h','5':'5','6':'9','7':'l','8':'8','9':'6'}
    r = str()
    for i in list(str(num)):
      r=(l)+r
    return int(r,36)

if __name__ == '__main__':
    print(go36(123))
    print(go36(6574))

新手潘包邮 发表于 2018-4-23 12:32:01

def fun(num):
    num1 = []
    num = str(num)
    b = reversed(num)
    for i in b:
      num1.append(int(i))
    print(num1)
    num_dict = {4:18,7:22,3:15}
    j = len(num1)
    print(j)
    sum1 = 0
    for i in num1:
      k = i
      if i in num_dict:
            k = num_dict
            print(k)
      sum1 += (36**(j-1)) * k
      j -= 1
    print(sum1)
    #num = int((list(str(num))))
    #print(num)
fun(123456789)
页: [1] 2
查看完整版本: Python:每日一题 93(答题领鱼币)