Browse Source

refactor random

boyska 3 years ago
parent
commit
9881d09fc5
2 changed files with 24 additions and 40 deletions
  1. 16 21
      banana/bananalib.py
  2. 8 19
      banana/cli.py

+ 16 - 21
banana/bananalib.py

@@ -1,4 +1,5 @@
 """Main module."""
+import random
 
 
 class Codec:
@@ -60,6 +61,21 @@ class Codec:
 
         return True
 
+    def random(self, minlength=6):
+
+        numdict = len(self.dictionary)
+        word = ""
+
+        curr_dict = (numdict - 1 + self.dictstart + self.shiftend) % numdict
+        final_dict = (numdict - 1 + self.dictstart) % numdict
+        print("final", final_dict)
+        while curr_dict != final_dict or len(word) < minlength:
+            word = random.choice(self.dictionary[curr_dict]) + word
+            curr_dict = (curr_dict - 1) % numdict
+            print("curr", curr_dict)
+
+        return word
+
 
 class BananaCodec(Codec):
     def __init__(self):
@@ -81,26 +97,5 @@ class AvocadoCodec(Codec):
         super().__init__(1, 1)
 
 
-def bananarandom(dictstart=0, shiftend=0, minlength=6, dictionary=None):
-    import random
-
-    # defaults
-    if dictionary is None:
-        dictionary = [list("bcdfglmnprstvz"), list("aeiou")]
-
-    numdict = len(dictionary)
-    st = ""
-    length = 0
-
-    i = (numdict - 1 + dictstart + shiftend) % numdict
-    while not (i == (numdict - 1 + dictstart) % numdict and length >= minlength):
-        r = random.randint(0, len(dictionary[i]) - 1)
-        st = dictionary[i][r] + st
-        i = (i - 1) % numdict
-        length += 1
-
-    return st
-
-
 if __name__ == "__main__":
     print("Ciao sono la libreria banana")

+ 8 - 19
banana/cli.py

@@ -39,6 +39,10 @@ def main_check(args):
         sys.exit(1)
 
 
+def main_random(args):
+    print(get_codec(args).random(minlength=args.minlength))
+
+
 def main():
     parser = argparse.ArgumentParser(description="Convert dec number to banana")
     parser.add_argument("--ananas", action="store_true")
@@ -66,6 +70,10 @@ def main():
     check.add_argument("--quiet", "-q", action="store_true")
     check.set_defaults(func=main_check)
 
+    rand = sub.add_parser("random", help="Generate random banana")
+    rand.add_argument("--minlength", help="Set minimum length", type=int, default=6)
+    rand.set_defaults(func=main_random)
+
     args = parser.parse_args()
     if not hasattr(args, "func"):
         print("You need to select one subcommand. \nUse --help", file=sys.stderr)
@@ -74,25 +82,6 @@ def main():
     args.func(args)
 
 
-def bananarandom():
-    parser = argparse.ArgumentParser(description="Generate random banana")
-    parser.add_argument("--dictionary", help="Set dictionary", type=list, nargs="+")
-    parser.add_argument(
-        "--dictstart", help="Set starting dictionary", type=int, default=0
-    )
-    parser.add_argument(
-        "--shiftend", help="Set shift for ending dictionary", type=int, default=0
-    )
-    parser.add_argument("--minlength", help="Set minimum length", type=int, default=6)
-    args = parser.parse_args()
-
-    print(
-        banana.bananarandom(
-            args.dictstart, args.shiftend, args.minlength, args.dictionary
-        )
-    )
-
-
 if __name__ == "__main__":
     # pragma: no cover
     main()