在新行上加入字符串错误Python

时间:2014-11-30 20:12:26

标签: python string list

几乎就是这个!

获取用户输入并删除任何尾随标点符号和非散列字词以发现推文中的趋势。别问!

tweet = input('Tweet: ')
tweets = ''

while tweet != '':
  tweets += tweet
  tweet = input('Tweet: ')

print (tweets) # only using this to spot where things are going wrong!

listed_tweets = tweets.lower().rstrip('\'\"-,.:;!?').split(' ')
hashed = []

for entry in listed_tweets:
  if entry[0] == '#':
    hashed.append(entry) 

from collections import Counter
trend = Counter(hashed)

for item in trend:
  print (item, trend[item])

除了我得到的这个事实之外还有效:

Tweet: #Python is #AWESOME!
Tweet: This is #So_much_fun #awesome
Tweet: 
#Python is #AWESOME!This is #So_much_fun #awesome
#awesome!this 1
#python 1
#so_much_fun 1
#awesome 1

而不是:

#so_much_fun 1 
#awesome 2
#python 1

所以我没有在每行输入的末尾获得一个空格,而是它正在抛出我的列表!

这可能很简单,但经过10个小时的自我教学后,我的思绪一直在上升!

1 个答案:

答案 0 :(得分:0)

问题在于这一行:

  tweets += tweet

您正在接收每条推文并将其附加到上一条推文。因此,上一条推文的最后一个单词与当前推文的第一个单词联系在一起。

有多种方法可以解决这个问题。一种方法是一次处理一个推文。从您的主题标签的空数组开始,然后在循环中执行以下操作:

  1. 从用户那里读取一行
  2. 如果该行为空,则跳出循环
  3. 否则,提取主题标签并将其添加到数组
  4. 返回第1步
  5. 以下代码包含了这个想法并进行了其他一些改进。注意如何编写交互式循环,以便代码中只有一个位置提示用户输入。

    hashtags = []
    
    while True:                      # Read and clean each line of input.
      tweet = input('Tweet: ').lower().rstrip('\'\"-,.:;!?')
      if tweet == '':                # Check for empty input.
        break 
      print('cleaned tweet: '+tweet) # Review the cleaned tweet.
      for word in tweet.split():     # Extract hashtags.
        if word[0] == '#':
          hashtags.append(word)
    
    from collections import Counter
    trend = Counter(hashtags)
    
    for item in trend:
      print (item, trend[item])
    

    如果您继续处理推文处理,我怀疑您会发现您的推文清理过程不充分。例如,如果在推文中间有标点符号怎么办?您可能希望迟早开始研究正则表达式。