如何在循环输出的问号前加空格?仅用print()不导入sys模块
问题描述
我想在每个问号前添加空格,但这段逻辑处于循环结构中,使用end=" "只会在问号之间增加额外间距。请问是否存在不导入sys模块、仅使用print()方法实现该需求的方案?
当前使用sys模块的实现代码及输出如下:
import sys def display_board(board): for rows in board: sys.stdout.write(" "* 20) for columns in rows: # 隐藏单元格显示"?",可见单元格显示实际字符"@" sys.stdout.write(("?" if columns != "@" else "@")) sys.stdout.write('\n')
输出:
????????? ????????? ????????? ????????? ????????? ????????? ????????? ?????????
解决方案
有两种无需依赖sys模块的实现方式:
方法1:先构建完整行字符串再打印
先拼接好包含开头空格、带前缀空格的符号的完整行字符串,再通过print()输出:
def display_board(board): for rows in board: line = " " * 20 for columns in rows: line += " " + ("?" if columns != "@" else "@") print(line)
如果介意行尾多出的空格,可以改用print(line.rstrip())去掉末尾空格。
方法2:结合列表推导式与print()的sep参数
先将每行的符号处理为带前缀空格的元素列表,再通过解包列表+sep=""实现无间隔打印:
def display_board(board): for rows in board: symbols = [" " + ("?" if col != "@" else "@") for col in rows] print(" " * 20, *symbols, sep="")
内容的提问来源于stack exchange,提问作者user19601595
相关产品推荐
相关产品推荐

