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 *****
看看帖子里藏了啥好东西~~~ 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)
利用字符串操作
python3 貌似不允许 03 04 这样直接 0 开头的数字,输入字符串'03' '04'会更好
def fun(num):
maps = str.maketrans("0123456789","012EH59L86")
return int(str(num).translate(maps)[::-1], 36) 学到了
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) 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 看了各位大神的解法,才发现各位的思路都是太巧妙了,一个是直接把数字对应16进制再到十进制后的值,一个是利用列表的下标和值,一个是利用maketrans方法,太巧妙了,相比之下,自己的一步一步的算,差距相当大啊,加油! solomonxian 发表于 2017-9-6 18:20
利用字符串操作
python3 貌似不允许 03 04 这样直接 0 开头的数字,输入字符串'03' '04'会更好
本来还想写,一看写不出更好的放弃了 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)) 大神 古堡主人。 发表于 2017-9-6 22:51
本来还想写,一看写不出更好的放弃了
你不是来做练习的嘛,写自己的啊,哥{:10_258:} 完全不懂
学习学习{:5_109:} 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)
的 。。。 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 没有考虑任何效率问题直接做了一张转换表。最后用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)) 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