《像计算机科学家一样思考》中的练习9.3

0 投票
3 回答
2697 浏览
提问于 2025-04-17 22:53

练习 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 个回答

0

好的,下面是你需要的内容:

在编程中,有时候我们需要把一些信息存储起来,以便以后使用。这个过程就像把东西放进一个盒子里,等需要的时候再拿出来。我们可以使用不同的方式来存储这些信息,比如用变量、数组或者数据库。

变量就像是一个小盒子,你可以给它一个名字,然后把你想要的信息放进去。比如说,你可以有一个叫做“年龄”的变量,里面放着你的年龄数字。

数组则是一个可以装很多小盒子的盒子。想象一下,你有一个大盒子,里面可以放很多个小盒子,每个小盒子里可以放不同的信息。比如,你可以用一个数组来存储你所有的朋友的名字。

数据库则是一个更大的存储地方,适合存放大量的信息。就像一个图书馆,里面有很多书,每本书里都有很多信息。你可以通过特定的方式来查找和管理这些信息。

总之,存储信息的方式有很多,选择合适的方法可以让你更方便地使用这些信息。

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())  
0

''' 练习 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 '''

0

试试这个:

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(整数)是不可变的,也就是说你不能直接改变它的值。

撰写回答