鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: zltzlt

[已解决]Python:每日一题 319

[复制链接]
发表于 2020-1-30 21:50:39 | 显示全部楼层
本帖最后由 hrp 于 2020-1-30 21:55 编辑
  1. def func319(n, k):
  2.     m = [str(i) for i in range(10)] + [chr(i) for i in range(97, 123)]
  3.     if not n:
  4.         return '0'
  5.     res = ''
  6.     while n:
  7.         res += m[n % k]
  8.         n //= k
  9.     return res[::-1]
复制代码

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
zltzlt + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 23:01:55 | 显示全部楼层
  1. # 给定一个十进制数 n 和一个整数 k,将十进制数 n 转换成 k 进制数
  2. def switchDic(num):
  3.     numbers = {
  4.         10 : 'a',
  5.         11 : 'b',
  6.         12 : 'c',
  7.         13 : 'd',
  8.         14 : 'e',
  9.         15 : 'f'
  10.     }
  11.     return numbers.get(num, None)

  12. def d319(n,k):
  13.     result = ''
  14.     if n == 0 :
  15.         return '0'
  16.     while n > 0 :
  17.         remainder = n % k
  18.         n = n // k
  19.         if remainder <= 9:
  20.             result += str(remainder)
  21.         else:
  22.             result += str(switchDic(remainder))
  23.     return result[::-1]

  24. #print(d319(5,2))
  25. print(d319(30,16))
复制代码

评分

参与人数 1荣誉 +5 鱼币 +3 收起 理由
zltzlt + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 23:02:36 | 显示全部楼层

只写到了16进制,更高进制直接在后面加字母
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-31 00:05:50 | 显示全部楼层
  1. def fun319(n,k):
  2.     if n == 0:
  3.         return 0
  4.     string = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  5.     result = ""
  6.     while n:
  7.         i = n % k
  8.         n = n // k
  9.         result += string[i]
  10.     return result[::-1]
  11.    
  12. print(fun319(2020,64))
复制代码


本来打算建个列表或者字典,把0-9,a-z,A-Z都写进去,然后建个pickle,存进去的,后来想了想,还是直接用字符串吧,更快一点,要用的时候复制一遍就行了

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
zltzlt + 10 + 10

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-31 00:29:40 | 显示全部楼层
  1. def f319(n,k):
  2.     tmp=n
  3.     res=''
  4.     while tmp!=0:
  5.         if tmp%k>9:
  6.             res=chr(tmp%k+87)+res
  7.         else:
  8.             res=str(tmp%k)+res
  9.         tmp=tmp//k
  10.     return res
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-31 07:54:27 | 显示全部楼层
我也只能在格式上与其他答案做区别了,O_O
  1. def solve(n:'int >= 0',k:'0 < int < 37')->str:
  2.     nums = '0123456789abcdefghijklmnopqrstuvwxyz'
  3.     res = ''
  4.     while n:
  5.         res = nums[n%k] + res
  6.         n //= k
  7.     return res if res else '0'
  8. if __name__ == '__main__':
  9.     print('示例1 输出:',repr(solve(5,2)))
  10.     print('示例2 输出:',repr(solve(30,16)))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-31 14:15:09 | 显示全部楼层
  1. def f319(n,k):
  2.     d={2:bin,8:oct,10:int,16:hex}
  3.     for i,v in d.items():
  4.         if i==k:
  5.             return v(n)[2:]
复制代码

不知这样行不行?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-31 14:15:54 | 显示全部楼层
kinkon 发表于 2020-1-31 14:15
不知这样行不行?

不行,k 不一定是 2、8、10 和 16。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-2 22:09:21 | 显示全部楼层
def func319(n,k):
    shu=['0','1','2','3','4','5','6','7','8','9','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    ans=''
    while n >= k :
        ans = shu[n%k] + ans
        n = n // k
    ans = shu[n] + ans
    return ans
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-3 13:26:51 | 显示全部楼层
def function319(n,k):
    L = [chr(i) for i in range(48,58)]+[chr(i) for i in range(97,123)]
    A = ''
    while n:
        remainder = n % k
        n = n // k
        A+=L[remainder]
    return  A[::-1]
print(function319(5,2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-5 09:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表