用户:
T_MKT小艺查看:10 回复:4 评论:10 创建时间:2021-08-24T19:20:27
【作品展示】

【作品介绍】
任意 2~36 进制间数字的转换
【作品源代码】
def jin_zhi_zhuan_huan(a, a0, b0):
# 为了整齐使用换行,对程序无影响
Number = ['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']
if a0 != 10:
c = 0
# 数字 / 字母对应的实际数字 × 该进制数的 i 次方
# 注意获取 “a” 的倒数第 i 位时减 1
for i in range(0, len(str(a)), 1):
c += int(Number.index(str(a)[(len(str(a)) - i - 1)]) * a0 ** i)
else:
c = a
if b0 != 10:
back = []
bei_chu_shu = c
# 重复执行直到被除数等于 0
while bei_chu_shu != 0:
# 寻找对应的字母 / 数字
back.insert(0, Number[int(bei_chu_shu % b0)])
# 被除数等于被除数减余数除以进制,这里直接用向下舍入代替,向下舍入用int代替
bei_chu_shu = int(bei_chu_shu / b0)
d = ''
# 连接起来
for i in range(0, len(back), 1):
d += str(back[i])
else:
d = c
return d
while True:
a = int(input('什么数字?(不支持小数)'))
try:
b = int(input('这个数字是什么进制?'))
except ValueError:
print('请输入 2~36 的整数')
continue
else:
# 确保在 2 ~ 36 内
if not b in range(2, 37):
print('请输入 2~36 的整数')
continue
try:
c = int(input('要转换成什么进制?'))
except ValueError:
print('请输入 2~36 的整数')
continue
else:
if not b in range(2, 37):
print('请输入 2~36 的整数')
continue
print(jin_zhi_zhuan_huan(a, b, c))
# 记得int
if int(input('按 0 继续,按 1 退出')) == 1:
print(end=None)
else:
print('')
import time
time.sleep(2)
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn
KIHIO我也有一个2~16进制转化器:
def main():
try:
j1=float(input('请输入被转化数字的进制数:'))
except ValueError:
print('输入错误,程序已停止运行。')
return 0
try:
j2=float(input('请输入已转化数字的进制数:'))
except ValueError:
print('输入错误,程序已停止运行。')
return 0
if int(j1)!=j1 or int(j2)!=j2:
print('输入错误,程序已停止运行。')
return 0
j1=int(j1)
j2=int(j2)
if (j1>16 or j2<2) or (j1<2 or j2>16):
print('输入错误,程序已停止运行。')
return 0
n=input('请输入被转化数字:')
i=0
aa=['a','b','c','d','e','f']
bb=[10,11,12,13,14,15]
ts=[]
for i in range(0,len(n)):
s=0
try:
cs=int(n[i])
except ValueError:
s=1
if s==0:
ts.append(int(n[i]))
else:
j=0
fl=0
for j in range(0,6):
if aa[j]==n[i]:
fl=1
break
if fl==1:
ts.append(bb[j])
else:
print('输入错误,程序已停止运行。')
return 0
if ts[i]>=j1:
print('输入错误,程序已停止运行。')
return 0
s1=0
for i in range(0,len(ts)):
s1+=ts[i]*(j1**(len(ts)-1-i))
if s1==0:
s2yd=[0]
else:
s2yd=[]
while s1>0:
s2yd.append(s1%j2)
s1=int(s1/j2)
i=len(s2yd)-1
s2y=[]
while i>=0:
s2y.append(s2yd[i])
i-=1
s2=' '
for i in range(0,len(s2y)):
if s2y[i]<10:
if s2==' ':
s2=str(s2y[i])
else:
s2=s2+str(s2y[i])
else:
if s2==' ':
s2=aa[s2y[i]-10]
else:
s2=s2+aa[s2y[i]-10]
print('已转化数字:'+s2)
return 0
x=main()点赞0
评论
T_MKT小艺新代码
def jin_zhi_zhuan_huan(a, a0, b0):
# 为了整齐使用换行,对程序无影响
Number = ['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']
if a0 == b0: # 相同直接转换
return a
if a0 != 10:
c = 0
# 数字 / 字母对应的实际数字 × 该进制数的 i 次方
# 注意获取 “a” 的倒数第 i 位时减 1
for i in range(0, len(str(a)), 1):
c += int(Number.index(str(a)[(len(str(a)) - i - 1)]) * a0 ** i)
else:
c = a
if b0 != 10:
back = []
bei_chu_shu = c
while bei_chu_shu != 0: # 重复执行直到被除数等于 0
back.insert(0, Number[int(bei_chu_shu % b0)]) # 寻找对应的字母 / 数字
# 被除数 = (被除数 - 余数) / 进制,这里直接用向下舍入(int)代替
bei_chu_shu = int(bei_chu_shu / b0)
d = ''
# 连接起来
for i in range(0, len(back), 1):
d += str(back[i])
else:
d = c
return d
while True:
try:
a = input('什么数字?(不支持小数)').upper()
except ValueError:
for i in range(0, len(a), 1):
if not (a[i] in Number):
print('请输入正确的整数')
continue
try:
b = int(input('这个数字是什么进制?'))
except ValueError:
print('请输入 2~36 的整数')
continue
else:
# 确保在 2 ~ 36 内
if not b in range(2, 37):
print('请输入 2~36 的整数')
continue
try:
c = int(input('要转换成什么进制?'))
except ValueError:
print('请输入 2~36 的整数')
continue
else:
if not b in range(2, 37):
print('请输入 2~36 的整数')
continue
print(jin_zhi_zhuan_huan(a, b, c))
# 记得int
if int(input('按 0 继续,按 1 退出')) == 1:
break
else:
print('')
import time
time.sleep(2)
print(end='')
点赞0
评论
KIHIO2~36进制互相转化程序代码(支持小数,已转化数字的精确程度有上限,不过还是相对比较精确的):
def main():
fml=['0','1','2','3',
'4','5','6','7',
'8','9','aA','bB',
'cC','dD','eE','fF',
'gG','hH','iI','jJ',
'kK','lL','mM','nN',
'oO','pP','qQ','rR',
'sS','tT','uU','vV',
'wW','xX','yY','zZ']
try:
j1=float(input('请输入被转化数字的进制数:'))
except ValueError:
print('输入错误。')
return 0
if int(j1)!=j1:
print('输入错误。')
return 0
j1=int(j1)
if j1>36 or j1<2:
print('输入错误。')
return 0
try:
j2=float(input('请输入已转化数字的进制数:'))
except ValueError:
print('输入错误。')
return 0
if int(j2)!=j2:
print('输入错误。')
return 0
j2=int(j2)
if j2>36 or j2<2:
print('输入错误。')
return 0
num=input('请输入被转化数字:')
i1=0
i2=0
ofa=0
num1=[]
num2=[]
if len(num)==0:
print('输入错误。')
return 0
for i1 in range(0,len(num)):
if num[i1]=='.':
if i1==0 or i1==len(num)-1:
print('输入错误。')
return 0
ofa+=1
if ofa>=2:
print('输入错误。')
return 0
else:
ftla=0
for i2 in range(0,36):
if len(fml[i2])==1:
if fml[i2]==num[i1]:
ftla=1
break
else:
if (fml[i2])[0]==num[i1] or (fml[i2])[1]==num[i1]:
ftla=1
break
if ftla==1:
if i2>=j1:
print('输入错误。')
return 0
if ofa==0:
num1.append(i2)
else:
num2.append(i2)
else:
print('输入错误。')
return 0
s1=0
for i1 in range(0,len(num1)):
s1+=num1[i1]*(j1**(len(num1)-1-i1))
for i1 in range(0,len(num2)):
s1+=num2[i1]*(1/(j1**(i1+1)))
s1a=int(s1)
s1b=s1-s1a
pres2a=[]
pres喵=[]
if s1a==0:
pres2a=[0]
while s1a>0:
pres2a.append(s1a%j2)
s1a=s1a//j2
pres2a.reverse()
i1=1
while s1b>0.0000000001:
k=int(s1b/(1/(j2**i1)))
pres喵.append(k)
s1b-=(k*(1/(j2**i1)))
i1+=1
s2a=' '
s喵=' '
for i1 in range(0,len(pres2a)):
if s2a==' ':
s2a=(fml[pres2a[i1]])[0]
else:
s2a=s2a+((fml[pres2a[i1]])[0])
for i1 in range(0,len(pres喵)):
if s喵==' ':
s喵=(fml[pres喵[i1]])[0]
else:
s喵=s喵+((fml[pres喵[i1]])[0])
if s喵==' ':
print('已转化数字:'+s2a)
else:
print('已转化数字:'+s2a+'.'+s喵)
ms=main()点赞0
评论