Python打印时如何忽略前导空格?队列输出空格问题求助
解决Python队列打印前导空格的问题
嘿,我来帮你搞定这个前导空格的麻烦!咱们先拆解下问题出在哪:
问题根源
- 无效空元素混入队列:你的循环从
i=0开始,当i=0时,while number>0根本不会执行,temp是空列表,拼接后得到的是空字符串,这个空字符串被塞进了队列。打印时第一个输出的就是它,紧接着的空格就变成了开头的多余空格。 - 逐个打印的格式缺陷:就算队列里全是有效元素,用
print q.get(),这种逐个打印的方式,在Python 2里不仅可能因为空元素出问题,还会在最后多一个 trailing 空格,格式不够干净。
解决方案
这里有两种实用的修改方式,你可以按需选择:
方法1:修正元素逻辑,用join统一打印
先把队列里的有效元素全部提取到列表,再用空格拼接后一次性打印,彻底避免多余空格:
import Queue num = int(input()) # 注意要转成整数,不然range会报错 q = Queue.Queue() # 循环从1开始,跳过i=0,直接避免生成空字符串 for i in range(1, num+1): number = i temp = [] while number > 0: temp.append(str(number % 2)) # 直接转成字符串,后续不用map number = number // 2 # 用整数除法,避免得到浮点数 temp = temp[::-1] number_str = ''.join(temp) q.put(number_str) # 把队列元素转成列表,拼接后打印 result = [] while not q.empty(): result.append(q.get()) print(' '.join(result))
方法2:保留逐个打印,手动控制空格格式
如果非要逐个打印,可以跳过空元素,并且只在非第一个元素前加空格:
import Queue num = int(input()) q = Queue.Queue() for i in range(0, num+1): number = i temp = [] while number > 0: temp.append(str(number % 2)) number = number // 2 temp = temp[::-1] number_str = ''.join(temp) if number_str: # 只放入非空字符串 q.put(number_str) # 手动控制打印格式,避免前导空格 first_item = True while not q.empty(): item = q.get() if first_item: print(item, end='') first_item = False else: print(' ' + item, end='') print() # 最后补个换行
额外优化小技巧
其实Python内置了二进制转换函数bin(),比如bin(5)会返回'0b101',去掉前两位就是咱们要的二进制字符串,能大幅简化你的代码:
number_str = bin(i)[2:] # 直接得到i的二进制字符串,自动去掉'0b'前缀
用这个替换你原来的二进制转换逻辑,代码会清爽很多!
内容的提问来源于stack exchange,提问作者Sriram
相关产品推荐
相关产品推荐

