我想验证输入使用Python的简单字段。 int类型的Python输入验证 - int在20和100之间,没有字母
- map_x
- int类型的map_y bool类型的
- 障碍
我已经尝试了这里的许多建议对SO。我的代码:
class Map(object):
def __init__(self):
# Note: These are defaults.
# map_x and map_y both have a range of 20 <= x <= 100
# obstacles = 'Y' || 'N'
self.map_x = -1
self.map_y = -1
self.obstacles = '-'
def forest_map(self):
self.map_x = self.choice("Map Width")
self.map_y = self.choice("Map Length")
self.obstacles = self.choice("Obstacles (Y/N)")
def choice(self, text):
# Code
我尝试了几种不同的解决方案,试图保持“高效”和“可重用”代码的概念。
在方法“选择”中找到text参数的原因:我已提示用户正在与之交互(例如,choice = raw_input(text +“ - >”))。
我的解决方案:
我曾尝试与测试,如果文本的说法,但对我来说,太特别是该解决方案的陈述;因此不可重复使用。
我尝试过使用try/except,但是,即使如此,似乎我的while语句正在消耗输入,并且没有将值返回给map_x和map_y。
我曾尝试(成功上一节中的菜单选择中,不收集用户的喜好!)使用字典如下:
# menu is an argument that takes a dictionary.
# dictionary can be found in a list of dictionaries named menu_list.
# choice is a member of class Menus, and menu_list is defined in Menu's __init__.
def choice(self, menu):
acceptable = menu
if menu == self.menu_list[2]:
choice = raw_input("Choice-> ")
while choice not in acceptable:
choice = raw_input("Choice-> ")
Map().generate(choice)
我只是在测试“障碍”的成功。我用(虽然选择不在['Y','Y','N','n']:#代码
截至目前,我只有在测试整数的问题,但保持真实可重用性和效率的方面
有没有一种方法,我可以看到,如果输入(选择)包含任何类型的字母,并因此,请求更多的输入? 有没有一种方法,我可以同时,确保该map_x/map_y是的范围内2 < =选择< = 100?
感谢一束, Akratix
===编辑10/2/14 === 感谢下面的解决方案,我提出了两个实现。 为了以验证被认为是一个整数,以及在设定范围内输入,我使用下面的代码片断:
def map_choice(self, text):
is_valid = False
while not is_valid:
try:
value = int(raw_input(text + "-> "))
if 2 > value or 100 < value:
print "Invalid input!"
continue
return value
except ValueError:
print "Invalid input!"
为了验证输入的是被认为是特定的信在一个可接受的输入的“名单”,我用下面的代码片段:
def obstacle_choice(self, text):
is_valid = False
while not is_valid:
value = raw_input(text + "-> ")
if any(value == x for x in ('Y', 'N', 'y', 'n')):
return value
Kalhartt,非常感谢您提供的解决方案。我有一个问题: 在第二种解决方案中,采用'self.map_x ='行。 我很困惑,因为valid_map没有被传入'choice',即代码不是int(self.choice(“Map Width”,valid_map))。 为什么lambda函数作为int()的参数传入? 我误解了使用lambda函数吗? 非常感谢! – Akratix 2014-10-03 00:53:44
@Akratix你是绝对正确的,这是我的错误,应该是'int(self.choice(“Map Width”,valid_map))'。好,我会编辑并修复! – kalhartt 2014-10-03 01:14:36