Skip to content

Latest commit

 

History

History
486 lines (440 loc) · 16.6 KB

programs_recommendations.md

File metadata and controls

486 lines (440 loc) · 16.6 KB

Table of contents

Recommended programs

1 program of learning cost in [1, 2[

Program 09_indent.py (learning cost 1.4375)

1   import glob
2   python_files = glob.glob("*.py")
3   for file_name in sorted(python_files):
4       print("    ------" + file_name)
5       with open(file_name) as f:
6           for line in f:
7               print("    " + line.rstrip())
8       print()
Cost Taxon Location
0.25 call/composition 7
0 call/subroutine/builtin/open 5
0 call/subroutine/builtin/sorted 3
0 call/subroutine/method 2
0 call/subroutine/method/sequence/string/rstrip 7
0 call/subroutine/no_arguments 8
0 flow/loop/exit/late 3-8, 6-7
0 flow/loop/for 3-8
0 flow/loop/for/elements 6-7
0 flow/loop/for/nested/1 6-7
0.875 import/standard/glob 1
0.125 operator/string/concatenation 4, 7
0 style/imperative 1-8
0 type/sequence/string 7
0 type/sequence/string/literal 2, 4, 7
0 var/assignment/explicit/single 2
0.1875 var/assignment/implicit/iteration_variable 3, 6
0 var/scope/global 1-8
0 meta/count/program/sloc/8 1-8
0 meta/count/variety/3 1-8
0 meta/program 1-8

2 programs of learning cost in [2, 4[

Program 04_fibonacci.py (learning cost 2.53125)

1   parents, babies = (1, 1)
2   while babies < 100:
3       print("This generation has {} babies".format(babies))
4       parents, babies = (babies, parents + babies)
Cost Taxon Location
0.25 call/composition 3
0 call/subroutine/method/sequence/string/format 3
0.75 condition/inequality 2
0 flow/loop/exit/late 2-4
0 flow/loop/while 2-4
0.375 operator/arithmetic/addition 4
0 style/imperative 1-4
0.4375 type/number/integer/literal 1, 1, 2
0.375 type/number/magic 2
0 type/sequence/string 3
0 type/sequence/string/literal 3
0.1875 type/sequence/tuple/literal 1, 1, 4, 4
0.0625 var/assignment/explicit/parallel 1
0.09375 var/assignment/explicit/parallel/slide 4
0 var/scope/global 1-4
0 meta/count/program/sloc/4 1-4
0 meta/count/variety/2 1-4
0 meta/program 1-4

Program 08_arguments.py (learning cost 3.3125)

1   import sys
2   try:
3       total = sum(int(arg) for arg in sys.argv[1:])
4       print("sum =", total)
5   except ValueError:
6       print("Please supply integer arguments")
Cost Taxon Location
0.25 call/composition 3
0 call/subroutine/builtin/casting/int 3
0 call/subroutine/builtin/sum 3
0.1875 def/subroutine/generator/expression 3
0 flow/exception/catch/ValueError 2-6
0.875 import/standard/sys 1
0 style/imperative 1-6
0.875 subscript/slice/start 3
0.375 type/number/integer 3
0.4375 type/number/integer/literal 3
0 type/sequence/string/literal 4, 6
0 var/assignment/explicit/single 3
0.1875 var/assignment/implicit/iteration_variable 3
0 var/scope/global 1-6
0.125 var/scope/local 3
0 meta/count/program/sloc/6 1-6
0 meta/count/variety/3 1-6
0 meta/program 1-6

6 programs of learning cost in [4, 8[

Program 21_xml_html_parsing.py (learning cost 4.03125)

1   dinner_recipe = """<html><body><table>
2   <tr><th>amt</th><th>unit</th><th>item</th></tr>
3   <tr><td>24</td><td>slices</td><td>baguette</td></tr>
4   <tr><td>2+</td><td>tbsp</td><td>olive oil</td></tr>
5   <tr><td>1</td><td>cup</td><td>tomatoes</td></tr>
6   <tr><td>1</td><td>jar</td><td>pesto</td></tr>
7   </table></body></html>"""
8   import xml.etree.ElementTree as etree
9   tree = etree.fromstring(dinner_recipe)
10  pantry = {"olive oil", "pesto"}
11  for ingredient in tree.getiterator("tr"):
12      amt, unit, item = ingredient
13      if item.tag == "td" and item.text not in pantry:
14          print("{}: {} {}".format(item.text, amt.text, unit.text))
Cost Taxon Location
0.25 call/composition 14
0 call/subroutine/method 9, 11
0 call/subroutine/method/sequence/string/format 14
0.875 condition/belonging/not 13
0.75 condition/equality 13
0 flow/conditional/no_else 13-14
0 flow/loop/exit/late 11-14
0 flow/loop/for 11-14
0.875 import/standard/xml.etree.ElementTree 8
0.375 operator/boolean/and 13
0 style/imperative 1-14
0.4375 type/non_sequence/set/literal 10
0 type/sequence/string 14
0 type/sequence/string/literal 10, 10, 11, 13, 14
0 type/sequence/string/literal/special/\n 1
0.1875 type/sequence/tuple/literal 12
0.09375 var/assignment/explicit/parallel/more_than_two 12
0 var/assignment/explicit/single 1, 9, 10
0.1875 var/assignment/implicit/iteration_variable 11
0 var/scope/global 1-14
0 meta/count/program/sloc/14 1-14
0 meta/count/variety/3 1-14
0 meta/program 1-14

Program 20_prime_numbers.py (learning cost 4.125)

1   import itertools
2   def iter_primes():
3       numbers = itertools.count(2)
4       while True:
5           prime = next(numbers)
6           yield prime
7           numbers = filter(prime.__rmod__, numbers)
8   for p in iter_primes():
9       if p > 1000:
10          break
11      print(p)
Cost Taxon Location
0 call/subroutine/builtin/filter 7
0 call/subroutine/builtin/next 5
0 call/subroutine/method/sequence_duck/count 3
0 call/subroutine/no_arguments 8
0.75 condition/inequality 9
0.125 def/subroutine/generator 2-7
0.1875 def/subroutine/parameter/no 2-7
0 flow/conditional/no_else 9-10
0 flow/loop/exit/early/break 8-11
0 flow/loop/exit/late 4-7
0 flow/loop/for 8-11
0 flow/loop/while/infinite 4-7
0.875 import/standard/itertools 1
0.375 style/functional_trait/filter 7
0.25 style/procedural 1-11
0.4375 type/boolean/literal/True 4
0.4375 type/number/integer/literal 3, 9
0.375 type/number/magic 9
0 type/sequence 3
0 var/assignment/explicit/single 3, 5, 7
0.1875 var/assignment/implicit/iteration_variable 8
0 var/scope/global 1-11
0.125 var/scope/local 2-7
0 meta/count/program/sloc/11 1-11
0 meta/count/subroutine/sloc/6 2-7
0 meta/count/variety/6 1-11
0 meta/program 1-11

Program 10_time.py (learning cost 4.5)

1   from time import localtime
2   activities = {
3       8: "Sleeping",
4       9: "Commuting",
5       17: "Working",
6       18: "Commuting",
7       20: "Eating",
8       22: "Resting",
9   }
10  time_now = localtime()
11  hour = time_now.tm_hour
12  for activity_time in sorted(activities.keys()):
13      if hour < activity_time:
14          print(activities[activity_time])
15          break
16  else:
17      print("Unknown, AFK or sleeping!")
Cost Taxon Location
0.25 call/composition 12
0 call/subroutine/builtin/sorted 12
0 call/subroutine/method/non_sequence/dictionary/keys 12
0 call/subroutine/no_arguments 10
0.75 condition/inequality 13
0 flow/conditional/no_else 13-15
0 flow/loop/exit/early/break/else 12-17
0 flow/loop/for 12-17
0.9375 import/standard/time/localtime 1
0 style/imperative 1-17
0.75 subscript/index 14
0.375 type/non_sequence/dictionary 12
0.4375 type/non_sequence/dictionary/literal 2
0.4375 type/number/integer/literal 3, 4, 5, 6, 7, 8
0.375 type/number/magic 3, 4, 5, 6, 7, 8
0 type/sequence/string/literal 3, 4, 5, 6, 7, 8, 17
0 var/assignment/explicit/single 2, 10, 11
0.1875 var/assignment/implicit/iteration_variable 12
0 var/scope/global 1-17
0 meta/count/program/sloc/17 1-17
0 meta/count/variety/5 1-17
0 meta/program 1-17

Program 12_classes.py (learning cost 5.046875)

1   class BankAccount(object):
2       def __init__(self, initial_balance=0):
3           self.balance = initial_balance
4       def deposit(self, amount):
5           self.balance += amount
6       def withdraw(self, amount):
7           self.balance -= amount
8       def overdrawn(self):
9           return self.balance < 0
10  my_account = BankAccount(15)
11  my_account.withdraw(50)
12  print(my_account.balance, my_account.overdrawn())
Cost Taxon Location
0.375 call/class/construct 10
0.25 call/composition 12
0 call/subroutine/method 11, 12
0.75 condition/inequality 9
0.25 def/class 1-9
0.125 def/subroutine/function 8-9
0.21875 def/subroutine/method/flavor/instance 2-3, 4-5, 6-7, 8-9
0.234375 def/subroutine/method/naming/magic/__init__ 2-3
0.1875 def/subroutine/parameter/arg 2, 2, 4, 4, 6, 6, 8
0.21875 def/subroutine/parameter/default/Num 2
0 def/subroutine/procedure 2-3, 4-5, 6-7
0.1875 def/subroutine/return/something 9
0.25 style/object_oriented 1-12
0.4375 type/number/integer/literal 10, 11
0.46875 type/number/integer/literal/zero 2, 9
0.375 type/number/magic 10, 11
0 var/assignment/explicit 3
0.09375 var/assignment/explicit/augmented/Add 5
0.09375 var/assignment/explicit/augmented/Sub 7
0 var/assignment/explicit/single 10
0.1875 var/assignment/implicit/parameter 2, 4, 6
0.21875 var/assignment/implicit/parameter/self 2, 4, 6, 8
0 var/scope/global 1-12
0.125 var/scope/local 2-3, 4-5, 6-7, 8-9
0 meta/count/class/methods/4 1-9
0 meta/count/program/sloc/12 1-12
0 meta/count/subroutine/sloc/2 2-3, 4-5, 6-7, 8-9
0 meta/count/variety/4 1-12
0 meta/program 1-12

Program 33_guess_the_number.py (learning cost 5.3125)

1   import random
2   guesses_made = 0
3   name = input("Hello! What is your name?\n")
4   number = random.randint(1, 20)
5   print("Well, {}, I am thinking of a number between 1 and 20.".format(name))
6   while guesses_made < 6:
7       guess = int(input("Take a guess: "))
8       guesses_made += 1
9       if guess < number:
10          print("Your guess is too low.")
11      if guess > number:
12          print("Your guess is too high.")
13      if guess == number:
14          break
15  if guess == number:
16      print("Good job, {}! You guessed my number in {} guesses!".format(name, guesses_made))
17  else:
18      print("Nope. The number I was thinking of was {}".format(number))
Cost Taxon Location
0.25 call/composition 5, 7, 16, 18
0 call/subroutine/builtin/casting/int 7
0 call/subroutine/builtin/input 3, 7
0 call/subroutine/method 4
0 call/subroutine/method/sequence/string/format 5, 16, 18
0.75 condition/equality 13, 15
0.75 condition/inequality 6, 9, 11
0 flow/conditional 15-18
0 flow/conditional/else 18
0 flow/conditional/no_else 9-10, 11-12, 13-14
0 flow/loop/exit/early/break 6-14
0 flow/loop/while 6-14
0.875 import/standard/random 1
0.9375 pattern/states/accumulate/count 6-14
0 style/imperative 1-18
0.375 type/number/integer 7
0.4375 type/number/integer/literal 4, 4, 6, 8
0.46875 type/number/integer/literal/zero 2
0.375 type/number/magic 4, 6
0 type/sequence/string 5, 16, 18
0 type/sequence/string/literal 5, 7, 10, 12, 16, 18
0 type/sequence/string/literal/special/\n 3
0.09375 var/assignment/explicit/augmented/Add 8
0 var/assignment/explicit/single 2, 3, 4, 7
0 var/scope/global 1-18
0 meta/count/program/sloc/18 1-18
0 meta/count/variety/4 1-18
0 meta/program 1-18

Program 14_median.py (learning cost 5.8125)

1   def median(pool):
2       copy = sorted(pool)
3       size = len(copy)
4       if size % 2 == 1:
5           return copy[int((size - 1) / 2)]
6       else:
7           return (copy[int(size / 2 - 1)] + copy[int(size / 2)]) / 2
Cost Taxon Location
0 call/subroutine/builtin/casting/int 5, 7, 7
0 call/subroutine/builtin/len 3
0 call/subroutine/builtin/sorted 2
0.875 condition/divisibility/parity 4
0.75 condition/equality 4
0.1875 def/subroutine/function/impure 1-7
0.1875 def/subroutine/parameter/arg 1
0.1875 def/subroutine/return/something 5, 7
0 flow/conditional 4-7
0 flow/conditional/else 7
0.375 operator/arithmetic/addition 7
0.375 operator/arithmetic/division 5, 7, 7, 7
0.375 operator/arithmetic/modulo 4
0.375 operator/arithmetic/substraction 5, 7
0.25 style/procedural 1-7
0.75 subscript/index 5, 7, 7
0.375 type/number/integer 5, 7, 7
0.4375 type/number/integer/literal 4, 4, 5, 5, 7, 7, 7, 7
0 var/assignment/explicit/single 2, 3
0.1875 var/assignment/implicit/parameter 1
0.125 var/scope/local 1-7
0 meta/count/program/sloc/7 1-7
0 meta/count/subroutine/sloc/7 1-7
0 meta/count/variety/2 1-7
0 meta/program 1-7

Summary

21 initially.
  1. 01_hello_world.py
  2. 02_input_name.py
  3. 03_friends.py
  4. 04_fibonacci.py
  5. 05_greet.py
  6. 06_regex.py
  7. 07_grocery_bill.py
  8. 08_arguments.py
  9. 09_indent.py
  10. 10_time.py
  11. 11_bottles.py
  12. 12_classes.py
  13. 13_unit_testing.py
  14. 14_median.py
  15. 15_itertools_groupby.py
  16. 16_csv.py
  17. 18_queens.py
  18. 20_prime_numbers.py
  19. 21_xml_html_parsing.py
  20. 28_queens.py
  21. 33_guess_the_number.py
19 remaining after operation 1 (impart) has filtered out 2 programs.
  1. 01_hello_world.py
  2. 02_input_name.py
18 remaining after operation 2 (exclude) has filtered out 1 program.
  1. 03_friends.py
12 remaining after operation 3 (exclude) has filtered out 6 programs.
  1. 07_grocery_bill.py
  2. 11_bottles.py
  3. 15_itertools_groupby.py
  4. 16_csv.py
  5. 18_queens.py
  6. 28_queens.py
10 remaining after operation 4 (include) has filtered out 2 programs.
  1. 05_greet.py
  2. 06_regex.py
10 remaining after operation 5 (hide) has filtered out 0 programs.