Need help Creating new objects in inform7 - object

Very new to Inform7 and it's style. I have looked through the provided docs and some internet browsing has yielded nothing for me... this is a simplistic version of what i'm looking for. I want to write something like this:
breakroom is a room. "A run of the mill breakroom."
soda pop is a kind of thing. "A refreshing soda pop."
soda machine is in the breakroom. dispense button is on the soda machine.
instead of pushing dispense button:
say "A soda can dispenses".
create a soda pop (called pop) in the breakroom.
"create a soda pop (called pop) in the breakroom." is not a valid command obviously, but I hope it conveys what I want to do. I don't know how to instantiate objects at runtime. Can this be done reasonably? Any help would be appreciated. I am aware that there's not a big following here for Inform but I figure i'd give it a shot.

Inform doesn't handle dynamic objects very well, but they're often not the best approach anyway. Section 10.3. Dispensers and Supplies of Small Objects in the manual may be helpful.
I think the best model for this is a physical one: create a limited supply of cans in the machine. For example:
Breakroom is a room. "A run of the mill breakroom."
A soda pop is a kind of thing. The description is "A refreshing soda pop."
The soda machine is in the breakroom. It is fixed in place and transparent.
The description is "Just an average soda machine, with a large dispense
button."
There are three soda pops in the soda machine.
The dispense button is a part of the soda machine.
Instead of pushing the dispense button:
if a soda pop (called the can) is in the soda machine:
move the can to the breakroom;
say "A soda can dispenses.";
otherwise:
say "The machine is empty, so nothing happens.".
Test me with "look / x machine / push button / look / push button /
push button / push button / look".
(make the machine opaque rather than transparent if you prefer!). In the above, I've also tweaked the description of a soda pop -- if you just say "Blah" rather than The description is "Blah" after an object definition, you set the initial description (printed as part of the room description) rather than the "examine" description, which I don't think is what you want here -- and I've made the button a "part" of the machine, rather than a separate object.
The result:
Welcome
An Interactive Fiction
Release 1 / Serial number 110324 / Inform 7 build 6G60 (I6/v6.32 lib 6/12N) SD
Breakroom
A run of the mill breakroom.
You can see a soda machine (in which are three soda pops) here.
>test me
(Testing.)
>[1] look
Breakroom
A run of the mill breakroom.
You can see a soda machine (in which are three soda pops) here.
>[2] x machine
Just an average soda machine, with a large dispense button.
In the soda machine are three soda pops.
>[3] push button
A soda can dispenses.
>[4] look
Breakroom
A run of the mill breakroom.
You can see a soda pop and a soda machine (in which are two soda pops) here.
>[5] push button
A soda can dispenses.
>[6] push button
A soda can dispenses.
>[7] push button
The machine is empty, so nothing happens.
>[8] look
Breakroom
A run of the mill breakroom.
You can see three soda pops and a soda machine (empty) here.
>

I wrote an extension to do this sort of thing: https://github.com/i7/extensions/blob/master/Jesse%20McGrew/Dynamic%20Objects.i7x
To use it, you'd have to create a prototype object (say, "the original soda pop"), then use the expression a new object cloned from the original soda pop to instantiate the new object. This is more memory-efficient than creating a large static pool of objects, but it doesn't work on the Z-machine (only Glulx) and has some caveats if your objects are complicated.
Also, think seriously about whether you really need dynamic object creation. It may be easier and less confusing for players if you just come up with a sensible reason to reject the action, like "You can't bring yourself to spend the money when you haven't even finished the last soda you bought." Having a couple thousand soda cans lying around is likely to make the game slower without adding much benefit.

Related

The choice of choosing or not choosing within an acitivtydiagram not Synchronization node?

So I got a question in which I can't wrap my head around. When there is an option to do or to not do within a system how do you paint that within the UML diagram?.
In my case the system for a flight system app where the user gets the ability to choose if they want to add drinks, food for their journey. The user picks out their flight, how they which to travel, then they will be greeted by the choice of choosing drinks, then after that food if they want it.
Say then the user got the option of either choosing drinks or not. Then getting the option of choosing food or not. I made it with a Synchronization node but apparently this does not work as the option is simply empty.
Your activity is wrong, you have to use decision/merge rather than fork/join :
The fork as is name indicates is used to do concurrent activities, the customer do not chose a drink and at the same time do not get a drink, he chooses to get a drink or to not get a drink (as a if-else), etc

