On 2013-08-06 22:49, Saad Javed wrote:
> That causes:
>
> Enter string: These are my friends living in the same city as i am. I have
> known them for years. They are good people in general. They are:
> Traceback (most recent call last):
>   File "chris_tweet_len.py", line 44, in <module>
>     print("\n".join(generate_tweets(message, users)))
>   File "chris_tweet_len.py", line 31, in generate_tweets
>     while users and len(new_message) + len(add) <= MAX_LENGTH:
> UnboundLocalError: local variable 'new_message' referenced before assignment

Cannot reproduce. I'm not sure how you edited the script, but somehow you moved
new_message to where it is unbound. See attached.

> And the earlier fix now adds two users to a tweet, then one user, then two
> user, then one... :(

I don't see how that differs from your expected output...?

> I want all users added to the tweet. E.g. if 4 users can be added to the
> tweet before reaching the limit, return three tweets...first two with 4 users
> attached and the last one with three.

You hit the 140 character limit if another user is added, so it resets to the
base message and adds the next user(s) as possible.

What is your expected output for that sample input?
#!/usr/bin/env python

MAX_LENGTH = 140


class TweetTooLongError(Exception):
    """
    Raised when a user would be too long to add to the tweet, even alone.
    """
    pass


def generate_tweets(message, users):
    """
    Generate tweets based around a message, with users
    appended to each tweet.

    :param message: the base message
    :param users: a group of users to append
    :returns: tweets based around the message to the users
    """

    add = ""
    longest_in_list = " @" + max(users, key=len)

    if len(longest_in_list) + len(message) > MAX_LENGTH:
        raise TweetTooLongError(
            "At least one user would make the tweet too long."
        )

    while users:
        new_message = message
        while users and len(new_message) + len(add) <= MAX_LENGTH:
            add = " @" + users.pop(0)
            new_message += add
        yield new_message


if __name__ == "__main__":
    users = [
        "saad", "asad", "sherry", "danny", "ali", "hasan", "adil",
        "yousaf", "maria", "bilal", "owais",
    ]
    message = raw_input("Enter string: ")
    print("\n".join(generate_tweets(message, users)))

Attachment: pgpgSwyxathrA.pgp
Description: PGP signature

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to