python - 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)
解决方案
一种解决方案是设置guess_col
为不是int
在 while 循环之前的内容:
guess_col = ''
while ...:
我建议你学习函数。这些是一个非常重要的工具,可以帮助您将代码组织成小的、连贯的、可重用的片段。例如,您可以编写一个函数get_int()
来执行验证并在用户输入数字时返回值。然后,您可以重用此函数来获取输入,而无需像在当前解决方案中那样重复代码。你可以做类似的事情
guess_col = get_int()
guess_row = get_int()
推荐阅读
- drupal - Drupal phpmailer 自定义邮件插件 - 发送电子邮件时出错(从 xxx 到 yyy,未设置回复)
- css - 使动态网格项从左开始
- javascript - Django 在 ajax 请求的生产中出现错误
- angular - 在 POST Api 中提交之前,在 Div 中获取并显示反应式表单的 FormArray 值
- javascript - Firebase - 未捕获的类型错误:database.ref 不是函数
- ios - 如何将 collectionView 放置在相应的 tableView 部分中
- c# - 异常 - System.ServiceModel.Security.SecurityNegotiationException:“无法为 SSL/TLS 安全通道建立信任关系
- html - 为什么 flex 属性不能正常工作?
- javascript - 如何使用 CommonCrypto 快速解密
- android - Android Studio:没有找到类“com.example.kotlincoroutines.MainActivity”和类似的运行时错误