Python:淘汰过时的用户输入

时间:2018-09-24 19:09:01

标签: python python-3.x for-loop while-loop user-input

我在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)

1 个答案:

答案 0 :(得分:0)

一种解决方案是在while循环之前将guess_col设置为非int的值:

guess_col = ''
while ...:

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

guess_col = get_int()
guess_row = get_int()