Вызов функции непрерывно в цикле и печать разных результатов - PullRequest
0 голосов
/ 28 мая 2018

Я создаю небольшую программу, которая извлекает цитаты определенного исполнителя, а затем публикует случайную строку из их случайной песни в Twitter.Мне до сих пор удавалось вытащить текст, получить случайную строку из случайной песни, но она всегда публиковала одинаковую лирику.Я понимаю, почему это происходит, потому что это не только циклически повторяет один и тот же вывод ранее.Не могли бы вы порекомендовать, как я могу получить цикл для создания новой песни, а затем новую случайную лирику каждый раз, когда она повторяется?Я пытался вызвать функцию 'lyricsimport' в цикле, но безрезультатно

Я новичок в Python. Пожалуйста, при необходимости сообщайте о любых улучшениях - заранее спасибо

Вот мой кодпока ...

# Import Twitter credentials from credentials.py
import random
from tswift import Artist
import tweepy
from time import sleep
from credentials import *

# Access and authorize our Twitter credentials from credentials.py
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

#get lyrics from tswift and save to text file
def lyricsimport():
    tswift = Artist('Frank Ocean')
    song = random.choice(tswift.songs)
    savefile = open('ocean.txt', 'w')
    savefile.write(song.format())
    savefile.close()


# Open text file ocean.txt (or your chosen file) for reading and select random lyric
with open('ocean.txt') as f:
    my_file = f.readlines()
    file_lines = random.choice(my_file)

# Tweet a line every 10 seconds (will change post-testing)
def tweet():
    # Create a for loop to iterate over file_lines
    for line in file_lines:
        try:
            print(file_lines)
            #if statement to ensure that blank lines are skipped
            if line != '\n':
                api.update_status(file_lines)
                sleep(10)
            else:
                pass
        except tweepy.TweepError as e:
            print(e.reason)
            sleep(2)
tweet()

1 Ответ

0 голосов
/ 28 мая 2018

my_file это все строки в файле, верно?и поэтому file_lines - это random.choice из них, а random.choice возвращает только одно значение ... Это должно быть видно по print(file_lines) - должна быть только одна строка.

Как насчет васзамените

    api.update_status(file_lines)

в вашем цикле на

    api.update_status(random.choice(my_file))

?

Открытие файла должно выглядеть так:

with open('ocean.txt') as f:
    my_file = f.readlines()

И давайте посмотримесли это поможет:)

...