else
This commit is contained in:
parent
a3eb7cb410
commit
957182f363
4 changed files with 200 additions and 0 deletions
1
FunctionMap/README.md
Normal file
1
FunctionMap/README.md
Normal file
|
@ -0,0 +1 @@
|
|||
This is just an example / template for calling functions based on strings
|
173
FunctionMap/functionmap_example.py
Normal file
173
FunctionMap/functionmap_example.py
Normal file
|
@ -0,0 +1,173 @@
|
|||
import shlex
|
||||
|
||||
def add(x=None, y=None, *trash):
|
||||
try:
|
||||
return float(x) + float(y)
|
||||
except (ValueError, TypeError):
|
||||
return
|
||||
|
||||
def multiply(x=None, y=None, *trash):
|
||||
try:
|
||||
return float(x) * float(y)
|
||||
except (ValueError, TypeError):
|
||||
return
|
||||
|
||||
def exponent(x=None, y=None, *trash):
|
||||
try:
|
||||
return float(x) ** float(y)
|
||||
except (ValueError, TypeError):
|
||||
return
|
||||
|
||||
def join(text=None, spacer=None, *trash):
|
||||
if None in (text, spacer):
|
||||
return
|
||||
return spacer.join(text.split(' '))
|
||||
|
||||
def default_function(*trash):
|
||||
return 'Look what I found: ' + str(trash)
|
||||
|
||||
|
||||
FUNCTION_MAP = {
|
||||
'add': add,
|
||||
'multiply': multiply,
|
||||
'exponent': exponent,
|
||||
'join': join
|
||||
}
|
||||
|
||||
COMMAND_IDENTIFIERS = ['robot!']
|
||||
|
||||
SAMPLE_COMMENTS = [
|
||||
'robot! add 1 2',
|
||||
'I want robot! multiply 4 2 trash trash trash',
|
||||
'robot! blank',
|
||||
'robot!',
|
||||
'robot! add 7 19',
|
||||
'robot! exponent 7 2',
|
||||
'robot! join "one two three" "-"',
|
||||
'robot! add 10 10 robot! multiply 10 10 robot! exponent 10 10',
|
||||
'robot! add 1 1\nrobot! multiply 1 1',
|
||||
' do ROBOT! add boom box',
|
||||
'']
|
||||
|
||||
COMMAND_IDENTIFIERS = [c.lower() for c in COMMAND_IDENTIFIERS]
|
||||
|
||||
def handle_line(text):
|
||||
print('User said:', text)
|
||||
elements = shlex.split(text)
|
||||
print('Broken into:', elements)
|
||||
for element_index, element in enumerate(elements):
|
||||
if element.lower() not in COMMAND_IDENTIFIERS:
|
||||
continue
|
||||
|
||||
arguments = elements[element_index:]
|
||||
assert arguments.pop(0).lower() in COMMAND_IDENTIFIERS
|
||||
#arguments = arguments[1:]
|
||||
|
||||
# If the user has multiple command calls on one line
|
||||
# (Which is stupid but they might do it anyway)
|
||||
# Let's only process one at a time please.
|
||||
for argument_index, argument in enumerate(arguments):
|
||||
if argument.lower() in COMMAND_IDENTIFIERS:
|
||||
arguments = arguments[:argument_index]
|
||||
break
|
||||
|
||||
print('Found command:', arguments)
|
||||
if len(arguments) == 0:
|
||||
print('Did nothing')
|
||||
continue
|
||||
|
||||
function = FUNCTION_MAP.get(arguments[0], default_function)
|
||||
print('Using function:', function.__name__)
|
||||
|
||||
if function is not default_function:
|
||||
# When using the default function, we want to pass in the
|
||||
# first word because it might be important
|
||||
# For other commands, we don't need it because add()
|
||||
# doesn't need the string "add" for anything.
|
||||
arguments = arguments[1:]
|
||||
result = function(*arguments)
|
||||
print('Output: %s' % result)
|
||||
|
||||
def handle_comment(comment):
|
||||
lines = comment.split('\n')
|
||||
for line in lines:
|
||||
handle_line(line)
|
||||
|
||||
for comment in SAMPLE_COMMENTS:
|
||||
print()
|
||||
handle_comment(comment)
|
||||
|
||||
'''
|
||||
User said: robot! add 1 2
|
||||
Broken into: ['robot!', 'add', '1', '2']
|
||||
Found command: ['add', '1', '2']
|
||||
Using function: add
|
||||
Output: 3.0
|
||||
|
||||
User said: I want robot! multiply 4 2 trash trash trash
|
||||
Broken into: ['I', 'want', 'robot!', 'multiply', '4', '2', 'trash', 'trash', 'trash']
|
||||
Found command: ['multiply', '4', '2', 'trash', 'trash', 'trash']
|
||||
Using function: multiply
|
||||
Output: 8.0
|
||||
|
||||
User said: robot! blank
|
||||
Broken into: ['robot!', 'blank']
|
||||
Found command: ['blank']
|
||||
Using function: default_function
|
||||
Output: Look what I found: ('blank',)
|
||||
|
||||
User said: robot!
|
||||
Broken into: ['robot!']
|
||||
Found command: []
|
||||
Did nothing
|
||||
|
||||
User said: robot! add 7 19
|
||||
Broken into: ['robot!', 'add', '7', '19']
|
||||
Found command: ['add', '7', '19']
|
||||
Using function: add
|
||||
Output: 26.0
|
||||
|
||||
User said: robot! exponent 7 2
|
||||
Broken into: ['robot!', 'exponent', '7', '2']
|
||||
Found command: ['exponent', '7', '2']
|
||||
Using function: exponent
|
||||
Output: 49.0
|
||||
|
||||
User said: robot! join "one two three" "-"
|
||||
Broken into: ['robot!', 'join', 'one two three', '-']
|
||||
Found command: ['join', 'one two three', '-']
|
||||
Using function: join
|
||||
Output: one-two-three
|
||||
|
||||
User said: robot! add 10 10 robot! multiply 10 10 robot! exponent 10 10
|
||||
Broken into: ['robot!', 'add', '10', '10', 'robot!', 'multiply', '10', '10', 'robot!', 'exponent', '10', '10']
|
||||
Found command: ['add', '10', '10']
|
||||
Using function: add
|
||||
Output: 20.0
|
||||
Found command: ['multiply', '10', '10']
|
||||
Using function: multiply
|
||||
Output: 100.0
|
||||
Found command: ['exponent', '10', '10']
|
||||
Using function: exponent
|
||||
Output: 10000000000.0
|
||||
|
||||
User said: robot! add 1 1
|
||||
Broken into: ['robot!', 'add', '1', '1']
|
||||
Found command: ['add', '1', '1']
|
||||
Using function: add
|
||||
Output: 2.0
|
||||
User said: robot! multiply 1 1
|
||||
Broken into: ['robot!', 'multiply', '1', '1']
|
||||
Found command: ['multiply', '1', '1']
|
||||
Using function: multiply
|
||||
Output: 1.0
|
||||
|
||||
User said: ROBOT! add boom box
|
||||
Broken into: ['ROBOT!', 'add', 'boom', 'box']
|
||||
Found command: ['add', 'boom', 'box']
|
||||
Using function: add
|
||||
Output: None
|
||||
|
||||
User said:
|
||||
Broken into: []
|
||||
'''
|
4
Toolbox/README.md
Normal file
4
Toolbox/README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
Toolbox
|
||||
=======
|
||||
|
||||
These are just minor or single-purpose scripts that I use to automate some housework. They aren't really important enough to separate into folders.
|
22
Toolbox/filenamescramble.pyw
Normal file
22
Toolbox/filenamescramble.pyw
Normal file
|
@ -0,0 +1,22 @@
|
|||
'''
|
||||
Drag a file on top of this .py file, and it will have its
|
||||
filename scrambled into a combination of 16 upper and lowercase
|
||||
letters.
|
||||
'''
|
||||
|
||||
import os
|
||||
import random
|
||||
import string
|
||||
import sys
|
||||
|
||||
argv = sys.argv[1:]
|
||||
print(argv)
|
||||
for originalname in argv:
|
||||
folder = os.path.dirname(originalname)
|
||||
basename = os.path.basename(originalname)
|
||||
extension = basename.split('.')[-1]
|
||||
newname = [random.choice(string.ascii_letters) for x in range(16)]
|
||||
newname = ''.join(newname)
|
||||
newname = '%s/%s.%s' % (folder, newname, extension)
|
||||
print('%s -> %s' % (originalname, newname))
|
||||
os.rename(originalname, newname)
|
Loading…
Reference in a new issue