(SE) Självförsörjande PV-system utan förbinding till elnätet. (DE) Autarkes PV-System ohne Verbidung zum Stromnetz.
https://stiefel.tech
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.4 KiB
45 lines
1.4 KiB
3 years ago
|
import sys
|
||
|
import argparse
|
||
|
import json
|
||
|
import random
|
||
|
__author__ = 'm3x1m0m'
|
||
|
|
||
|
class c_num_gen:
|
||
|
def __init__(self, imax_num, ifname):
|
||
|
self.max_num = imax_num
|
||
|
self.fname = ifname
|
||
|
self.__nums = []
|
||
|
def __del__(self):
|
||
|
# Save on object destruction.
|
||
|
self.__write()
|
||
|
def __read(self):
|
||
|
with open(self.fname, "r") as rf:
|
||
|
self.__nums = json.load(rf)
|
||
|
def __write(self):
|
||
|
with open(self.fname, "w") as wf:
|
||
|
json.dump(self.__nums, wf)
|
||
|
def __rand_num(self):
|
||
|
num = random.randint(0, self.max_num)
|
||
|
return hex(num).upper()
|
||
|
def create_new_number(self):
|
||
|
if len(self.__nums) == 0:
|
||
|
self.__read()
|
||
|
rand_num = self.__rand_num()
|
||
|
while rand_num in self.__nums:
|
||
|
rand_num = self.__rand_num()
|
||
|
self.__nums.append(rand_num)
|
||
|
return rand_num
|
||
|
|
||
|
def main():
|
||
|
parser = argparse.ArgumentParser(description='Random number generator w/ memory.')
|
||
|
parser.add_argument('-f','--file', help='File name for memory.', required=True)
|
||
|
parser.add_argument('-c','--create', help='Create a new number.', action='store_true')
|
||
|
args = parser.parse_args()
|
||
|
max_num = (1<<16)
|
||
|
generator = c_num_gen(max_num, args.file)
|
||
|
if (args.create):
|
||
|
print("New number: {}".format(generator.create_new_number()))
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|