首页 > 解决方案 > Python:忽略已经过时的用户输入

问题描述

我创建了所有 Python 初学者的游戏版本:Battleship。用户必须定义​​两个坐标,X 和 Y。

我进行了验证,它拒绝任何不是整数的输入。如果输入为整数,则代码继续执行。但是,最后,我需要将当前用户输入硬编码到一个字符串中,否则代码将不会进入 while 循环并在下一轮开始时重新提示用户输入另一组坐标。

这实际上工作得很好,但我觉得这不是处理这个问题的最干净的方法。

谁能建议一个更好的方法来做到这一点?

# ships are positioned, user must sink them

for turn in range(num_of_turns):
    print("Turn", turn + 1)
    while type(guess_col) is not int:
        try:
            guess_col = input("Enter coordinate X: ")
            guess_col = int(guess_col)
        except ValueError:
            print("Enter coordinate X again")
            continue
    while type(guess_row) is not int:
        try:
            guess_row = input("Enter coordinate Y: ")
            guess_row = int(guess_row)
        except ValueError:
            print("Enter coordinate Y again")
            continue

        # do stuff (sink ships, miss ships, etc...)

    guess_col = str(guess_col)
    guess_row = str(guess_row)

标签: pythonpython-3.xfor-loopwhile-loopuser-input

解决方案


一种解决方案是设置guess_col为不是int在 while 循环之前的内容:

guess_col = ''
while ...:

我建议你学习函数。这些是一个非常重要的工具,可以帮助您将代码组织成小的、连贯的、可重用的片段。例如,您可以编写一个函数get_int()来执行验证并在用户输入数字时返回值。然后,您可以重用此函数来获取输入,而无需像在当前解决方案中那样重复代码。你可以做类似的事情

guess_col = get_int()
guess_row = get_int()

推荐阅读