User:Alice/Code Exercises: Difference between revisions

From XPUB & Lens-Based wiki
No edit summary
No edit summary
Line 8: Line 8:




<code>
<source lang=python>
  for word in separated:
  for word in separated:
         word = word.lower() + '\n'
         word = word.lower() + '\n'


</code>
</source>




Line 18: Line 18:




<code>
<source lang=python>
def test_seven():
def test_seven():
     assert seven('Baboons') == 'babushkas'
     assert seven('Baboons') == 'babushkas'
</code>
</source>




Line 27: Line 27:




<code>
<source lang=python>
def seven(sentence):
def seven(sentence):
     fpath = open('91K nouns.txt')
     fpath = open('91K nouns.txt')
Line 57: Line 57:
     assert seven('Baboons,') == 'babushkas'
     assert seven('Baboons,') == 'babushkas'


</code>
</source>


=== Python exercise inspired by the work of Carl Andre ===
=== Python exercise inspired by the work of Carl Andre ===
[[File: Andre-poems-18.jpg]]
<gallery style="float:right;" mode=nolines widths=520px heights=520px>
File:Andre-poems-18.jpg
</gallery>
 
I wrote a script that would turn a list of words of different lengths into a pattern similar to the one Carl Andre typed by hand with a typewriter.
So far, all the tests pass. When receiving as input a long list of words, it raises a ValueError, which means it still needs debugging...
<source lang=python>
 
import pytest
from math import ceil
 
 
def grabber(words, numgrab):
    grabbedwords = []
    for number in range(numgrab):
        grabbedwords.append(words.pop(0))
    return (grabbedwords, words)
 
 
def pattern(words, maxlength):
    goodwords = []
    for word in words:right_one = ['a', 'aa', 'aaa', 'aa', 'a', 'b', 'bb', 'bbb', 'bb', 'b']
        if len(word) <= maxlength:
            goodwords.append(word)
 
    items_pattern = maxlength + (maxlength -1)
    if len(goodwords) % items_pattern != 0:
        raise ValueError
 
    times = int(len(words) / items_pattern)
    final_pattern = []
    for each_time in range(times):
        grabbed, whatisleft = grabber(goodwords, items_pattern)
        goodwords = whatisleft
        middle = ceil(len(grabbed)/2)
        sorted_pattern = (
            sorted(grabbed[:middle]) +
            sorted(grabbed[middle:], reverse=True)
        )
        final_pattern.append(sorted_pattern)
 
    return final_pattern
 
def test_pattern_returns_list():
    assert type(pattern(['a', 'b', 'c', 'd', 'e'], 3)) == type([])
 
def test_pattern_removes_over_max_len():
    right_one = [['a', 'aa', 'aaa', 'aa', 'a']]
    assert pattern(right_one[0] + ['aaaaa'], 3) == right_one
 
def test_pattern_too_short_wont_work():
    with pytest.raises(ValueError):
        pattern(['a', 'aa'], 3)
 
def test_grabber():
    assert grabber(['a', 'aaa'], 1) == (['a'], ['aaa'])
 
def test_two_patterns():
    right_one = ['a', 'aa', 'aaa', 'aa', 'a', 'b', 'bb', 'bbb', 'bb', 'b']
    result = [['a', 'aa', 'aaa', 'aa', 'a'], ['b', 'bb', 'bbb', 'bb', 'b']]
    assert pattern(right_one, 3) == result
</source>

Revision as of 10:25, 28 January 2018

Oulipo exercise

Improved the N + 7 code we wrote in Prototyping, by debugging and adding some tests. Work in progress.

Improvements

Bug example: the for loop was skipping capitalized words, because it could not find them in the input file with nouns.

To fix, I added the lower method for strings to turn all text to lowercase.


 for word in separated:
        word = word.lower() + '\n'


To test it, I added a test.


def test_seven():
    assert seven('Baboons') == 'babushkas'


Full script (in progress)


def seven(sentence):
    fpath = open('91K nouns.txt')
    nouns = fpath.readlines()
    separated = sentence.split()    
    #print(separated)
    new_separated = []
    for word in separated:
        word = word.lower() + '\n'
        if word in nouns:
            position = nouns.index(word)
            new_word = nouns[position + 7]
            #print(" replacing", new_position)
            new_separated.append(new_word.strip())
        else:
            #print("notinlist")
            #print("adding to new_separated ", word)
            new_separated.append(word.strip())
    #print(new_separated)
    return ' '.join(new_separated)

#sentence = input('What is your sentence? ')
#seven(sentence)

# pytest requires that you name your tests with test_<your-name>
# run with the 'pytest' command in your terminal
def test_seven():
    assert seven('Baboons') == 'babushkas'
    assert seven('Baboons,') == 'babushkas'

Python exercise inspired by the work of Carl Andre

I wrote a script that would turn a list of words of different lengths into a pattern similar to the one Carl Andre typed by hand with a typewriter. So far, all the tests pass. When receiving as input a long list of words, it raises a ValueError, which means it still needs debugging...

import pytest
from math import ceil


def grabber(words, numgrab):
    grabbedwords = []
    for number in range(numgrab):
        grabbedwords.append(words.pop(0))
    return (grabbedwords, words)


def pattern(words, maxlength):
    goodwords = []
    for word in words:right_one = ['a', 'aa', 'aaa', 'aa', 'a', 'b', 'bb', 'bbb', 'bb', 'b']
        if len(word) <= maxlength:
            goodwords.append(word)

    items_pattern = maxlength + (maxlength -1)
    if len(goodwords) % items_pattern != 0:
        raise ValueError

    times = int(len(words) / items_pattern)
    final_pattern = []
    for each_time in range(times):
        grabbed, whatisleft = grabber(goodwords, items_pattern)
        goodwords = whatisleft
        middle = ceil(len(grabbed)/2)
        sorted_pattern = (
            sorted(grabbed[:middle]) +
            sorted(grabbed[middle:], reverse=True)
        )
        final_pattern.append(sorted_pattern)

    return final_pattern

def test_pattern_returns_list():
    assert type(pattern(['a', 'b', 'c', 'd', 'e'], 3)) == type([])

def test_pattern_removes_over_max_len():
    right_one = [['a', 'aa', 'aaa', 'aa', 'a']]
    assert pattern(right_one[0] + ['aaaaa'], 3) == right_one

def test_pattern_too_short_wont_work():
    with pytest.raises(ValueError):
        pattern(['a', 'aa'], 3)

def test_grabber():
    assert grabber(['a', 'aaa'], 1) == (['a'], ['aaa'])

def test_two_patterns():
    right_one = ['a', 'aa', 'aaa', 'aa', 'a', 'b', 'bb', 'bbb', 'bb', 'b']
    result = [['a', 'aa', 'aaa', 'aa', 'a'], ['b', 'bb', 'bbb', 'bb', 'b']]
    assert pattern(right_one, 3) == result