我正在写一个有两种失败条件的游戏:
Wordlist是单词列表,frag是前一个片段,a是玩家输入的新字母.所以frag可能看起来像'app'而且可能是'l',意思是形成苹果这个词.
def getLoser(frag, a, wordlist):
word = frag + a
if len(word) > 3:
if word in wordlist:
print 'word in wordlist'
return True
else:
for words in wordlist:
if words[:len(word)] == word:
print words,':', word
print 'valid word left'
return False
else:
print words[:len(word)]
print words,':', word
print 'false found'
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当我输入第四个字母时,它会自动转到for循环中的else,即使我在for循环中的if语句函数在交互式跟踪中的虚拟数据上单独测试时也能正常工作.
这是frag alg的输出和word列表中带有单词algebra的字母e.
Ë
AA
aa:alge
虚假发现
真正
有任何想法吗?
你太复杂了.如果新片段少于3个字母,则自动为OK.如果没有,它必须是某个单词的开头而不是单词本身就可以.
>>> words = { "apple" }
>>> def isOK( fragment, letter ):
... word = fragment + letter
... if len( word ) <= 3: return True
... return word not in words and any( w.startswith( word ) for w in words )
...
>>> isOK( "a", "p" )
True
>>> isOK( "ap", "p" )
True
>>> isOK( "app", "l" )
True
>>> isOK( "appl", "l" )
False
>>> isOK( "appl", "e" )
False
Run Code Online (Sandbox Code Playgroud)
(可以将上面的两个测试组合成一个条件语句:
return len( word ) <= 3 or word not in words and any( w.startswith( word ) for w in words )
Run Code Online (Sandbox Code Playgroud)
但我觉得这太过模糊了.)
我无法遵循上面代码的逻辑; 它写得相当容易混淆.(words例如,为什么是字符串?)在尝试实现之前尝试用伪代码编写游戏逻辑 - 这可以帮助你理清思路.
这是一个更清晰的版本:
def isOK( word ):
condition_one = len( word ) > 3 and word in words
condition_two = not any( w.startswith( word ) for word in words )
return not( condition_one or condition_two )
Run Code Online (Sandbox Code Playgroud)