1

如果这已在其他地方得到回答,我很抱歉。我是一个 100% 的初学者。我正在通过 codeacademy 工作,其中一个项目是 Madlib。从那以后,我把它转移到了视觉工作室,并从头开始自己做了一些。我的想法是创建一个庞大的基线 MadLib,这样我所要做的就是用适当的必要变量写出故事。当我运行这个程序时,它可以工作,但它要求每一个输入。如何让程序只询问故事所需的特定变量?在此先感谢,这是代码。

""" Newscast MadLib by Salem
"""

print ("Here comes a MadLib yall!!!")

noun1 = input("Enter a Noun: " )
noun2 = input("Enter a Noun: " )
noun3 = input("Enter a Noun: " )
noun4 = input("Enter a Noun: " )
noun5 = input("Enter a Noun: " )
adj1 = input("Enter an Adjective: ")
adj2 = input("Enter an Adjective: ")
adj3 = input("Enter an Adjective: ")
adj4 = input("Enter an Adjective: ") 
adj5 = input("Enter an Adjective: ")
verb1 = input("Enter a Verb: ")
verb2 = input("Enter a Verb: ")
verb3 = input("Enter a Verb: ")
verb4 = input("Enter a Verb: ")
verb5 = input("Enter a Verb: ")
adv1 = input("Enter a Adverb: ")
adv2 = input("Enter a Adverb: ")
adv3 = input("Enter a Adverb: ")
adv4 = input("Enter a Adverb: ")
adv5 = input("Enter a Adverb: ")
verbing1 = input("Enter a Verb ending in ing: ")
verbing2 = input("Enter a verb ending in ing: ")
verbing3 = input("Enter a verb ending in ing: ")
verbs1 = input("Enter a verb ending in S: ")
verbs2 = input("Enter a verb ending in S: ")
verbs3 = input("Enter a verb ending in S: ")
pnoun1 = input("Enter a Proper Noun: ")
pnoun2 = input("Enter a Proper Noun: ")
pnoun3 = input("Enter a Proper Noun: ")
pnoun4 = input("Enter a Proper Noun: ")
pnoun5 = input("Enter a Proper Noun: ")
plnoun1 = input("Enter a Plural Noun: ")
plnoun2 = input("Enter a Plural Noun: ") 
plnoun3 = input("Enter a Plural Noun: ")
plnoun4 = input("Enter a Plural Noun: ")
plnoun5 = input("Enter a Plural Noun: ")
body1 = input("Enter a Body Part: ")
body2 = input("Enter a Body Part: ")
body3 = input("Enter a Body Part: ")
body4 = input("Enter a Body Part: ")
body5 = input("Enter a Body Part: ")
bodypl1 = input("Enter a part of the body Plural: ")
bodypl2 = input("Enter a part of the body Plural: ")
bodypl3 = input("Enter a part of the body Plural: ")
emotion1 = input("Enter an Emotion: ")
emotion2 = input("Enter an Emotion: ")
emotion3 = input("Enter an Emotion: ")
historicm1 = input("Enter a Historic Monument: ")
historicm2 = input("Enter a Historic Monument: ")
mansname1 = input("Enter a Mans Name: ")
mansname2 = input("Enter a Mans Name: ")
womname1 = input("Enter a Womans Name: ")
womname2 = input("Enter a Womans Name: ")
occup1 = input("Enter an Occupation: ")
occup2 = input("Enter an Occupation: ")
occup3 = input("Enter an Occupation: ")
shape1 = input("Enter a Shape: ")
shape2 = input("Enter a Shape: ")
shape3 = input("Enter a Shape: ")
rest1 = input("Enter a Restaurant Name: ")
rest2 = input("Enter a Restaurant Name: ")
rest4 = input("Enter a Restaurant Name: ")
liquid1 = input("Enter a type of Liquid: ")
liquid2 = input("Enter a type of Liquid: ")
personir1 = input("Enter the name of someone in the room: ")
personir2 = input("Enter the name of someone in the room: ")
personir4 = input("Enter the name of someone in the room: ")
food1 = input("Enter a type of Food: ")
food2 = input("Enter a type of Food: ")
food3 = input("Enter a type of Food: ")
fperson1 = input("Enter the name of a famous person: ")
fperson2 = input("Enter the name of a famous person: ")
fperson3 = input("Enter the name of a famous person: ")
sword1 = input("Enter a Silly Word: ")
sword2 = input("Enter a Silly Word: ")
sword3 = input("Enter a Silly Word: ")
num1 = input("Enter a Number: ")
num2 = input("Enter a Number: ")
num3 = input("Enter a Number: ")
num4 = input("Enter a Number: ")
num5 = input("Enter a Number: ")
place1 = input("Enter a Place: ")
place2 = input("Enter a Place: ")
place3 = input("Enter a Place: ")
place4 = input("Enter a Place: ")
place5 = input("Enter a Place: ")