having some trouble writing and removing punctuation python

so i'm trying to clean up a file for my assignment by converting to lowercases and removing punctuations.
content:
I'm a fan of soft serve ice cream and Guptill's Coney Express has delicious ice cream with many flavors. I've tried Kurver Kreme in Colonie, Tastee Freeze in Delmar and Country Drive Inn in Clifton Park, but I think that this place has the best soft serve ice cream. The portions are generous and the taste is very rich. For example, the brownie sundae is decadently delicious but likely too much for one person. They also have cupcake sundaes which I am looking to try soon!
The nurses here were very attentive and wonderful. I was able to have the same surgical nurse that I had for another procedure a few years ago. The anesthesiologist listened to my concerns and acting skillfully and compassionately. I felt well taken care of there.
Pretty great! Okay, so this place is obviously not Vegan since they have a bunch of cheese and egg offerings, BUT I see that they do offer plenty of vegan alternatives.\n\nI was sort of skeptical being here because the prices were pretty hefty, I felt. I guess it looked like a fast-food/diner joint, but it charged a little more. \n\nAnyway, their homemade hot sauce is AMAZING. I got the eggs benedict for dinner and J got an omelet. Both were really good. I do love their homefries.. but the next time I come here, I want onion rings or fries. Those onion rings looked amazing.\n\nLastly, the food came relatively quickly.\n\nNot a fan of the service. They tried to seat us at this edge facing the stoves, without asking, so I asked for a booth. Then at the booth, the server didn't refill waters very well but didn't feel bad emphasizing over and over whether or not we wanted their $5-7 desserts. Honestly, a slice of pie for $6.50? Veggie Galaxy, you are t r i p p i n !\n\nBut great food! (especially breaky!)
The Tale of the 4-Starred, Up Close and Personal Bar.\n\nThe Back Abbey is a bar that is located in the charming West Village part of Claremont. The area resembles the old shopping strip-meets-new shopping strip of San Luis Obispo. What they did -- or so I've been told -- is that they've managed to preserve the old strip, leaving it looking the way it presumably did in the 70s. Rhino Records is located in the older part. The Back Abbey in the new part. Both distinct areas of their aesthetic and consumer pull. \n\nThe Back Abbey specializes in Belgian draft beer. They carry some German and English beer, as well.\n\nWow, the selection of beer. Let me tell you! A lof of them I have never heard of. I tasted the Augustijn (Belgian) and the Hofbrau Original (German). Both were good, but I prefer the Hofbrau.They come in different sized glasses, with the Hofbrau coming in a long glass. The Augustijn was $9, and the Hofbrau $6. The Hofbrau came in the larger glass, so the Augustijn must be considered some premium brew for it to be in a smaller glass and come knocking down doors at a mighty $9. \n\nI liked the overall aesthetics of the place. There is an up-close-and-personal feel to the bar. Along with the standard bar and barstools set-up, there's a long table that goes from one end of the bar to the other. People sit across from each other and, since the tables are not wide, you're not far at all from the person sitting in front of you. Like I wrote earlier, up close and personal is what this bar has going for it.\n\nThey have a food menu, as well. Above their draft selection of beer, they have a chalkboard placed high up with a list of what they serve. For those veggies among us, they even make a veggie burger.\n\nLastly, the patrons all seem to know each other. Maybe it's the small town mentality. But it's not exactly a backwards, hick town. It's very much modern in certain ways, and people just love to talk. Couple that with brew, and there's a lot of talk going on.\n\nI had a discussion with someone at the bar, who bartends at a bar not too far from The Back Abbey, and he told me that the Augustijn is the oldest beer recipe known to man. (Ah, ok. Old is vintage. Vintage is expensive. Thus, Augustijn is expensive. And two + two = four. I got this down, partna'.) Again, can we give it up for \
As a vegan, I try to support places that are not wholly vegetarian, but that made the effort to put a vegetarian section on their menu, to show them that it's worth keeping. Thai Singha House does indeed have a section of their menu that reads vegetarian, but, unfortunately, their definition of vegetarian is different from mine.\n\nAll of the vegetarian curries, I was fortunately informed upon asking, do indeed contain fish sauce, which is an ingredient in the curry itself, and cannot be omitted.\n\nMy server suggested the pad thai as a fish-free vegetarian alternative, which I ordered, holding the egg. When it arrived, there appeared to be tofu in there and no egg, which was a good sign. But after a few blind, trusting bites I quickly realized that there was also chicken or pork mixed in as well. My server graciously took it back and honored my request for a house salad, of which I wasn't charged.\n\nI don't blame Thai Singha House for not understanding the definition of vegetarian (sadly, I know a few \
On a recent visit to SLO, I got taken out to the Natural Cafe, which bears a distinct resemblance to some of the places I remember from growing up in Berkeley. Very natural woodsy, with just enough sprouts on the sandwich to add a little crunch. It's casual, with counter service only.\n\nMy turkey burger was not too dry, but the guacamole and special sauce helped it along in the moistness department. I didn't walk away from the meal feeling all gross and over full like you would with a normal burger and fries. Yeah for whole grains and veggies!
Great place! \n\nI have to say the menu and the outdoor seating keep us coming back. The food is good -- had breakfast both times but some friends had lunch items. Definitely a great selection. We've been at off-peak times so no waiting and better service. \n\nAll in all, it's no DZ Akins but it's definitely worth trying!
Went to Rebecca's Cafe today during my lunch break today. I have to say, my sandwich was delicious! I had a Chicken Caprese panini (grilled chicken, tomato, mozzarella cheese, spinach, and balsamic vinaigrette). The staff was friendly and the service was quick, however the price is a little high for my taste ($7 or so for the sandwich only). Overall, I would definitely go back to try some different items (or even get the same sandwich), but it won't be too often.
The only thing I've ever eaten at Time-Out is their ice cream cookie sandwich thing, and that's really all I need. It's about a half-gallon of ice cream sandwiched between two large-ish chocolate chip cookies. I don't know if they make it, or if it comes off a truck, or what... but it's frozen so solid you usually have to wait a few minutes before chowing down so you don't break a tooth.\n\nIf nothing else, they are one of the few old standards on Franklin Street that have not succumbed to the high-end shopping takeover, so they are worth being excited about.\n\nDo watch out for drunken Tarheels, though. This place has more disgusting drunkenness issues late at night than any bar I've been in.
Pros: Very clean and pretty little place. Really sweet-natured and attentive servers. Clean bathrooms (Haha it says a lot, ok?) Reasonable prices \n\nCons: Pho broth started ok but after a while starts to taste bitter and weird and left my mouth really dry. Meat is kinda chewy.\n\nThis place could have been SO AWESOME. A pho place so close to campus is one of those \
This is my favorite place of all time. I've driven from LA to SLO just to eat here. The barbecue sauce is AMAZING! Everything here is AMAZING! I can never decide what to get when I go here. Here's what I rotate between; tri tip sandwich, chicken wings and the ABC burger. Their fries are delicious also! Wings are fried and spicy. ABC burger is ten times more delicious then In N Out. I don't even know what to say about the trip tip sandwich. Words can not describe it. If you are a meat eater, you'll love it. It's bread, bbq sauce and like 2 inches of steak. Just amazing! My mouth is watering trying to describe the food.
After enduring years of crappy, undercooked, bad pizza in and around Ann Arbor (a la pizza house, cottage inn, and the like), Silvio's brings real pizza to town. Real pizza should be thin, have a crispy, bubbly, sourdough crust and be full of flavor, not grease, and this is the only place to get it.\n\nDon't be fooled by the \
The average rating for this place is right on point: a-ok. We came here with a relatively large group on a Friday night a little after ten o'clock. The first floor of the place was packed, but we found plenty of space upstairs in the corner, which is a pretty weird room considering how removed it is from everything. Or waiter was good about taking everyone's drink orders and being patient about it, though at one point he gave the right drinks to the wrong people. He was also cool about serving us while we played a stupid game with post its on our foreheads. We didn't order any food, but I was impressed that their kitchen is open so late and the menu is pretty big. \n\nWe were having a fun time until the band came on down stairs. The blaring sound was inescapable, even though we were kind of removed from where everything was happening. The music was so loud it was almost impossible to hear what anyone was saying right next to you. In case you're planning to pay with Discover, they DO accept it; not so cooperative on the check splitting though.
For the grand finale of my LA trip, we head over to Firestone Grill immediately after Splash Cafe.\n\nI like this place for many reasons. Obviously the tri-tip sandwich was just off da hook delicious even after clam chowder & calamari literally 5 mins ago. I also think this is one of the largest, most laid back sports bar/grills I've been to. The ladies at the register and the bartenders were very friendly in answering my questions. There is a large dining area inside and the humongous patio outside, but I don't doubt that people may end up spilling onto the sidewalk during game days as it was already quite packed for a Sunday evening. Despite the noise factor, I felt there was good energy from everyone and I was pretty comfortable. They have plenty of wide screen LCD TVs hung along the walls for your viewing pleasure (and the picture is clear :P). I don't think they have servers so you have to walk up to the counter or bar for service. Not a big deal to me IMO. \n\nSome might say that it was premature to give this a 5 star rating, but I have faith that the next time I visit (and I will go back), I will not be disappointed.
I've used this service for years. The best parts are that it tends to be on time and that there are bike racks on the front of the buses. Unfortunately the drivers must navigate roads filled with undergraduates on bicycles who think they are immortal. I've seen some close calls, but the drivers get serious kudos for being able to drive in that environment all day.\n\nThe drivers tend to be helpful and friendly, though some of them don't speak excellent English. There are a few routes I get a bit car-sick on, but that is due to the twisty roads and frequent stopping-accelerating. \n\nThe routes change, especially if there is construction going on. Make sure you check to see what is running during the summer and holidays. I've waited for shuttles that weren't going to come for days before.
Cannot believe how highly rated this place is, wow. Takes forever for them to get orders out even when its super slow. Our pizza took something like 65 minutes from the time we ordered it. Now i will wait that long if the pizza is going to be amazing, like at pizza popilis down in greek town. But this pizza was average at best. I think that the gluten free offerings are great but I really expected alot more. Great renovations btw the place looks amazing.
We went here a few weeks ago on the premiere weekend of Horrible Bosses. Loved that movie! \nMy wife wanted to come to a real movie theater that was more of a classic than one of these \
One of the best nights of my life. Hands down.\n\nIt was just amazing... The amount of people that gathered all for the same thing, The music pumping through your body everywhere you walked, The day turned to night, and the fireworks that illuminated the sky as you danced without a care to the blissful beats of Deadmau5 and others. It was a night that I will never forget.\n\nYes, it was not perfect, but what event of that size ever has been. I mean you don't show up to the largest rave in america and not expect there to be a shit load of people there. The numbers have been increasing every year, so why would this one be any different? If not, it would only be even bigger, since the biggest rising dance artist of the year, and the biggest name in trance are headlining...\n\nAnd as for all that crap about fence jumping and people getting hurt, and that one girl even died!.. OK, my condolences go out to that girls family, having a death in the family is hard, i cant even imagine it being your child.... BUT you cannot blame her taking drugs on an event, any more than video-games for kids shooting other kids. Its their own ignorance and apathy. As for all those people who got hurt. More than likely their own fault. Some 250 out of 180,000 people messed up, and now theres this huge dim view on raves. Cause there have been less riots and fights due to hockey, or football, or basketball, etc. right? (note: sarcasm above)\n\nMy final word/opinion: Definitely the best massive I've ever been to. Just as good, if not better than last year! Can't wait for next year!
I was in a desperate need of a good falafel and once again Yelp didn't let me down.\n\nOnce in the small deliciously smelling restaurant, I decided to go with the lamb gyro. I read many good things and decided to try it out, and was praying it wouldn't turn my entire mouth yellow(as stated by a few yelpers). \n\nI am happy to report that the gyro was deliciously seasoned and had huge pieces of lamb wrapped up inside. I couldn't tell you if my mouth turned yellow because I made it a point to not
file_input = open('yelp.dat', 'r')
convert_lowercase = [line.lower() for line in file_input]
with open('yelp.dat', 'w') as out:
out.writelines(sorted(convert_lowercase))
import string
remove = dict.fromkeys(map(ord, '\n ' + string.punctuation))
with open('yelp.dat') as file_input:
f = file_input.read()translate(remove)
i ran it but i checked the file there's still punctuation. where did i go wrong?
A couple issues I noticed.In your code, you open your file with file_input = open("file", "r"). This opens the file in read mode, but you don't receive the contents of this file until you do file_input.read(). Additionally, when using open() without a context manager, you should close the file with file_input.close(). Some code that would work:
import string
file_input = open("yelp.dat", "r")
file_content = file_input.read() # Read the contents of the file
convert_lowercase = file_content.lower() # No need to convert each line individually.
file_input.close() # Close the file
for punctuation in string.punctuation: # Go through the punctuation and replace it with an empty string (remove it) in your content.
convert_lowercase.replace(punctuation, "")
with open("yelp.dat", "w") as file:
file.write(convert_lowercase) # This overwrites all current content that is inside the file.

Identifying class diagram classes from a use case specification?

I'm currently trying to learn the construction of class diagrams for an upcoming exam, although I'm having difficulties knowing how to identify classes based on a use case specification (or any similar description of a system).
I understand people here can be reluctant to help with education based questions, I just wanted to clarify that I'm not asking for the work to be done for me, I just need to be pointed in the right direction.
I'm going over a past revision paper which contains a use case specification for the process of 'purchasing an ice cream' at a vending machine. The first question is to identify 9 typical classes from this specification.
I understand a class is like an object and usually identified by a noun, although my confusion is how I am able to extract 9 classes as I can only seem to find 6, that is if they're even correct:
Customer, Student, Staff, Touch Screen, Change Dispenser, and Member Card.
Here is the use case specification, apologies for the length:
Ben & Jerry’s company has just installed a new vending machine at a
University; it has a variety of ice creams available, in the format of
tubs or mini-tubs of different flavours. Products are subsidised for
students and staff but not for the rest of users; such that a customer
can insert a member card in a card reader and the subsidised prize for
the selected ice cream is displayed. You have designed a use case
model of the system, and identified a single use case (“purchase an
ice cream”) where the main actors are the customers.
ID: VM1
Name: Purchase a tub
Main Actors:
Subsidised customer (staff and students) 2 Non-subsidised customer
Pre-conditions:
Machine is on and works perfectly fine
There is stock of drinks and coins
There is sufficient stock of coins in the machine for providing change
There is sufficient stock of products
Main Flow:
Machine displays a welcome message
Student/staff inserts member card
System validates member card
Customer selects the tub by pressing the touch screen
Machine displays the subsidised price for the selected ice cream
REPEAT until sufficient coins entered: 6.1 Customer enters coin 6.2 Touch screen displays the amount entered so far
System dispenses the tub
IF too many coins are entered change is delivered
Price is added to the weekly total amount
Machine resets
Post Condition: Ice cream purchased
Alternative flow 1:
IF customer does not have sufficient coins 6.1 Customer presses the return button 6.2 System returns the entered coins
Alternative flow 2:
IF validation is unsuccessful 3.1 Message informing user 3.2 Non-subsidised price is show 3.3 Use case continues main flow 4
If anybody can help I'd really appreciate it. Thanks
You have mostly identified a number of actors, few classes itself. To start your design, ask yourself what the system under consideration (SUC) is. Obviously a vending machine. Now look at the UC how this SUC acts. There are a couple of hints:
control resources (temperature, ice cream, tubs, etc.),
control collection of money,
control dispension of ice cream.
For these you can create controller classes which look to the outside and act accordingly (read temp -> turn on cooling; count money -> start vending; etc.)
The vending process with customer interaction is probably even more complex (show offers, make selection, pricing, etc.)
As you already guessed, this is no tutorial point. However, those are the basic steps to start the design. You can go on and create sequence diagrams to verify collaboration between the single classes (lots of exceptions like: temp controller starting to yell when temp does go up too much).

Socket IO Wont Send Specific Text, Others Work Fine

Hello I'm writing an application that uses nodejs and socket io, Long story short its a social network with posting functionality etc.
For the most part the 'post' works fine you can type a message hit share (which sents it to the nodejs server via http post) where the record will be stored to the mongodb database, then socketio kicks in and sends the object to all the connected clients with permission to see the message.
This whole process works fine except for one specific message.
July 16, 2014 is
National Corn Fritters Day
It’s National Corn Fritters Day! Corn fritters are savory bites of fried or baked corn batter—a mixture made with corn, egg, flour, milk, and melted butter. These treats can be eaten alone, served as a side, or enjoyed with a topping like syrup, powdered sugar, or jam.
Although corn fritters originated in the South, many other cultures have come up with similar dishes. For example, in Asia “pakoras” are a popular snack. This dish is made with vegetables dipped in batter that are then deep-fried.
To celebrate National Corn Fritters Day, head to your local Southern-style restaurant or grab your frying pan to cook up some homemade fritters!
This one message..... will not send via socket io I've inspected it with a character inspector and cant figure out why it wont send i've run it through control character strippers and still nothing.
here is the chunk of code that does the sending
io.to(tmpPost.metadata.createdby._id).emit('server_new_post', tmpPost)
I have verified that the line of code does in-fact execute and the record is stored to the database but this socket will not send a post object containing this text.

Multiple letters required for input

input("If you wish to play Twin Clocks(Temporary Name)Beta, please enter start. "
"Developers note: This is total I would say took about 9 hours. Please play through this multiple times if you would like to see everything the game has to offer. This short python-based game is made by Zombiex100 ")
if "start" == input():
print("You have decided today would be a good day to actually do something with your old best friend, who happens to be your twin, rather than play python-based text adventure games. Where do you choose to hang out?")
input("Type m once to go to the movies")
input("Type ic once for two lines to go for some ice cream")
input("Type r once for six line if you want to go on long walks on the beach")
input("Type p once for six line if you want to visit the park")
#Was stuck on these first lines of code for at least four hours in total. What mostly got me was having the program react to the user typing in "start"
#I am also trying to figure out the problem why you have to write certain letter (ic,r, etc.) in order for the text to pop up
if "m" == input():
print("You remember seeing a interesting movie by the name of Antler Hooves on a ad on TV. It fits you and your twin perfectly since you're very silly.")
print("You call her and catch up since you haven't seen her in a couple months since you've been busy studying to become a camera-man and she has been equally busy trying to become an artist.")
print("She is surprised by your choice of movie, and tell you about a new indie sc-fi movie, The Alien Among Us, exclusive to a certain branch of movie theaters. You look it up and decide it would be a better choice.You buy the tickets and go to meet her at the theater.")
print("Once you arrive at the theater, you are confused why you ever stopped talking. You enter the theater.")
print("You eventually finish the two hour movie and decide to go get some food; specifically Mr.Froze, an ice cream parlor; being as childish as you are.")
print("You cross the street to get to the ice cream parlor, but before you could finish crossing, a car comes by. You exclaim that he was insane and that you are saddened by the face you didn't catch his license plate. You then look down adn see your twins corpse.")
print("Terror and hatred fills your bones as people rush out of there cars coming to you and calling 911. You feel empty inside, and then feel a surge of energy go through your body.")
#Each time a run is finished, the game is supposed to loop and give you different options. I have decided to do that later on and finish all point now.
if "ic" == input():
print("You remember that one ice cream parlor named Mr.Froze you went with your twin when you were in elementary school. You decide it would be nice to go back there with your twin, maybe even revive your friendship, considering that she has many things common with you, I mean, she IS your twin after all.")
print("You call your twin and she is a bit surprised you remember Mr.Froze. She agrees to go and tell you to go ahead. ")
print("You walk in Mr.Froze and you have a couple options of what ice cream you would like to buy")
input("Type v if you would like to order a cone of vanilla")
input("Type c once for two lines if you would like to order a cone of chocolate")
input("Type vc once for three lines if you would like a twist vanilla/chocolate cone")
if "v" == input():
print("You decide to get yourself a plain vanilla cone, just like your personality. You also buy cotton candy ice cream for your twin, Ellie.")
print("You see her come in and you tell her you've already paid. You sit down and catch up on things, ask how studying is. She says that she wants to study abroad in Norway.")
print("Your conversation is cut short when a man in a mask walks in. You start whispering to Ellie until the man pulls out a gun and point it at Ellie")
print("Terror and fear engulfs your emotions as you hear him yelling for the money, but you can't help but laugh at him robbing a ice cream parlor. The man telling you to shut the fuck up or she gets a bullet. You quickly quiet down. As it turns out the cashier has major anxiety and is unable to get the money to give over. The man proceeds to shoot Ellie in the head.")
print("Terror and hatred fills your bones as you look at her dead corpse and the man points the gun at you. Before he manges to put a bullet directly through your brain, you feel a surge of energy go through your body")
if "c" == input():
print("You decide on chocolate, a beautiful flavor form the majestic coco beans. You also buy your twins favorite ice cream favor, strawberry.")
print("You see her come in and you tell her you've already paid. You sit down and catch up on things, ask how studying is. She says that she wants to study abroad in Norway. She then says she was actually thinking of coming over this Christmas, and decides it was worth giving you your present early. You look shocked at the beautifully drawn picture of you.")
print("While you look at the drawing, a strange man with a hokey mask walks in the door. You start whispering to Ellie about him until,")
print("He pulls out a small pistol on the cashier. The cashier panics and throws something at him, you couldn't quite see it as you were also panicking, but it seems the man pulled the trigger a second after getting hit, landing the bullet into your twins brain.")
print("Terror and hatred fills your bones as you look at her dead corpse. You were about to grab your chair and beat the man on the ground to death, but before you could, you feet a surge of energy go through your body.")
if "vc" == input():
print("You decide on the most glorious, intelligent choice of them all; a twist cone.You wait for your sister to come so she may buy her ice cream and sit down.")
print("Your sister finally comes. You tell her to go get her ice cream and that you'll wait at the small table. She looked a little disappointed but you don't know why")
print("While she is buying her ice cream; you notice a strange man walk in. You ignore it and continue waiting and eating your delicious ice cream.")
print("The strange man comes behind Ellie, but you think nothing of it.")
print("The man then gets Ellie in a choking position, demanding money from the cashier. You panic and run into the man, causing him to pull the trigger")
print("Terror and hatred fills your bones as you look at her dead corpse. The man gets back up and point the gun at you with the trigger ready to be pulled, but before he can you feel what can be best described as a surge of a energy going through your body.")
if "r" == input():
print("This isn't a dating website idiot! Plus, she's your twin! Go pick something else you pervert, you knew full well what you picked and why.")
if "p" == input():
print("You call up your sister and tell her about all these internet people telling you to go outside and get a life. You tell her about remembering being best friend and you now want to meet up at the park, because if you remembered correctly, your twin had a dog. She responds she has a corgi, and that she's glad you contacted her after a year. She will meet you at the park, and you get ready to go outside")
print("You arrive at the park a little overly prepared. You have drinks, snacks, your 3ND, PPD, and even a tent! Your sister arrives and starts laughing immediately when she sees you and your humongous book bag, as you start to rethink this real life thing.")
print("You play with her dog while catching up, even hearing that her boyfriend was suspicious of me until she told him that you were her twin. She tells you how he would like to meet you. You aren't too sure, but say you would think about it.")
print(" While you were talking, your twins corgi manged to escape and run across the street. You and her panicking a little, she runs across the street to get to him.")
print(" But she doesn't make it to the other side. She gets hit by an oncoming car as you watch her corgi running away. Hatred and terror fills your bones as you look at her dead corpse. You start running for the driver who seems pretty scared and is calling 911, but before you could, you feel energy going through your body")
If you read through, you can see that I have said for some letter you must type them multiple times for the prompt to appear. Is there any way to make them all so that you must only put the letter in once?
Each time you have the input() in your if, it calls it again (which is why the player has to enter it six times, because the blocks that handle 'r' and 'p' are near the bottom). Instead, store the result of input() to a variable,
inR = input
and then check to see if it matches:
if inR == "a":
#some code here
elif inR == "ic":
#some other code here

Resources