Reputation: 21
I'm creating a madlibs game that takes in users inputs and returns the story. I use %s to store the inputs. When I got this error, I changed the %s to %%s per previous posts but error remains
print "What is your name?"
a = raw_input()
print "Hello", a, "Lets see if you like you can do MadLibs!"
print "HEAD KNIGHT OF NI: %s \n KNIGHTS OF NI : %s \n ARTHUR : Who are you ? \n HEAD KNIGHT : We are the %s who say. %s \n RANDOM : %s \n ARTHUR : No ! Not the %s who say %s \n Head Knight: The Same! \n Bedevere: Who are they? \n Head Knight: We are the keepers of the %s words : %%s %%s and %%s \n Random: %%s \n Arthur: Those who %s them seldom live to tell the tale. \n Head Knight: The %%s who say %%s demand a sacrifice \n Arthur: %s of %s we are but %s travellers who seek the % who lives beyong these woods \n Head Knight: %s \n Knights of Ni: %s \n Arthur: Ow Agh \n Head Knight: We shall say %s again to you if you don't appease us \n Arthur: Well what is it you want? \n Head Knight: We want a %%s \n Arthur: A what? \n Knights of Ni: %%s \n Arthur and Party: OWWW, AHHH \n Arthur: Please, No More! We will find you a %%s \n Head Knight: You must return here with a %%s or else, you will never pass through these woods alive. \n Arthur: O %%s of %%s you are %%s and %%s and we will return with a %%s. \n Head Knight: One that looks %%s \n Arthur: Of Course \n Head Knight: and not too %%s \n Arthur: Yes" % (raw_input("Nonsense Word"), raw_input("Nonsense Word "), raw_input("Occupation"),raw_input("Nonsense Word"),
raw_input("Nonsense Word"), raw_input("Occupation"), raw_input("Nonsense Word"), raw_input("Adjective"), raw_input("Nonsense Word"),
Error is ValueError: unsupported format character 'w' (0x77) at index 466
Upvotes: 2
Views: 3090
Reputation: 313
I don't think you actually want any of those %%s strings in there. And, it makes more sense if the words like "ni" can stay consistent throughout. So, I rewrote it with keyed placeholders:
print "What is your name?"
a = raw_input()
print "Hello", a, "Let's see if you can do MadLibs!"
categories = { 'ni':'Nonsense word','knights':'Occupation',
'sacred':'Adjective','peng':'Nonsense word',
'nee-wom':'Nonsense word','hear':'Verb',
'simple':'Adjective','enchanter':'Occupation',
'shrubbery':'Noun','just':'Adjective',
'fair':'Adjective','nice':'Adjective',
'expensive':'Adjective'}
input_words = {}
for key,description in categories.items():
input_words[key] = raw_input('Enter a(n) '+description+': ')
print '''HEAD KNIGHT OF NI: %(ni)s
KNIGHTS OF NI : %(ni)s
ARTHUR : Who are you ?
HEAD KNIGHT : We are the %(knights)s who say. %(ni)s
RANDOM : %(ni)s
ARTHUR : No ! Not the %(knights)s who say %(ni)s
Head Knight: The Same!
Bedevere: Who are they?
Head Knight: We are the keepers of the %(sacred)s words : %(ni)s %(peng)s and %(nee-wom)s
Random: %(nee-wom)s
Arthur: Those who %(hear)s them seldom live to tell the tale.
Head Knight: The %(knights)s who say %(ni)s demand a sacrifice
Arthur: %(knights)s of %(ni)s we are but %(simple)s travellers who seek the %(enchanter)s who lives beyond these woods
Head Knight: %(ni)s
Knights of Ni: %(ni)s
Arthur: Ow Agh
Head Knight: We shall say %(ni)s again to you if you don't appease us
Arthur: Well what is it you want?
Head Knight: We want a %(shrubbery)s
Arthur: A what?
Knights of Ni: %(ni)s
Arthur and Party: OWWW, AHHH
Arthur: Please, No More! We will find you a %(shrubbery)s
Head Knight: You must return here with a %(shrubbery)s or else, you will never pass through these woods alive.
Arthur: O %(knights)s of %(ni)s you are %(just)s and %(fair)s and we will return with a %(shrubbery)s.
Head Knight: One that looks %(nice)s
Arthur: Of Course
Head Knight: and not too %(expensive)s
Arthur: Yes''' % input_words
Upvotes: 1
Reputation: 1122292
You have a literal %
character in your string; double that to prevent Python from trying to interpret it as a format string:
"... very long string ... who seek the %% who lives beyong ..."
or perhaps you missed out on a s
there instead:
"... very long string ... who seek the %s who lives beyong ..."
You really want to look into tripple-quoting your string though. Python let's you use """
as string delimiters, and in such a literal string newlines are preserved:
MADLIBS = """\
HEAD KNIGHT OF NI: %s
KNIGHTS OF NI : %s
ARTHUR : Who are you ?
HEAD KNIGHT : We are the %s who say. %s
RANDOM : %s
ARTHUR : No ! Not the %s who say %s
Head Knight: The Same!
Bedevere: Who are they?
Head Knight: We are the keepers of the %s words : %%s %%s and %%s
Random: %%s
Arthur: Those who %s them seldom live to tell the tale.
Head Knight: The %%s who say %%s demand a sacrifice
Arthur: %s of %s we are but %s travellers who seek the %% who lives beyong these woods
Head Knight: %s
Knights of Ni: %s
Arthur: Ow Agh
Head Knight: We shall say %s again to you if you don't appease us
Arthur: Well what is it you want?
Head Knight: We want a %%s
Arthur: A what?
Knights of Ni: %%s
Arthur and Party: OWWW, AHHH
Arthur: Please, No More! We will find you a %%s
Head Knight: You must return here with a %%s or else, you will never pass through these woods alive.
Arthur: O %%s of %%s you are %%s and %%s and we will return with a %%s.
Head Knight: One that looks %%s
Arthur: Of Course
Head Knight: and not too %%s
Arthur: Yes
"""
That way you can more clearly that you have several doubled %
percent marks in your string that probably need fixing.
Upvotes: 5