You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:05:16