完成此任务需要哪些代码?

时间:2017-03-20 11:56:16

标签: python python-3.x

我是python的新手,我试图通过完成任务来教会自己如何使用它。我正在尝试完成下面的任务,并在其下面编写代码。但是,我的代码不会忽略输入句子的标点符号,也不会将句子的单词存储在列表中。我需要添加什么? (请记住,我对python来说是全新的,所以我知之甚少)

  

开发一个程序,识别句子中的单个单词,将它们存储在一个列表中,并将原始句子中的每个单词替换为该单词在列表中的位置。

     

例如,句子:

     
    

不要问你的国家能做什么,因为你问你可以为你做什么     COUNTRY

  
     

包含单词ASK,NOT,WHAT,YOUR,COUNTRY,CAN,DO,FOR,YOU

     

可以使用序列

从此列表中的这些单词的位置重新创建句子      
    

1,2,3,4,5,6,7,8,9,1,3,9,6,7,8,4,5

  
     

将单词列表和这些单词在句子中的位置保存为单独的文件或单个文件   文件。

     

分析该系统的要求,并设计,开发,测试和评估程序:

     

•识别句子中的单个单词并将其存储在列表中

     

•为该列表中的单词创建一个位置列表

     

•将这些列表保存为单个文件或单独文件。

restart = 'y'
while (True):
    sentence = input("What is your sentence?: ")
    sentence_split = sentence.split()
    sentence2 = [0]
    print(sentence)
    for count, i in enumerate(sentence_split):
        if sentence_split.count(i) < 2:
            sentence2.append(max(sentence2) + 1)
        else:
            sentence2.append(sentence_split.index(i) +1)
    sentence2.remove(0)
    print(sentence2)
    restart = input("would you like restart the programme y/n?").lower()
    if (restart == "n"):
            print ("programme terminated")
            break
    elif (restart == "y"):
        pass
    else:
        print ("Please enter y or n")

2 个答案:

答案 0 :(得分:0)

由于这是一个问题,所以这里有几个指针(我不会帮助你处理文件I / O,因为这不是问题的一部分)。

首先,要从句子中过滤标点符号,请参阅this问题。

其次,为了获得唯一单词及其第一个位置的有序列表,您可以使用有序字典。示范:

>>> from collections import OrderedDict
>>> s = 'ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY'
>>> words = s.split()
>>> word2pos = OrderedDict()
>>> 
>>> for index, word in enumerate(words, 1):
...     if word not in word2pos:
...         word2pos[word] = index
... 
>>> word2pos.keys()
['ASK', 'NOT', 'WHAT', 'YOUR', 'COUNTRY', 'CAN', 'DO', 'FOR', 'YOU']

如果您不被允许使用有序词典,您将需要更加努力地工作并阅读this问题的答案。

最后,一旦你将单词映射到第一个位置,无论你如何获得它,创建位置列表都是直截了当的:

>>> [word2pos[word] for word in words]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 9, 6, 7, 8, 4, 5]

答案 1 :(得分:0)

您之前必须考虑一些事项,例如您已经注意到的标点符号。现在,考虑到你正在尝试自学,我会尝试只给你一些你可以看到的提示和信息。

[strip] command可以允许您删除句子中的某些字母/数字,例如,.

split command会根据您的拆分命令将字符串拆分为较小的字符串列表。但是,要查看原始字符串中的位置,您可以查看列表的索引。例如,在您的sentence列表中,您可以通过访问sentence[0]来获取第一个单词,等等。

然而,考虑到可以重复单词这将会有点棘手,所以你可能会看到一个名为dictionary的东西,这对于你想做的事情是完美的,因为它允许你做如下的事情:

words = {'Word': 'Ask', 'Position': [1,10]}

现在如果你坚持使用简单的方法(使用列表),你可以用索引迭代列表并单独处理每个单词以将它们写入文件,例如沿着(警告,这是伪)码)。

for index, word in sentence:
    do things with word
    write things to a file

要获得更多真实的&#39;起点检查下面的扰流板

  

for index, word in enumerate(sentence): filename = str(word)+".txt" with open(filename,'w') as fw: fw.write("Word: "+str(word)+"\tPlace: "+str(index))

我希望这能帮助您实现目标!