【问题标题】:Python: obliviate user input that has become obsoletePython:忽略已经过时的用户输入
【发布时间】:2019-02-28 08:20:13
【问题描述】:

我创建了我的所有 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)

【问题讨论】:

  • @Artem 他的代码确实提供了所有这些东西。

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


【解决方案1】:

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

guess_col = ''
while ...:

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

guess_col = get_int()
guess_row = get_int()

【讨论】:

  • 谢谢。我可以在这里使用两个不同的函数,一个用于每个坐标,但是,如果我只使用一个函数,那么我无法提示用户:请输入坐标 X 和请输入坐标 Y。我只能问一个“通用”问题:请输入坐标(不指定哪一个)还是我错了?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多