story = ("Putting on a newscast might look easy, but it takes a lot of %s work. Go behind the scenes, and you will see dozens of %s workers %s in every direction! Reporters run back and forth between the studio and locations all around %s to cover %s stories and interview %s . They are joined by videographers who operate handheld %s to capture all the action. The anchors are the people who %s behind the news desk and read the stories during the newsccast. They have to look %s on air, so they can often be found getting makeup applied to their %s . The director tells everyone where and when to %s . Its easy to spot a director because he wears a headset on his %s and yells things like CAMERA TWO and %s ! A newscast is live television so if you make aor an %s mistake, everyone watching at home on their %s will know!")

    story = story % (adj1, adj2, verbing1, place1, adj3, plnoun1, plnoun2, verb1, adj4, bodypl1, verb2, 
    body1, sword1, adj5, plnoun3)

    print (story)

我正在努力解决这个问题,我感谢所有帮助。这是修订版

    """ Newscast MadLib by Salem
"""

print ("Here comes a MadLib yall!!!")


noun1 = input("Enter a Noun: " )
noun2 = input("Enter a Noun: " )
noun3 = input("Enter a Noun: " )
noun4 = input("Enter a Noun: " )
noun5 = input("Enter a Noun: " )
adj1 = input("Enter an Adjective: ")
adj2 = input("Enter an Adjective: ")
adj3 = input("Enter an Adjective: ")
adj4 = input("Enter an Adjective: ") 
adj5 = input("Enter an Adjective: ")
verb1 = input("Enter a Verb: ")
verb2 = input("Enter a Verb: ")
verb3 = input("Enter a Verb: ")
verb4 = input("Enter a Verb: ")
verb5 = input("Enter a Verb: ")
adv1 = input("Enter a Adverb: ")
adv2 = input("Enter a Adverb: ")
adv3 = input("Enter a Adverb: ")
adv4 = input("Enter a Adverb: ")
adv5 = input("Enter a Adverb: ")
verbing1 = input("Enter a Verb ending in ing: ")
verbing2 = input("Enter a verb ending in ing: ")
verbing3 = input("Enter a verb ending in ing: ")
verbs1 = input("Enter a verb ending in S: ")
verbs2 = input("Enter a verb ending in S: ")
verbs3 = input("Enter a verb ending in S: ")
pnoun1 = input("Enter a Proper Noun: ")
pnoun2 = input("Enter a Proper Noun: ")
pnoun3 = input("Enter a Proper Noun: ")
pnoun4 = input("Enter a Proper Noun: ")
pnoun5 = input("Enter a Proper Noun: ")
plnoun1 = input("Enter a Plural Noun: ")
plnoun2 = input("Enter a Plural Noun: ") 
plnoun3 = input("Enter a Plural Noun: ")
plnoun4 = input("Enter a Plural Noun: ")
plnoun5 = input("Enter a Plural Noun: ")
body1 = input("Enter a Body Part: ")
body2 = input("Enter a Body Part: ")
body3 = input("Enter a Body Part: ")
body4 = input("Enter a Body Part: ")
body5 = input("Enter a Body Part: ")
bodypl1 = input("Enter a part of the body Plural: ")
bodypl2 = input("Enter a part of the body Plural: ")
bodypl3 = input("Enter a part of the body Plural: ")
emotion1 = input("Enter an Emotion: ")
emotion2 = input("Enter an Emotion: ")
emotion3 = input("Enter an Emotion: ")
historicm1 = input("Enter a Historic Monument: ")
historicm2 = input("Enter a Historic Monument: ")
mansname1 = input("Enter a Mans Name: ")
mansname2 = input("Enter a Mans Name: ")
womname1 = input("Enter a Womans Name: ")
womname2 = input("Enter a Womans Name: ")
occup1 = input("Enter an Occupation: ")
occup2 = input("Enter an Occupation: ")
occup3 = input("Enter an Occupation: ")
shape1 = input("Enter a Shape: ")
shape2 = input("Enter a Shape: ")
shape3 = input("Enter a Shape: ")
rest1 = input("Enter a Restaurant Name: ")
rest2 = input("Enter a Restaurant Name: ")
rest4 = input("Enter a Restaurant Name: ")
liquid1 = input("Enter a type of Liquid: ")
liquid2 = input("Enter a type of Liquid: ")
personir1 = input("Enter the name of someone in the room: ")
personir2 = input("Enter the name of someone in the room: ")
personir4 = input("Enter the name of someone in the room: ")
food1 = input("Enter a type of Food: ")
food2 = input("Enter a type of Food: ")
food3 = input("Enter a type of Food: ")
fperson1 = input("Enter the name of a famous person: ")
fperson2 = input("Enter the name of a famous person: ")
fperson3 = input("Enter the name of a famous person: ")
sword1 = input("Enter a Silly Word: ")
sword2 = input("Enter a Silly Word: ")
sword3 = input("Enter a Silly Word: ")
num1 = input("Enter a Number: ")
num2 = input("Enter a Number: ")
num3 = input("Enter a Number: ")
num4 = input("Enter a Number: ")
num5 = input("Enter a Number: ")
place1 = input("Enter a Place: ")
place2 = input("Enter a Place: ")
place3 = input("Enter a Place: ")
place4 = input("Enter a Place: ")
place5 = input("Enter a Place: ")


