class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
def divideBy2(decNumber):
remstack=Stack()
while decNumber>0:
rem=decNumber%2
remstack.push(rem)
decNumber=decNumber//2
binString=""
while not remstack.isEmpty():
binString=binString+str(remstack.pop())
return binString
def baseConverter(num,base):
label="0123456789ABCDEF"
s=Stack()
while num>0:
re=num%base#不断取余基块
s.push(re)
num=num//base
#出栈
string=""
while not s.isEmpty():
string+=label[s.pop()]
return string
if __name__=='__main__':
num1=int(input("please input number:"))
print(str(num1),"对应的二进制是:",divideBy2(num1))
base=2
print(str(num1)+"对应的"+str(base)+"进制是:", baseConverter(num1,base))
base = 8
print(str(num1) + "对应的" + str(base) + "进制是:", baseConverter(num1, base))
base = 16
print(str(num1) +"对应的" + str(base) + "进制是:", baseConverter(num1, base))
```
```**
input是只能一次输一个整数呀,你输那么多肯定报错,多次输入的话,修改一下代码就行。可以split方法切割一下,然后用map方法转换成整形,最后转成列表。
已修改代码并贴出程序运行图,希望记得采纳一下哦!😘
class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items) - 1]
def size(self):
return len(self.items)
def divideBy2(decNumber):
remstack = Stack()
while decNumber > 0:
rem = decNumber % 2
remstack.push(rem)
decNumber = decNumber // 2
binString = ""
while not remstack.isEmpty():
binString = binString + str(remstack.pop())
return binString
def baseConverter(num, base):
label = "0123456789ABCDEF"
s = Stack()
while num > 0:
re = num % base # 不断取余基块
s.push(re)
num = num // base
# 出栈
string = ""
while not s.isEmpty():
string += label[s.pop()]
return string
if __name__ == '__main__':
nums = list(map(int,input("please input some number:").split(",")))
for num in nums:
base = 2
print(str(num) + "对应的" + str(base) + "进制是:", baseConverter(num, base))
base = 8
print(str(num) + "对应的" + str(base) + "进制是:", baseConverter(num, base))
base = 16
print(str(num) + "对应的" + str(base) + "进制是:", baseConverter(num, base))
print("----------")
dec = 369 #十进制数
b = bin(dec) #十进制转二进制
o = oct(dec) #十进制转八进制
x = hex(dec) #十进制转十六进制
print(b)
print(o)
print(x)
#结果: 0b表示二进制、0o表示八进制、0x表示十六进制
#0b101110001
#0o561
#0x171
这种方式是单个数的处理,如果想把多个数值一次性输入,比如"42,188,30,22,200",需要遍历处理每个数值对应的进制转换结果,代码修改如下:
if name=='main':
num1=input("please input number:")
for num in num1.split(','):
print(str(num1),"对应的二进制是:",divideBy2(num1))
base=2
print(str(num1)+"对应的"+str(base)+"进制是:", baseConverter(num1,base))
base = 8
print(str(num1) + "对应的" + str(base) + "进制是:", baseConverter(num1, base))
base = 16
print(str(num1) +"对应的" + str(base) + "进制是:", baseConverter(num1, base))