1.编写一个Python程序,需要用栈结构,将十进制数42,188,30,22,200转换为相应的二,八,十六进制数。

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))

img

img


这个代码不知道哪里出错了,为什么只能转化一位数,多位数的输进去就报错**


```

```**

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("----------")

img

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))