文字游戏问题



我创建了一个函数,该函数接受一个单词和一系列"禁止"字母,如果该单词不使用任何字母,则返回True。

def avoids(word,forbidden):
    for letter in word:
        if letter in forbidden:
            return False
    else:
        return True

我想修改它,这样就不会使用"禁止"作为避免使用的字母,而是会提示用户放置几个字母,并打印不包含任何字母的字数。我还有一个.txt文档,其中包含这些单词,让它变得有趣。

这就是我所想到的,是错误的。如果可能的话,我希望得到一些帮助和教育,因为我的"在线"老师从来没有帮助过我。请帮助:(

def word_no_forbidden():
    forbidden = input('pick 5 letters')
    fin = open('words1.txt')
    no_forbidden_word = 0
    for line in fin:
        word = line.strip()
        for letter in word:
            if forbidden in word:
                continue
            print word

这是我遇到的错误,我理解它,但我不知道该如何处理。。。

  Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
     word_no_forbidden()
  File "C:/Python27/test.py", line 9, in word_no_forbidden
     if forbidden in word:
  TypeError: 'in <string>' requires string as left operand, not tuple
def word_no_forbidden():
    forbidden = raw_input('pick 5 letters')
    fin = open('words1.txt')
    no_forbidden_word = 0
    for line in fin:
        word = line.strip()
        for letter in list(word):
            if letter in forbidden:
                break
        else:
            print word

注意:

1> 正如winston所说,使用raw_input

2> 如果您想遍历字符串,请使用list(your_string)获取字符列表

3> 这里的else只在我们的for letter in list(word)循环完成时执行,而不会中断(换句话说,没有一个字母被禁止(

我的猜测。。。

你是python 2.x

当你运行你键入的程序时:

'a','b','c','d'

在python2.x上,您希望使用raw_input而不是input。这会给出一个你键入的字符串。事实上,python会试图将你正确的内容解释为python表达式,这是危险的,通常是个坏主意。

第二个问题是,您颠倒了第一个示例letter in forbidden的代码行,使其变成forbidden in word

要从用户读取字符串,应该使用raw_input,而不是inputinput试图将用户键入的字符串实际计算为Python代码,这可能会导致您得到意想不到的数据类型(或其他更糟糕的事情(。

相反,raw_input总是返回一个字符串。

(注意:这只适用于Python2.x。从Python3开始,raw_input被重命名为input,并且没有任何函数可以做input过去做的事情。(

在代码的这一部分

for letter in word:
  if forbidden in word:

你应该做

for letter in forbidden:
  if letter in word:

您要做的是检查用户输入的字母中的每个字母,如果它在从文件中读取的单词中,请跳过该单词并转到下一个。有更多蟒蛇式的方法可以做到这一点,但我认为这是清晰易懂的。

最新更新