Python逻辑帮助:

2024-06-06 19:04:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个有两个输球条件的游戏:

  1. 形成一个超过3个字母的单词。蜜蜂没事,啤酒不行。在
  2. 形成一个不能变成更长单词的单词。斑马没事,斑马不行。在

Wordlist是一个单词列表,frag是前一个片段,a是玩家输入的新字母。所以frag可能看起来像是“app”和“l”,它的意思是形成一个单词apple。在

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

由于某些原因,当我输入第4个字母时,它会自动转到For循环中的else,即使当我在交互跟踪中单独对虚拟数据进行测试时,For循环中if语句的功能正常工作。在

这是frag alg和字母e的输出,单词表中有单词代数。在

e

aa

aa : alge

false found

True

有什么想法吗?在


Tags: infalsetruelenreturnif字母单词
1条回答
网友
1楼 · 发布于 2024-06-06 19:04:29

你太复杂了。如果新片段少于3个字母,则自动确定。如果不是,它一定是某个单词的开始,而不是一个单词本身。在

>>> 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

(可以将上述两个测试合并为一个条件语句:

^{pr2}$

但我认为这太模糊了。)

我不能理解你上面代码的逻辑,它写得相当混乱。(例如,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 )

相关问题 更多 >