def entera(adj1, adj2, verbing1, place1, adj3, plnoun1, plnoun2, verb1, adj4, bodypl1, verb2, body1, sword1, adj5, plnoun3):
    input("Enter a {}: ".format(adj1))
    input("Enter a {}: ".format(adj2))
    input("Enter a {}: ".format(verbing1))
    input("Enter a {}: ".format(place1))
    input("Enter a {}: ".format(adj3))
    input("Enter a {}: ".format(plnoun1))
    input("Enter a {}: ".format(plnoun2))
    input("Enter a {}: ".format(verb1))
    input("Enter a {}: ".format(adj4))
    input("Enter a {}: ".format(bodypl1))
    input("Enter a {}: ".format(verb2))
    input("Enter a {}: ".format(body1))
    input("Enter a {}: ".format(sword1))
    input("Enter a {}: ".format(adj5))
    input("Enter a {}: ".format(plnoun3))
    return (adj1, adj2, verbing1, place1, adj3, plnoun1, plnoun2, verb1, adj4, bodypl1, verb2, body1, sword1, adj5, plnoun3)



story = ("Putting on a newscast might look easy, but it takes a lot of {} work. Go behind the scenes, and you will see dozens of {} workers {} in every direction! Reporters run back and forth between the studio and locations all around {} to cover {} stories and interview {} . They are joined by videographers who operate handheld {} to capture all the action. The anchors are the people who {} behind the news desk and read the stories during the newsccast. They have to look {} on air, so they can often be found getting makeup applied to their {} . The director tells everyone where and when to {} . Its easy to spot a director because he wears a headset on his {} and yells things like CAMERA TWO and {} ! A newscast is live television so if you make aor an {} mistake, everyone watching at home on their {} will know!")

story = story.format(entera("adj1", "adj2", "verbing1", "place1", "adj3", "plnoun1", "plnoun2", "verb1", "adj4", "bodypl1", "verb2", "body1", "sword1", "adj5", "plnoun3"))

print (story)

这是它抛出的错误

Exception has occurred: IndexError
Replacement index 1 out of range for positional args tuple
  File "C:\Users\hgsal\Documents\python\ML Newscast", line 117, in <module>
    story = story.format(entera("adj1", "adj2", "verbing1", "place1", "adj3", "plnoun1", "plnoun2", "verb1", "adj4", "bodypl1", "verb2", "body1", "sword1", "adj5", "plnoun3"))
4

3 回答 3

0

在您的评论和我的朋友 Josh 的帮助下,我设置了一个运行良好的脚本。这是最终结果。我道歉,有亵渎。

""" Newscast MadLib by Salem
"""

print ("Here comes a fucking MadLib yall!!!")


