comp-think/2018-2019

Lecture "Programming languages", exercise 3

Opened this issue · 19 comments

Following the template in Listing 11, write in Python the algorithm proposed originally in Figure 4 of the lecture notes entitled "Algorithms" as a flowchart, and accompany such code with the related test function and some executions with different input values.

def test_find_words(first_word, second_word, bib_entry, expected):
    result = find_words(first_word, second_word, bib_entry)
    if result == expected:
        return True
    else:
        return False

def find_words(first_word, second_word, bib_entry):
    result = 0
    if first_word in bib_entry:
        result += 1
        if second_word in bib_entry:
            result += 1
            return result
        else:
            return result
    elif second_word in bib_entry:
        result += 1
        return result
    else:
            return result

print(test_find_words("poema", "storni", "los poemas de Alfonsina Storni", 2)
print(test_find_words("delfina", "sol", "delfina sol martinez pandiani", 2)
print(test_find_words("complexity", "trick", "A few complex tricks to simplify", 1)

I tried but I am not sure.

def test_contains_words (first_word, second_word, bib_entry, expected):
    result = contains_words (first_word, second_word, bib_entry)
    if result == expected:
        return True
    else:
        return False

def contains_words (first_word, second_word, bib_entry):
    if first_word in bib_entry and second_word in bib_entry:
        return 2
    else:
        (first_word in bib_entry or second_word in bib_entry)
        return 1
    if first_word not in bib_entry and second_word not in bib_entry:
        return 0

print(test_contains_words("Peroni", "HTML", "Peroni, S., Osborne, F., Di Iorio, A., Nuzzolese, A. G., Poggi, F., Vitali, F., Motta, E. (2017). Research Articles in Simplified HTML: a Web-first format for HTML-based scholarly articles. PeerJ Computer Science 3: e132. e2513. DOI: https://doi.org/10.7717/peerj-cs.132", 2))
print(test_contains_words("Peroni", "HTML", "Peroni, S., Osborne, F., Di Iorio, A., Nuzzolese, A. G., Poggi, F., Vitali, F., Motta, E. (2017). Research Articles in Simplified HTML: a Web-first format for HTML-based scholarly articles. PeerJ Computer Science 3: e132. e2513. DOI: https://doi.org/10.7717/peerj-cs.132", 1))
print(test_contains_words("Peroni", "HTML", "Peroni, S., Osborne, F., Di Iorio, A., Nuzzolese, A. G., Poggi, F., Vitali, F., Motta, E. (2017). Research Articles in Simplified HTML: a Web-first format for HTML-based scholarly articles. PeerJ Computer Science 3: e132. e2513. DOI: https://doi.org/10.7717/peerj-cs.132", 0))

`
def test_contains_word(first_word, second_word, bib_entry, expected):
result = contains_word(first_word, second_word, bib_entry)
if expected == result:
return True
else:
return False

def contains_word(first_word, second_word, bib_entry):
result = 0

if first_word in bib_entry and second_word in bib_entry:
    return result + 2
elif first_word in bib_entry or second_word in bib_entry:
    return result + 1
else:
    return result

print(contains_word("Problem", "Solving", "Miller, B. N., Ranum, D. L. (2011). Problem Solving with Algorithms and Data Structures using Python") output = 2
print(contains_word("Development", "Programming", " Beck, K. (2003). Test-Driven Development by Example. Addison Wesley") output = 1 `

def test_words(first_word, second_word, bib_entry, expected_result):
result = words(first_word, second_word, bib_entry)

if result == expected_result:
return True
else:
return False

def words(first_word, second_word, bib_entry):
contains_first_word = first_word in bib_entry
contains_second_word = second_word in bib_entry
result = 0

if contains_first_word:
result += 1
if contains_second_word:
result += 1
return result
else:
return result
if contains_second_word:
result +=1
return result
else:
return result

print(test_words("move", "sole", "amor che move il sole", 2))
print(test_words("mani", "sera", "queste tue mani a difesa di te", 1))
print(test_words("anima", "bicicletta", "ho sceso dandoti", 0))

def test_contains_word (first_word, second_word, bib_entry, expected):
result = contains_word (first_word, second_word,bib_entry)
if expected == result :
return True
else :
return False

def contains_word (first_word, second_word, bib_entry) :
result_value = 0
contains_first_word = first_word in bib_entry
contains_second_word = second_word in bib_entry
if contains_first_word and contains_second_word :
return result_value + 2
elif contains_first_word or contains_second_word :
return result_value + 1
else:
return result_value

print (test_contains_word ("a", "b", "abcd", 2))
print (test_contains_word ("a", "b", "acde", 1))
print (test_contains_word ("a", "b", "cdef", 0))

def test_words_in_bib(word1, word2, bibentry, expected):
    result = words_in_bib(word1, word2, bibentry)

    if expected == result:
        return True
    else: 
        return False


def words_in_bib(word1, word2, bibentry):
    result = 0

    if word1 in bibentry:
        result = result + 1
    if word2 in bibentry:
        result = result + 1

    return result
    
print(test_words_in_bib("Pink", "Floyd", "Pink Floyd were an English rock band", 2))
print(test_words_in_bib("Pink", "Monkeys", "Arctic Monkeys are an English rock band", 1))
print(test_words_in_bib("bau", "Stelle", "Baustelle is an indie rock band from Siena, Italy", 2))

First and second test calls return True, the last one is False (the words are not found in bibentry due to case sensitiveness)

def test_contains_word (first_word, second_word, bib_entry, expected_result)
result= contains_word (first_word, second_word, bib_entry)
if expected == result
return True
else:
return False

def contains_word (first_word, second_word, bib_entry)
contains_first_word = first_word in bib_entry
contains_second_word = second_word in bib_entry

if contains_first_word and contains_second_word
return 2
elif contains_first_word or contains_second_word
return 1
else:
return 0

print (test_contains_word ("cura", "opera", "L'opera d'arte nell'epoca della sua riproducibilità tecnica (2012)/ W. Benjamin; a cura di F. Desideri"), 2)
print (test_contains_word ("cura", "opera", "Minima culinaria (2015)/ Z. Ciuffoletti; a cura di C. Costagli"), 1)
print (test_contains_word ("cura", "opera", "Il piccolo principe (1981)/ A. de Saint-Exupéry"), 0)

	result = contains_word(first_word, second_word, bib_entry)
	if expected == result:
		return True
	else:
		return False
		
def contains_word(first_word, second_word, bib_entry):
	contains_first_word = first_word in bib_entry
	contains_second_word = second_word in bib_entry
	result = 0
	if contains_first_word and contains_second_word:
		result += 2
		return result
	elif contains_first_word or contains_second_word:
		result +=1
		return result
	else:
		return result

print(test_contains_word("h", "i", "hiii", 2))
print(test_contains_word("h", "k", "hiii", 1))
print(test_contains_word("l", "m", "hiii", 0))

def  test_contains_word(first_word, second_word, bib_entry, expected):
result = contains_word(first_word, second_word, bib_entry)
if expected == result:
return True
else:
return False
 
def  contains_word(first_word, second_word, bib_entry):
contains_first_word = first_word in bib_entry
contains_second_word = second_word in bib_entry
result_value = 0

   if contains_first in bib_entry:
      result_value= +1
      return result
   elif contains_second_word:
         result_value = +1
         return result
  else:
        return result_value

 
print(test_contains_word("food", "craft", "eat food", 1))
print(test_contains_word("craft", "art", "craft chair", 1))
print(test_contains_word("food", "craft", "enjoy living", 0))

#Following the template in ​Listing 11,​ write in Python the algorithm proposed originally ​in
#Figure 4 of the lecture notes entitled "Algorithms" as a flowchart, and accompany such code 
#with the related test function and some executions with different input values

def test_thereader(string1, string2, string3, expected):
    result = thereader(string1, string2, string3)
    
    if expected == result: 
        return True
    else:
        return False
    
def thereader(string1, string2, string3):
    result = 0
    
    if string1 and string2 in string3:
       result = result + 2
    
    elif string1 or string2 in string3:
            result = result + 1
    
    else:
       result = result
       
       
    return result
    
print(test_thereader("a", "b", "abcd", 2))
print(test_thereader("a", "d", "abce", 1))
print(test_thereader("c", "e", "abcd", 1))

True
True
True

def test_match_words (first_word, second_word, bib_entry, expected):
    result = match_words (first_word, second_word, bib_entry)
    if result == expected:
        return True
    else:
        return False

def match_words (first_word, second_word, bib_entry):
    result = 0

    if first_word in bib_entry:
        result += 1
    if second_word in bib_entry:
        result += 1

    return result

print(test_match_words("heart", "gold", "I've been a miner for a heart of gold", 2))
print(test_match_words("Martin", "Heidegger", "I'm sitting here reading Heidegger and hoping this water will boil", 1))
print(test_match_words("Pavese", "1945", "Hai viso di pietra scolpita, sangue di terra dura, sei venuta dal mare", 0))
def test_flowchart(term_1, term_2, bib_entry, expected): 
    result = flowchart(term_1, term_2, bib_entry)
    if result == expected:
        return True 
    else:
        return False

def flowchart(term_1, term_2, bib_entry): 
    result_value = 0
    if term_1 in bib_entry: 
        result_value = result_value + 1
    if term_2 in bib_entry:
        result_value = result_value + 1
    return result_value

print(test_flowchart("ab","cd","abcd",2)) 
print(test_flowchart("ab","cd","abef",1))
print(test_flowchart("ab","cd","xycd",1)) 
print(test_flowchart("ab","cd","xyz",0))

I had some problems with the correct syntax of summing something to the variable. But I checked it and now it works.

P.S. I think that we don't need a "If... else" statement here, we don't have an alternative set of instruction if the first if is false, the only thing that we have to do is going on to the next one.

def test(first_word, second_word, bib_entry, expected):
result = istheretheword (first_word, second_word, bib_entry)

    if expected == result:
        
        return True
    
    else:
        
        return False

def istheretheword (first_word, second_word, bib_entry):
    x = first_word in bib_entry
    y = second_word in bib_entry
    result = 0
    
    if x:
       result += 1
    if y:
       result += 1

           return result
    
  print(test("a", "b", "abcd", 2))

  print(test("a", "b", "acde", 1))
  print(test("a", "b", "cdef", 0))

def test_find_words(first_word, second_word, bib_entry, expected):

result = contains_word(first_word, second_word, bib_entry)

if result == expected:
return True
else:
return False

def contains_words(first_word, second_word, bib_entry):
result = 0
If first_word in bib_entry:
result +=1
return result

If second_word in bib_entry:
result +=1
return result

else:
return result

elif second_word in bib_entry:

result += 1
return result
else:
return result

print(test_words("Peroni", "HTML", "Peroni, S., Osborne, F., Di Iorio, A., Nuzzolese, A. G., Poggi, F., Vitali, F., Motta, E. (2017). Research Articles in Simplified HTML: a Web-first format for HTML-based scholarly articles. PeerJ Computer Science 3: e132. e2513. DOI: https://doi.org/10.7717/peerj-cs.132))

True, output 2

print(test_words)(“Mesmerizing”, “Miracle”, “Mesmerizing Ghost Doctor”))

True, output 1

def test_<text_contains_words>(<word1, word2, bib-entry>, expected):
result = (<word1, word2, bib-entry>)
if result == expected:
return True
else:
return False

def <text_contains_words>(<word1, word2, bib-entry>):
If word1 in bib_entry:
return 1
If word 2 in bib_entry:
return 1
If word1 and word2 in bib_entry:
return 2
else
return 0

print(test_<text_contains_words>("Ada", "of", "Ada Lovelace was the daughter", 1))
print(test_<text_contains_words>("Ada", "Lovelace", "Ada Lovelace was the daughter", 2))
print(test_<text_contains_words>("cat", "dog", "Ada Lovelace was the daughter", 0))

def test_containing_word(firstword, secondword, bibentry, expected):
result = test_containing_word(firstword, secondword, bibentry)

if result == expected:
return True
else:
return False

def test_containing_word (firstword, secondword, bibentry):
return = 0

if firstword and secondword:
result 2
return result
if firstword or secondword:
result 1
return result
else:
return result

print(test_containing_word("linguistics", "Alan", "Davies, Alan, and Catherine Elder, eds. The handbook of applied linguistics. John Wiley & Sons, 2008.", 2))
print(test_containing_word("linguistics", "Alan", "Church, Kenneth W., and Robert L. Mercer. "Introduction to the special issue on computational linguistics using large corpora." Computational linguistics 19.1 (1993): 1-24.", 1))
print(test_containing_word("linguistics", "Alan", "Chowdhury, Gobinda G. "Natural language processing." Annual review of information science and technology 37.1 (2003): 51-89.", 0))

def contains_word(first_word, second_word, bib_entry):
contains_first_word = first_word in bib_entry
contains_second_word = second_word in bib_entry
if contains_first_word and contains_second_word:
return 2
elif contains_first_word or contains_second_word:
return 1
else:
return 0
def test_contains_word(first_word, second_word, bib_entry, expected):
result = contains_word(first_word, second_word, bib_entry)
if expected == result:
return True
else:
return False
print(contains_word("Shakespeare", "Sogno", "Sogno di una notte di mezz'estate, Shakespeare"))
print(contains_word("Shakespeare", "la", "la locandiera, Goldoni"))
print(contains_word("Sakespeare", "Giulietta", "Capuleti e Montecchi, Bellini"))

Hi all,

Thanks for your comment. The idea of the exercise is just to convert literally the various widgets in the flowchart as proper constructs in Python. In particular – since several of you have done that – you should not use more than one result statements, because in the flowchart only one output widget is actually used.

The solution of the exercise is shown as follows - and it is also available as Python file in the GitHub repository:

# Test case for the algorithm
def test_contains_word(first_word, second_word, bib_entry, expected):
    result = contains_word(first_word, second_word, bib_entry)
    if expected == result:
        return True
    else:
        return False


# Code of the algorithm
def contains_word(first_word, second_word, bib_entry):  # input/output: input two words and a bibliographic entry
    result = 0  # process: initialize the result value to 0

    if first_word in bib_entry:  # decision: the first word is in the bibliographic entry
        result = result + 1  # process: sum 1 to the result value

    if second_word in bib_entry:  # decision: the second word is in the bibliographic entry
        result = result + 1  # process: sum 1 to the result value

    return result  # input/output: return the result value


# Three different test runs
print(test_contains_word("a", "b", "abcd", 2))
print(test_contains_word("a", "b", "acde", 1))
print(test_contains_word("a", "b", "cdef", 0))