如何在Python中用随机符号填充字符串?解决辐射终端对齐问题
《辐射》终端模拟器黑客破解模块:对齐与随机填充符号问题
问题描述
我正在制作《辐射》(Fallout)终端模拟器的「黑客破解」模块,目标还原游戏原生效果。目前已实现从词库选取单词并以类地址格式展示,但单词长度跨度大(4字符如FISH到12字符如Hippopotamus),导致显示行错位,分隔选项的竖线|无法对齐。
尝试用动态格式字符串实现随机符号填充时,代码抛出ValueError,提示“格式字符串中仅存在一个'}'”。我清楚错误根源,但想知道如何实现终端打印时动态使用随机符号作为填充字符。
相关报错代码:
import random possibleChars = ['!','@','#','$','%','^','&','*','(',')',';',':'] fillerChar = random.sample(possibleChars) print('0xCC01 |{)&@*'+"{:"+fillerChar+"^12}".format(words[0])+'@ |0xCC02 |!(#'+"{:"+fillerChar+"^12}".format(words[0])+'@)!#\n')
解决方案
1. 修正随机字符获取方式
random.sample()需要传入两个参数(样本列表、选取数量),且返回列表而非单个字符。直接用random.choice()更适合取单个随机填充符:
import random possibleChars = ['!','@','#','$','%','^','&','*','(',')',';',':'] # 直接获取单个随机填充字符 fillerChar = random.choice(possibleChars)
2. 转义格式字符串中的普通大括号
原字符串里的{)会被Python误判为格式占位符的开头,导致解析错误。需要把普通{和}转义为{{和}},同时用更清晰的方式构造格式字符串:
方式一:使用格式化占位符模板
# 转义所有普通大括号,定义行模板 line_template = '0xCC01 |{{)&@*{}@ |0xCC02 |!(#{}@)!#\n' # 生成填充后的单词(用指定符号居中填充至12位) padded_word = "{:{fill}^12}".format(words[0], fill=fillerChar) # 代入模板生成最终行 output_line = line_template.format(padded_word, padded_word) # 输出(替换成你的typing_.typingPrint即可) print(output_line)
方式二:使用f-string简化写法
# 生成填充后的单词 padded_word = f"{words[0]:{fillerChar}^12}" # 转义普通大括号后直接拼接 output_line = f'0xCC01 |{{)&@{padded_word}@ |0xCC02 |!(#{padded_word}@)!#\n' print(output_line)
核心原理说明
- 转义
{{和}}后,Python会将其解析为普通的{和},不会干扰格式字符串的占位符解析。 - 动态填充符号通过
format()的fill参数或f-string的嵌套格式实现,避免了拼接字符串时的语法冲突。
内容的提问来源于stack exchange,提问作者Jaxer5636
相关产品推荐
相关产品推荐

