
本文详解 python 世界生成中常见的换行逻辑错误,通过修正字符串拼接方式与 `print()` 行为,实现每行输出可变长度的连续 `#` 字符(如 `####`、`##`、`#########`),避免意外空行和垂直拉伸。
你在编写简易地形生成器时遇到了典型的“换行污染”问题:原代码中 line = "#\n" * hillSize 实际生成的是带换行符的重复字符串(例如 hillSize=4 时得到 "#\n#\n#\n#\n"),导致每个 # 都独占一行;再加上 print() 默认自动追加换行,最终输出变成一长串孤立的 #,完全不符合预期的“水平堆叠山丘”效果。
✅ 正确做法是:让每一行的 # 水平拼接,换行由 print() 统一控制。以下是优化后的标准实现:
import random
def generate_hill():
hill_size = random.randint(1, 10) # 随机生成 1–10 个 # 的宽度
return "#" * hill_size # 关键:只拼接字符,不包含 \n
for _ in range(10):
print(generate_hill()) # print 自动换行 → 每座“山丘”占一行运行后将输出类似:
###### # ######## ### ######### # ########## #### ##### #########
⚠️ 注意事项:
立即学习“Python免费学习笔记(深入)”;
- ❌ 错误写法:"#\n" * n → 产生 n 个带换行的 #,本质是 n 行单字符;
- ✅ 正确写法:"#" * n → 生成长度为 n 的纯字符串,交由 print() 控制何时换行;
- 若需完全自定义输出(例如批量生成后一次性打印),可使用 end="" 抑制 print 换行,并手动添加 \n:
for _ in range(10): print(generate_hill(), end="\n") # 显式换行,等效于默认行为 - 变量命名建议遵循 PEP 8 规范(如 hill_size 而非 hillSize),提升可读性与协作兼容性。
这个模式是程序化地形生成的基础——理解字符串构造与 I/O 换行职责分离,才能稳定扩展为更复杂的生物群系、洞穴或分形地貌系统。










