我创建了一个函数,该函数接受一个单词和一系列"禁止"字母,如果该单词不使用任何字母,则返回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
,而不是input
。input
试图将用户键入的字符串实际计算为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:
您要做的是检查用户输入的字母中的每个字母,如果它在从文件中读取的单词中,请跳过该单词并转到下一个。有更多蟒蛇式的方法可以做到这一点,但我认为这是清晰易懂的。