2017-04-20 9 views
0
for tweets in ExistingTweets: 
    ExistString = tweets['text'] 
    ExistString = ExistString[:15] 
    if randomQuote[:16] == ExistString: 
     randomQuote = AllQuotes[randint(0,5)].getText() 
     randomQuote = randomQuote[printUntil:] 

트윗 짹짹에 대한 인용문이 이미 트윗되어 있는지 확인하려고합니다. ExistString과 randomQuote는 한 번 일치합니다 (나는 randomQuote에서 16을 호출하고 있지만 어쨌든 15와 : 16은 같은 출력과 같습니다). 그러나 randomQuote는 변경되지 않습니다!트위 잇 체크가 이미 존재하는 경우 twython

도움을 주시면 감사하겠습니다. 감사합니다.

+0

파이썬에서 목록의 끝을지나 슬라이스를 시도하면 목록의 끝까지 슬라이스가 반환됩니다. 그래서 아마': 15'와': 16'을 사용하여 동일한 출력을 얻게 될 것입니다. –

+1

@CarlesMitjans randomQuote가 시작시 한 캐릭터가 더 많아서 같은 출력을 얻고있었습니다 ... 바보 같은 실수! –

답변

0

코드 구조가 약간 혼란 스럽습니다 (올바르게 들여 쓰기를하지 못했을 것 같습니까?) printUntil과 같은 것들이 의도 된 것이 확실하지 않지만 무엇이 좋을지 제안합니다. 다음과 같이하십시오 :

randomQuote = AllQuotes[randint(0,5)].getText() # Pick your first random quote 
while True: 
    already_used = False 
    for tweets in ExistingTweets: 
     if randomQuote[:15] == tweets['text'][:15]: 
      already_used = True 
      break 
    if already_used: 
     randomQuote = AllQuotes[randint(0,5)].getText() # Pick another and try again. 
    else: 
     break 

print(randomQuote) 

이미 트윗했던 인용문의 큰 목록이있는 경우 상당히 쉬울 것입니다. 그러면 if randomQuote in ExistingTweets을 테스트로 사용할 수 있으며 루프는 for 일 필요가 없습니다.

또 다른 주석가가 말한 것처럼 다른 값 ([:15][:16])을 사용하면 안됩니다. 특정 사례 (예 : 문자열이 17 자보다 짧은 경우)에서 동일한 결과가 나타날 수 있지만 다른 경우에는.

+0

빠른 답변을 보내 주셔서 감사합니다. 이것은 이미 더 의미가 있습니다! 그러나 ... 그것은 여전히 ​​작동하지 않습니다! for 문 다음에 두 개의 print 문을 써서 짹짹과 무작위 따옴표를 모두 인쇄했습니다. 그것은 트윗의 첫 15 글자를 출력하지만, 랜덤 쿼트의 처음 14 글자를 출력합니다! 다른 숫자도 똑같은 것을 사용했습니다. Randomquote는 항상 짧은 한 문자로 보입니다. 어떤 아이디어? –

+0

글쎄, 알아 냈어, printUntil은 문자열에 공백을 추가했다. 나는 짧은 글자 하나를 잘라 냈다! 초보자 실수 hahaha. 답변 해 주셔서 감사합니다. 감사드립니다. –