141 lines
2.5 KiB
Python
141 lines
2.5 KiB
Python
|
|
def any(things):
|
|
"""Return True if any of the things are True.
|
|
|
|
things should be iterable.
|
|
|
|
If the things are empty, then we can't say any are True
|
|
>>> any([])
|
|
False
|
|
|
|
If all the things are False, then we can't say any are True
|
|
>>> any([False,False,False])
|
|
False
|
|
|
|
If all the things are equivalent to False, then we can't say any are True
|
|
>>> any([0,[],''])
|
|
False
|
|
|
|
The type of the true thing should not matter
|
|
>>> any([1,[],''])
|
|
True
|
|
>>> any([0,(2,),''])
|
|
True
|
|
>>> any([0,[],'foo'])
|
|
True
|
|
>>> any([0,[],True,''])
|
|
True
|
|
|
|
It should not matter where the True thing is
|
|
>>> any((True,False,False,False,False,))
|
|
True
|
|
>>> any((False,False,True,False,False,))
|
|
True
|
|
>>> any((False,False,False,False,True,))
|
|
True
|
|
|
|
The size of the sequence should not matter
|
|
>>> True == any((True,)) == any((True,True,)) == any((True,True,True,True,))
|
|
True
|
|
|
|
Any string is True
|
|
>>> any('foo')
|
|
True
|
|
|
|
Except an empty string
|
|
>>> any('')
|
|
False
|
|
|
|
The function cannot be applied to ints
|
|
>>> any(7)
|
|
Traceback (most recent call last):
|
|
...
|
|
TypeError: iteration over non-sequence
|
|
"""
|
|
for thing in things:
|
|
if thing:
|
|
return True
|
|
return False
|
|
|
|
def all(things):
|
|
"""Return True if all of the things are True.
|
|
|
|
things should be iterable.
|
|
|
|
If the things are empty, then we can't say all are True
|
|
>>> all([])
|
|
False
|
|
|
|
If all the things are False, then we can't say all are True
|
|
>>> all([False,False,False])
|
|
False
|
|
|
|
If all the things are equivalent to False, then we can't say all are True
|
|
>>> all([0,[],''])
|
|
False
|
|
|
|
The type of the false thing should not matter
|
|
>>> all([0,True,True,])
|
|
False
|
|
>>> all([True,(),True,])
|
|
False
|
|
>>> all([True,True,'',])
|
|
False
|
|
|
|
Position of the false thing should not matter
|
|
>>> all((False,True,True,))
|
|
False
|
|
>>> all((True,False,True,))
|
|
False
|
|
>>> all((True,True,False,))
|
|
False
|
|
|
|
any string is True
|
|
>>> all('foo')
|
|
True
|
|
|
|
Except an empty string
|
|
>>> all('')
|
|
False
|
|
|
|
The function cannot be applied to ints
|
|
>>> all(7)
|
|
Traceback (most recent call last):
|
|
...
|
|
TypeError: iteration over non-sequence
|
|
"""
|
|
for thing in things:
|
|
if not thing:
|
|
return False
|
|
return len(things) > 0
|
|
|
|
import logging
|
|
|
|
seed = 999.0
|
|
count = 0
|
|
testably_random = True
|
|
def random():
|
|
global testably_random
|
|
if testably_random:
|
|
from random import random
|
|
return random()
|
|
global seed
|
|
global count
|
|
seed += 1.0
|
|
count += 1
|
|
if seed > 1999:
|
|
seed = 0.0
|
|
logging.info("count: %d" % count)
|
|
#if seed == 998:
|
|
# sys.exit(1)
|
|
return seed / 2000.0
|
|
|
|
def choice(aList):
|
|
i = int(random() * len(aList))
|
|
return aList[i]
|
|
|
|
if __name__ == '__main__':
|
|
import doctest
|
|
doctest.testmod()
|
|
|