Python猜词游戏:如何让下划线输出在同一行而非自动换行?
解决Python猜词游戏下划线换行问题
嘿,我来帮你搞定这个问题!你的下划线之所以会一行一个显示,核心原因是Python的print()函数默认在输出末尾加换行符(\n),所以每个下划线都被单独拆成了一行。另外我还发现你代码里有个小bug,会导致你永远赢不了游戏,顺便一起给你修正啦~
首先说换行的问题:只需要给print()加上end参数,指定输出结束后用空格代替默认的换行符就行。然后是那个bug:你现在不管字符有没有被猜中,都在给failed加1,这会让failed永远等于单词的长度,根本触发不了failed == 0的胜利条件,得把failed +=1移到未猜中的分支里。
下面是修改后的完整代码,我还补充了一些游戏逻辑让它更完整:
import random # 读取词库文件(注意你的文件路径要正确哦) lines = open('/Users/xxx/Desktop/wordlist.text').read().splitlines() word = random.choice(lines) guesses = '' turns = 10 print("Start Guessing") while turns > 0: failed = 0 # 先清除当前行的旧输出,让界面更干净 print("\r", end="") for char in word: if char == " ": print(char, end=" ") # 空格也用空格分隔开 elif char in guesses: print(char, end=" ") else: print("_", end=" ") failed += 1 # 只有没猜中的字符才算失败计数 print() # 打印完当前状态后换行,方便输入 if failed == 0: print("You won! 🎉") break # 赢了就退出循环啦 # 获取用户输入,转成小写避免大小写敏感问题 guess = input("Guess a character: ").lower() guesses += guess # 判断是不是猜错了 if guess not in word: turns -= 1 print(f"Wrong! You have {turns} turns left.") if turns == 0: print(f"You lose! The word was: {word}")
核心修改说明:
- 解决换行问题:给所有输出字符的
print()加上end=" ",让每个字符输出后用空格分隔,而不是自动换行。 - 修复胜利逻辑:把
failed +=1移到else分支(也就是字符未被猜中的情况),这样只有未猜中的字符才会增加失败计数,胜利条件才能正常触发。 - 优化体验:添加
print("\r", end="")清除旧状态行,输入转小写避免大小写问题,补充了失败提示和游戏结束的反馈。
这样修改后,下划线就会变成_ _ _ _ _ _的形式显示在同一行,游戏也能正常判断输赢啦~
内容的提问来源于stack exchange,提问作者J.walker
相关产品推荐
相关产品推荐

