我有这个来获取输入并将其放在一个列表中:
def start():
move_order=[raw_input("Enter your moves: ").split()]
我只想要允许角色A,D,S,C,H(游戏> _>)。我尝试过使用正则表达式:
if re.match('[ADSCH]+', [move_order]) is False:
print "That's not a proper move!"
return start()
......以不同的形式......
string_test=re.compile('[ADSCH]+')
if string_test.match(move_order]) is False:
print "That's not a proper move!"
return start()
Aaaaand无法让它发挥作用。我确实在这些代码块中做错了什么,我试图搞清楚,但它没有用。了解我做错了什么会很好,但我的问题的解决方案会让我感觉更多。我甚至可能不需要使用re,但在我看来,这是一种实现我想要的空间有效方式。我认为我的直接问题是我不知道如何使用列表(除非(当然)还有其他明显的问题,训练有素的眼睛可以找到)。
我会继续问,因为我也可能会把它搞砸了,但是我还需要确保一个C永远不会在一个H之后...但是一点点提示是可以接受的,因为我喜欢搞清楚事情。
答案 0 :(得分:1)
有很多方法可以匹配ADSCH'
您可以使用raw_input().upper()
删除'adsch'
使用re
:不要在
def start():
movement = raw_input("Enter your moves: ").upper()
if re.match('^[ADSCH\s]*$', movement):
# it's a legal input
使用str.strip
if movement.strip(' ADSCH') == '':
# it's a legal input
将all
与move_order
列表一起使用(也可以使用字符串):
def start():
move_order=[raw_input("Enter your moves: ").upper().split()]
if all((x in 'ADSCH' for x in move_order)):
# it's a legal input
将any
与move_order
列表一起使用(也可以使用字符串):
if any((x not in 'ADSCH' for x in move_order)):
# it's an illegal input
答案 1 :(得分:0)
我不知道python,但你可以这样做:
for c in move_order:
if (c == 'A' or c == 'D' c == 'S' or c == 'C' or c == 'H'):
[do something with the character]
答案 2 :(得分:0)
如此小范围你可以迭代move_order并检查每个元素是否存在于允许的移动中
def start():
move_order=[c for c in raw_input("Enter your moves: ")]
moves = ['A','D','S','C','H']
for c in move_order:
if c not in moves:
print "That's not a proper move!"
return start()
编辑:解决方案考虑到评论中的建议
def start():
move_order=list(input("Enter your moves: "))
while set(move_order) - set('ADSCH'):
for x in set(move_order) - set('ADSCH'):
move_order = [input("%s is not a vaild move, please enter another move" % x) if i==x else i for i in move_order]
Print "Player ready" #Rest of program..
如果我理解你的问题,我不认为分裂正在按照你的想法行事。它不会将用户输入的字符串的每个字符拆分为数组。
答案 3 :(得分:0)
之后你对这些角色做了什么?甚至可能没有必要采取这一步骤。设计它,以便当你为动作做动作时,你不会做任何无效动作。
def move_left():
print "Moving left"
def move_down():
print "moving down"
#...etc
def invalid_move():
print "invalid move"
# This dictionary connects move command letters
# with the functions above that do the moving
move_funcs = {
'A': move_left,
'S': move_down,
'D': move_right,
'C': wtf_keyboard_layout,
'H': do_H_thing
}
moves = raw_input("Enter your moves: ")
for move in moves.upper():
# this gets the right function for the move,
# e.g. A gets move_left
# but any character not there gets invalid_move
move_func = move_funcs.get(move, invalid_move)
move_func()