如何在Python中隐藏input()的用户输入,自定义输入展示位置?
问题:隐藏输入默认显示,自定义输入内容的打印位置
我需要隐藏take_stick = int(input())的默认用户输入显示,将输入内容打印到指定位置,期望输出效果如下:
Game of sticks Player 1 enter how many sticks to remove: 2 There are 19 sticks left Player 2 enter how many sticks to remove: 4 Must remove between 1-3 sticks!
但目前程序会在每行之间单独显示用户输入的数字,当前代码如下:
def main(): print("Game of sticks") player_turn = 1 starting_sticks = 21 sticks_left = starting_sticks while True: if starting_sticks == 21: if sticks_left < 1: print("There are", sticks_left, "sticks left") take_stick = int(input()) if take_stick < 1 or take_stick > 3: print("Must remove between 1-3 sticks!") elif take_stick >= 1 and take_stick <= 3: sticks_left -= take_stick if sticks_left == 21: print("Player", player_turn, "enter how many sticks to remove:", take_stick) player_turn += 1 if player_turn == 3: player_turn -= 2 elif sticks_left != 1: print("Player", player_turn, "enter how many sticks to remove:", take_stick) player_turn += 1 if player_turn == 3: player_turn -= 2 print("There are", sticks_left, "sticks left") if sticks_left <= 0: print() print("Player", (player_turn), "lost the game!") break main()
解决方法
核心是先打印输入提示(不换行),再获取输入,这样用户输入的内容会直接跟在提示文本后面,无需事后重复打印,同时避免输入内容单独占一行。另外需要修正原代码中冗余的starting_sticks ==21判断(该变量从未修改,条件永远成立),梳理逻辑流程:
修改后的代码:
def main(): print("Game of sticks") player_turn = 1 sticks_left = 21 while True: # 先打印提示,end=''让光标停在提示末尾,不换行 print(f"Player {player_turn} enter how many sticks to remove: ", end='') # 直接获取输入,此时输入会显示在提示后面 take_stick = int(input()) # 处理非法输入 if take_stick < 1 or take_stick > 3: print("Must remove between 1-3 sticks!") continue # 不切换玩家,重新输入 # 合法输入,减少剩余棍子数 sticks_left -= take_stick # 检查是否游戏结束 if sticks_left <= 0: print(f"\nPlayer {player_turn} lost the game!") break # 打印剩余棍子数 print(f"There are {sticks_left} sticks left") # 切换玩家 player_turn = 2 if player_turn == 1 else 1 main()
关键说明:
print(..., end=''):取消默认的换行符,让输入光标停在提示文本后面,用户输入的数字会直接显示在提示末尾,符合期望格式。- 移除了原代码中冗余的
starting_sticks判断,简化逻辑。 - 用
continue处理非法输入,避免错误切换玩家。 - 优化玩家切换逻辑,用
player_turn = 2 if player_turn ==1 else 1替代繁琐的加减操作。
内容的提问来源于stack exchange,提问作者emkay
相关产品推荐
相关产品推荐

