有四处错误
1)输入的字符不对
n = int(input())
2)应该是整除//,而不是除
n//=16
3)if nums[i]<0 后面用print会直接换行
4)如果输出完毕需要换行的话,还要加一个print
试修改如下:
n = int(input())
nums=[]
while n>0:
nums.append(n%16)
n//=16
import sys
sum=0
nums = list(reversed(nums))
a=['A','B','C','D','E','F']
for i in range(0,len(nums)):
if nums[i]<10:
sys.stdout.write(str(nums[i]))
else:
sys.stdout.write((a[nums[i]-10]))
print()
print函数要加参数
print(num[i],end='')
否则它默认后面跟个换行符,
话说,你自己有IDE,不知道先运行一下看看结果吗,就单纯当个码字的工具,也不管代码能不能执行就往网站上传啊
另,print就够用了,不要画蛇添足的又引入什么sys.stdout
def baseshift(self,number,baseFrom:int, baseTo:int):
assert 16 >= baseFrom >= 2,("base only ranges from 2 to 16")
assert 16 >= baseTo >= 2,("base only ranges from 2 to 16")
assert baseFrom != baseTo,("cannot have the same bases")
#turn to base 10
number = str(number)
baseDecNum = 0
numlen = len(number)-1
for i in number:
getNum = self.baseHex.get(i) if i in "ABCDEF" else eval(i)
baseDecNum += getNum*baseFrom**numlen
numlen-=1
#get loop time
looptime = 0
while baseTo**(looptime+1) <= baseDecNum:
looptime += 1
#turn to target base
test = baseTo ** looptime
restr = ""
for i in range(looptime+1):
baseToNum = int(baseDecNum // test)
baseDecNum = int(baseDecNum % test)
if baseToNum == 10:
restr += "A"
elif baseToNum == 11:
restr += "B"
elif baseToNum == 12:
restr += "C"
elif baseToNum == 13:
restr += "D"
elif baseToNum == 14:
restr += "E"
elif baseToNum == 15:
restr += "F"
else:
restr += str(baseToNum)
test /= baseTo
return restr
import string
import sys
D = string.hexdigits
def sToH(n):
h = ''
if n < 16:
return D[n]
while n > 0:
h = D[n % 16] + h
n //= 16
return h.upper()
x = 123
res = sToH(x)
sys.stdout.write(res)
in_n = input()
n = int(in_n)
nums = []
while n > 0:
nums.append(n % 16)
n = int(n / 16)
nums.reverse()
out = ""
a = ['A','B','C','D','E','F']
for i in range(0, len(nums)):
if nums[i] < 10:
out = '{}{}'.format(out, nums[i])
else:
out = '{}{}'.format(out, a[nums[i] - 10])
print(out)