Call function at any time on input, python 3.x [closed] - python

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 5 years ago.
Improve this question
If you made a function like this:
def show():
print(something)
How would you make it so that, on any input, if the user typed a specific thing, this would be called? I want multiple functions like this to be able to be called whenever the user wants. Would I just have to have it as an option every time I ask for an input?
EDIT: sorry, this wasn't very clear. Say I have a variable in a game, like money. When I ask for an input as the game goes along, the inputs being about unrelated things, I want the user to be able to type eg. gold and the show() function will activate. Then the input will go on as usual. Would I be able to do this without just have it as an option for each input, eg.
variable = input("type something")
if variable == "gold":
do stuff
elif variable == other things
do other things

Do you mean something like this:
def thing1(): # Random command
print('stuff')
def thing2(): # Random command
print('More stuff')
def check(command):
'''Checks if the users command is valid else it does a default command'''
if command == 'thing1':
thing1()
elif command == 'thing2':
thing2()
else:
default_thing()
while True: # Loop going on forever
userinput = input('') # Lets the user input their command
check(userinput)

you could put all your functions in a dictionary: {"<some user input>":func_to_call} and see if it matches any
something like:
def gold():
print("gold")
input_options = {"gold":gold}
variable = input("type something:")
if variable in input_options:
input_options[variable]()

Related

