《像计算机科学家一样思考》中的练习9.3
练习 9.3。写一个叫做 avoids 的函数,这个函数接收一个单词和一串禁止使用的字母,如果这个单词没有使用任何禁止的字母,就返回 True。接着,修改你的程序,让用户输入一串禁止的字母,然后打印出不包含这些字母的单词数量。你能找到一组包含 5 个禁止字母的组合,使得被排除的单词数量最少吗?
def avoids(word,forb):
for letter in forb:
if letter in word:
return False
return True
我完成了第一部分:
fin=open('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 2.7\words.txt','r')
def no_contain():
forb=raw_input('enter the forbidden letters')
tot=0
ct=0
for line in fin:
word=line.strip()
for word in fin:
tot+=1
for letter in forb:
if letter in word:
ct+=1
return tot-ct
我在第二部分遇到了一些困难,这是我的尝试:
我得到了些奇怪的答案。另外,什么时候应该使用 ct=0...ct+=1
这种写法,而不是 ct=ct+1
呢?
3 个回答
好的,下面是你需要的内容:
在编程中,有时候我们需要把一些信息存储起来,以便以后使用。这个过程就像把东西放进一个盒子里,等需要的时候再拿出来。我们可以使用不同的方式来存储这些信息,比如用变量、数组或者数据库。
变量就像是一个小盒子,你可以给它一个名字,然后把你想要的信息放进去。比如说,你可以有一个叫做“年龄”的变量,里面放着你的年龄数字。
数组则是一个可以装很多小盒子的盒子。想象一下,你有一个大盒子,里面可以放很多个小盒子,每个小盒子里可以放不同的信息。比如,你可以用一个数组来存储你所有的朋友的名字。
数据库则是一个更大的存储地方,适合存放大量的信息。就像一个图书馆,里面有很多书,每本书里都有很多信息。你可以通过特定的方式来查找和管理这些信息。
总之,存储信息的方式有很多,选择合适的方法可以让你更方便地使用这些信息。
forbidden=input("Enter the forbidden characters: ")
fin=open("words.txt")
def avoids():
for letter in fin: # Searches the letter in the file
word=letter.strip()
if forbidden not in word: #If forbidden char is not in the file
print(word)
print(avoids())
''' 练习 9.3。写一个叫做 avoids 的函数,这个函数接收一个单词和一串禁止使用的字母,如果这个单词没有使用任何禁止的字母,就返回 True。
接着,修改你的程序,让用户输入一串禁止的字母,然后打印出不包含这些字母的单词数量。你能找到一组包含 5 个禁止字母的组合,使得排除的单词数量最少吗? '''
def avoids(strg, word):
for letter in strg:
if letter in word:
return False;
return True;
fin = open('words.txt')
def No_Contain(strg):
count_word_no_contain = 0;
for line in fin:
result = avoids(strg, line.strip());
if(result == True):
count_word_no_contain += 1;
print(line.strip());
return count_word_no_contain;
print(avoids("HUY STRAUSS", "LION"));
strg = "lion king";
print("The number of words doesn’t have the letters of the string", strg, "is: ", No_Contain(strg));
''' 结果: 不包含字符串“狮子王”字母的单词数量是: 9971 '''
试试这个:
def avoids(word, forb):
for letter in forb:
if letter in word:
return False
return True
def no_contain(fin):
forb = raw_input('enter the forbidden letters: ')
count = 0
for word in fin:
if avoids(word.strip(), forb):
count += 1
return count
if __name__ == '__main__':
fin = open('words.txt', 'r')
print no_contain(fin)
什么时候用 ct = ct + 1
而不是 ct += 1
呢?
其实在Python里,这两者是一样的,都是先计算出 ct + 1
的结果,然后再把这个结果赋值给 ct
。因为在Python中,int
(整数)是不可变的,也就是说你不能直接改变它的值。