我有这个来获取输入并将其放入列表中:
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()
啊啊啊无法让它工作。我肯定在这些代码块中做错了什么,我试图找出答案,但它不起作用。了解我做错了什么固然很好,但问题的解决方案会教会我更多我想要的东西。我什至可能不需要使用 re,但在我看来,这是完成我想要的任务的一种节省空间的方式。我认为我面临的直接问题是我不知道如何让重新使用列表(除非(当然)训练有素的眼睛可以发现其他明显的问题)。
我会继续问,因为我可能也会搞砸这个,但我还需要确保 C 永远不会在 H 之后......但是对此的一个微小提示是可以接受的,因为我喜欢把事情弄清楚。
最佳答案
匹配“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
关于python - 我需要确保列表中只有某些字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30993079/