How do I assign multiple strings to one variable? [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 1 year ago.
Improve this question
So I have tried searching this but apparently nobody ever needed to do this simple thing before?
I want to a variable to have multiple strings. so basically it is:
command = input()
commands = "start" or "stop" or "help"
while command.lower() == commands:
dosomething()
else
dosomething()
This is basically the idea, but it only take the first string which is "start" but ignores the other 2. I understand that it reads it as ( commands = "start" ) so I tried making it
commands = "start" or commands = "stop" or commands = "help"
but it flat out says it is wrong. so what did I do instead?
Can someone help? Thanks
What you need is a list, then check for inclusion with if (not while which is a loop)
command = input(">>")
commands = ["start", "stop", "help"]
if command.lower() in commands:
print("start/stop/help")
else:
print("other")

How do make text in print() and input() appear one by one? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 3 years ago.
Improve this question
Almost like an RPG game, I want to make text appear as if someone is typing them. I have an idea of how to do it with the print() function in python, something involving the sleep() and maybe with sys.stdout.flush?
How would I do it text coming before an input function?
For example, I want What is your name? to be typed out, and then the user would input his name.
You can use this:
text = 'What is your name? '
for x in text:
sys.stdout.write(x)
sys.stdout.flush()
time.sleep(0.00001)
name = input()
you can randomize the sleep time per loop as well to mimic typing even better like this:
import time,sys,random
text = 'What is your name? '
for x in text:
sys.stdout.write(x)
sys.stdout.flush()
time.sleep(random.uniform(.000001, .000019))
name = input()
as Tomerikoo pointed out, some systems have faster/slow delays so you may need to use uniform(.01, .5) on another system. I use OS/X.
On windows this probably works better. Thanks Tomerikoo:
import time,sys,random
text = 'What is your name? '
for x in text:
print(x, end="", flush=True)
time.sleep(random.uniform(.000001, .000019))
# or smaller sleep time, really depends on your system:
# time.sleep(random.uniform(.01, .5))
name = input()
You can use the following code:
import time,sys
def getinput(question):
text = input(question)
for x in text:
sys.stdout.write(x)
sys.stdout.flush()
time.sleep(0.00001) #Sets the speed of typing, depending on your system
Now everytime you call getinput("Sample Question"), you would get the user's input based on the question you passed to the function.

Im trying to make a square root function in python [closed]

Closed. This question needs debugging details. It is not currently accepting answers.
Edit the question to include desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem. This will help others answer the question.
Closed 8 years ago.
Improve this question
I know there are probably a ton of these but the ones I have looked at arent quite my question. I am trying to make a function where you It asks you "What would you like to square" and then I have raw input for them to type something in. How can I make it so I can just type in any number and it will square it for me. In these circumstances I can not use the ** thing.
My exact code. Its nothing special, very basic.
def square():
print ("What would you like to square?")
raw_input("> ")
square()
You want to first cast the value from the user input to an actual number (raw_input returns a string), and then take the square root of that:
import math
def square():
print ('What would you like to square?')
user_input = raw_input('> ')
try:
number = float(user_input)
except ValueError:
print('You did not input a number!')
else:
print(math.sqrt(number))
square()
math.sqrt is the function you are looking for.
You need to set the return value of raw_input to a variable. The variable that raw_input returns is a string. The sqrt function takes a number as an input, so you need to cast your variable to be a float.
Here's an example:
def square():
print("What would you like to square?")
x_str = raw_input("> ")
x_float = float(x_str)
sqrt_x = math.sqrt(x_float)
print(sqrt_x)
This function will prompt the user to input a number to calculate the square root of, and then print out the square root of that number.

Doing something after for loop finishes in same function? [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
Is this possible? I'm doing an bukkit plugin now (in Python, yes :D), and I'm forced to do this within one function, so I can't separate it and call it later... For example, if I have loop that loops through players on server and adds everyone except one player, I want it to finish, and then teleport i.e. "Player1" to random player. At the moment, it teleports "Player1" to random player every time because of for loop... I'll give you just little of code, since It looks messy in preview due to many things that are not involved in problem and could be confusable to you... Here it is:
listica = []
for p1 in org.bukkit.Bukkit.getWorld(nextvalue).getPlayers():
if p1.getName() not in listica:
try:
listica.remove(event.getPlayer().getName())
randomtarget = choice(listica)
randomtargetreal = org.bukkit.Bukkit.getPlayer(randomtarget)
event.getPlayer().teleport(randomtargetreal)
event.getPlayer().sendMessage("%sYou teleported to: %s%s"% (bukkit.ChatColor.GREEN, bukkit.ChatColor.DARK_GREEN, randomtarget))
except ValueError:
randomtarget = choice(listica)
randomtargetreal = org.bukkit.Bukkit.getPlayer(randomtarget)
if event.getPlayer().getLocation() != randomtargetreal.getLocation():
event.getPlayer().teleport(randomtargetreal)
event.getPlayer().sendMessage("%sYou teleported to: %s%s"%(bukkit.ChatColor.GREEN, bukkit.ChatColor.DARK_GREEN, randomtarget))
What I want is:
run for loop:
when there is no more players to add a.k.a it finishes
do try loop
P.S. I can't do it in separate function.
Thanks in advance! :)
Do you mean:
def func(args):
for item in loop:
do something
try: # note indentation
something else

Appropriate Class Usage? - Python [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
So, I've been using a simple paradigm for my command line application. One base class called "Command" is inherited multiple times so I can use the child classes to do my dirty work in a while loop. This while loop asked for a command and ran that input through a dictionary to point to the correct class and call Command().run() (The classes needed to be initialized for several unimportant reasons). It looks something like this:
class Command(object):
#Some of these parent variables where used as constants and
#redefined in the global scope
dir = ""
password = ""
target = ""
status_msg = "only for child classes"
def __init__(self):
self.names = [self.__class__.__name__.lower()]
def run(self):
raise NotImplementedError("There has to be code for the program to run!")
class End(Command):
status_msg = "Closing program and resources ..."
def __init__(self):
Command.__init__(self)
names = [
"exit", "close", "quit"
]
self.names.extend(names)
def run(self):
#Do checks and close resources?
sys.exit()
while True:
command = input("What will you be doing with said folder? ")
try:
cmd = commands[strip(command.lower())]() # Strip is defined elsewhere in the code
print("\n", cmd.status_msg, "\n")
cmd.run()
except Exception as __e:
print("Error: \n " + str(__e))
print("Perhaps you misspelled something? Please try again \n")
and other classes would overwrite the run commands and the class variables.
I've been wondering whether or not this is a Pythonic use of classes, and whether or not is efficient. In the end this amounts to two questions.
Is this a pythonic use of classes?
Is this the most efficient way to code something like this?
Any help is welcome; I'm not a coding pro, but I always like to learn something new about one of my favorite coding languages! (I am willing to edit this post if you guys think the question is worded incorrectly, because I'm not completely confident it will make sense to everybody.)

Categories