无限循环,只有在第一部分为真时才执行脚本的一部分

时间:2014-12-01 20:17:29

标签: python if-statement while-loop

我创建了一个检查朋友请求的无限循环,如果有的话,它会接受它们,所以脚本会一直持续。

请参阅此处的代码:

while True:

    snaps = s.get_snaps()

    for sender in snaps:
        if sender['media_type'] == 3:
            s.add_friend(sender[u'sender'])


    friends = s.get_friends()

    names = []
    for friend in friends:
        if friend['type'] == 0:
            names.append(friend[u'name'])

    print "Amount of confirmed friends:",
    print len(names),
    print "/ 6000"

到目前为止,该脚本可以正常工作,但并不是我想要的方式。

它一遍又一遍地打印X / 6000,这就是困扰我的事情。我只希望脚本执行" print"部分,当它实际接受/多个朋友请求时

所以这一部分:

print "Amount of confirmed friends:",
print len(names),
print "/ 6000"

只有当某人真正被接受为朋友时才能打印,从而更新已确认朋友的数量。

我在这里感情很复杂,我在使用if语句等方面从未如此详细。

我考虑过的情景是:

在if语句中添加某人,如果结果是(好?),则继续执行脚本的其余部分。

或者在打印之前在底部放置一个if语句,说如果有人实际添加了它就打印出来,否则它会重新开始重复。

这里需要注意的一点是,对于服务器的请求/活动越少越好。因此,如果我可以在脚本开头限制它,那么首选。

虽然我不知道该怎么做。

有人可以解释一下我如何检查是否有某人(或多人)找到了media_type 3,如果有,则继续执行该脚本。如果没有,它会睡几秒钟然后再回去尝试。

我觉得这是一个微妙的主题,我担心我会弄乱我的代码,最终不知道我到底在做什么,并对此感到沮丧。在询问我已经联系Google和TutorialsPoint之前,我仍然无法应用任何我读过的东西,因为我不知道如何。

3 个答案:

答案 0 :(得分:2)

为了最大程度地减少对Snapchat的调用次数,我会将s.get_friends()调用因子分解出来,以便它只在脚本运行时执行:

import time

total_friends = len([friend for friend in s.get_friends() 
                     if friend['type'] == 0])

SLEEP_TIME = 60

while True:
    new_friends = 0
    snaps = s.get_snaps()
    for sender in snaps:
        if sender['media_type'] == 3:
            s.add_friend(sender[u'sender'])
            new_friends += 1

    total_friends += new_friends

    if new_friends:
        print 'Amount of confirmed friends:'
        print total_friends, '/ 6000'
    time.sleep(60)

这将获得您在进入循环之前拥有的当前朋友数量。然后它得到(可能是新的?)快照,同时添加适当的media_type和增量new_friends。如果new_friends不为0,则会打印新的朋友总数。

答案 1 :(得分:1)

我相信这个解决方案会对你有所帮助。您会在第一次收到朋友时跟踪,以避免在第一次运行时发送消息。然后,您只需将previous_friends与当前朋友进行比较即可显示更改。

# Used to mark the initial receiving of the friends
friends_received = False
# Will store the names of all friends from the last loop
previous_friends = []

while True:
    new_friend = False
    snaps = s.get_snaps()

    for sender in snaps:
        if sender['media_type'] == 3:
            s.add_friend(sender[u'sender'])


    friends = s.get_friends()

    names = []
    for friend in friends:
        if friend['type'] == 0:
            names.append(friend[u'name'])

    # Checking if new friends have been received
    if friends_received and len(friends) > len(previous_friends):
        # New friends are available
        new_friend = True

    if new_friend:
        print "Amount of confirmed friends:",
        print len(names),
        print "/ 6000"

    # Keeping a record of the friends from the last loop
    if len(previous_friends) == 0:
        friends_received = True
    previous_friends = friends

答案 2 :(得分:0)

如何做到这一点:

friendAdded = false
snaps = s.get_snaps()

for sender in snaps:
    if sender['media_type'] == 3:
        s.add_friend(sender[u'sender'])


friends = s.get_friends()

names = [];
for friend in friends:
    if friend['type'] == 1:
        names.append(friend[u'name'])
        friendAdded = true


if friendAdded == true:
    print "Amount of confirmed friends:",
    print len(names),
    print "/ 6000"
    friendAdded = false

现在它只会在您添加新朋友时打印。