def entera(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o):
    p = input("Enter a fucking {}: ".format(a))
    q = input("Enter a fucking {}: ".format(b))
    r = input("Enter a fucking {}: ".format(c))
    s = input("Enter a fucking {}: ".format(d))
    t = input("Enter a fucking {}: ".format(e))
    u = input("Enter a fucking {}: ".format(f))
    v = input("Enter a fucking {}: ".format(g))
    w = input("Enter a fucking {}: ".format(h))
    x = input("Enter a fucking {}: ".format(i))
    y = input("Enter a fucking {}: ".format(j))
    z = input("Enter a fucking {}: ".format(k))
    ab = input("Enter a fucking {}: ".format(l))
    ac = input("Enter a fucking {}: ".format(m))
    ad = input("Enter a fucking {}: ".format(n))
    ae = input("Enter a fucking {}: ".format(o))
    return (p, q, r, s, t, u, v, w, x, y, z, ab, ac, ad, ae)



story = ("Putting on a newscast might look easy, but it takes a lot of {} work. Go behind the scenes, and you will see dozens of {} workers {} in every direction! Reporters run back and forth between the studio and locations all around {} to cover {} stories and interview {} . They are joined by videographers who operate handheld {} to capture all the action. The anchors are the people who {} behind the news desk and read the stories during the newsccast. They have to look {} on air, so they can often be found getting makeup applied to their {} . The director tells everyone where and when to {} . Its easy to spot a director because he wears a headset on his {} and yells things like CAMERA TWO and {} ! A newscast is live television so if you make a/an {} mistake, everyone watching at home on their {} will know!")

story = story.format(*entera("Adjective", "Adjective", "Verb ending in ING", "Place", "Adjective", "Plural Noun", "Plural Noun", "Verb", "Adjective", "Body Part Plural", "Verb", "Body part", "Silly Word", "Adjective", "Plural Noun"))

print (story)
于 2019-12-16T01:13:58.100 回答
0

您需要将输入推迟到字符串格式,而不是提前收集所有变量

def entera(desc):
    return input("Enter a {}: ".format(desc))

story = "Putting on a newscast might look easy, but it takes a lot of {} work"

story = story.format(entera("Adjective"))
于 2019-12-15T19:20:59.630 回答
0

为了只询问故事所需的变量,我们需要以某种方式指出故事使用的每个变量的名称以及填写该变量的值时要问什么问题。一种方法是对变量进行编码,并且要提出的问题是故事字符串的一部分,并使用它来驱动用户问题。这是一种方法:

"""
MadLibs
the madlib story will have fixed text and fill-in-the-blank text that we     
will encoded as placeholders in the form:  {variable_name:question_to_ask}

we use a regular expression of scan the story for all the placeholders and 
- prompt the user for input with the question_to_ask string
- store their response in a dict with the key being the variable_name
  and the value being the user response for that variable

the resulting dictionary will have all the information we need to fill in the blanks

next we modify the original story with another regular expression to remove the
:question_to_ask portion of each placeholder.  

that leaves the story string in the perfect form to call story.format(**values)

the **values notation passes the values dict as a set of keyword arguments 
that .format() uses to fill in the placeholders with the user responses


"""


import re    # bring in regular expression module

story = """
Hi my name is {name1:Name of person in room} and I live in {location:A Location}
where I like to eat {food1:Type Of Food} and watch {tvshow1:A Television Show}
when I am feeling {emotion1:An Emotion}"""

placeholder_pattern = re.compile(r"(?s)\{(.+?):(.+?)\}")
question_pattern = re.compile(r"(?s):[^}]+?}")

values = {}    # start with empty dictionary

placeholders = placeholder_pattern.findall(story)  # find all placeholders
for variable, question in placeholders:            # iterate over each placeholder
    value = input(question + "? ")
    values[variable] = value                       # add variable:value to dict

print("\nThe values dictionary is:", value, "\n")  # debug
story = question_pattern.sub("}", story)           # remove the question from each placeholder
print(story.format(**values))                      # use .format() to fill in placeholders

运行程序:

runfile('C:/demo1.py', wdir='C:')

房间里的人的名字?弗雷德

一个位置?图书馆

食物类型?热狗

电视节目?狂人

情绪?伤心

值字典是:{'name1': 'Fred', 'location': 'the library', 'food1': 'hotdogs', 'tvshow1': 'Mad Men', 'emotion1': 'sad'}


嗨,我叫 Fred,我住在图书馆
我喜欢吃热狗和看广告狂人的地方
当我感到难过时
于 2019-12-15T20:57:54.390 回答