15 October 2020

Lab Practical Solutions

Show your solutions! You can paste them into chat and I can post them here so everyone can see them. I am hoping to see several solutions to each problem, some of which will be different. At the top of your code, put a comment with your name on it like so: hart21g.

Block B


#Anya Schrader
import re
def countWords(s):
    regex=r"\b"
    seeker=re.compile(regex)
    no_words=0
    for m in seeker.finditer(s):
        no_words+=1
    return no_words//2

#li
def countWords(s):
    """
        countWords("I eat cake") -> 3
        countWords("") -> 0
        countWords("0") -> 1
        countWords("To be or not to be, that is the question.") -> 10"""
    word_finder = re.compile(r"\w+")
    number = 0
    for word in re.findall(word_finder, s):
        number += 1
    return number


#yete
def countWords(s):
    
    return len(s.split())


# Melissa

def countWords(s):
   
    return s.count(" ")+1

# Carson
def countWords(s):
    x = s.split()
    if s.isspace() == True:
        return 0
    else: 
        return len(x)


#Melissa
def weaveStrings(s,t):
    
    new_string = ""
    
    for i in range(max(len(s), len(t))):
        
    if i < len(s):
            
    new_string += s[i]
        
    if i < len(t):
            
    new_string += t[i]
    
    return new_string

# Melissa

def isPerfectNumber(n):
    
    if n <= 2:
        
        return False
    
    else:
        
        sum = 0
        
        for i in range(1, n):
            
            if n%i == 0:
                
            sum += i
        
            if n == sum:
            
                return True
        
        else:
           
            return False

#Cliff
def wordCounter(s):
  counter = 1 
  for i in s:
    if i == " ":
      counter = counter + 1 
  return print(counter)


#Melissa

def checkFileForWord(fileName, word):
    
    found = False
    
    with open(fileName) as f:
        
    if word in f.read():
            
        found = True
    
        return found


From Alec Nipp to Everyone: (10:25 AM)
#Alec Nipp

def areAnagrams(s,t):
    
    """ s and t are strings
        
    return True if s and t are anagrams, case INSENSITIVE
        
    areAnagrams('space', 'Capes') -> True
        
    areAnagrams('spatter', 'parsers') -> False
        
    areAngrams('dog', 'log') -> False"""
    
    if len(s) != len(t):
        
        return False
    
    s = s.lower()
    
    t = t.lower()
    
    if countLetters(s) == countLetters(t):
        
        return True
    
    else:
        
        return False



        
def countLetters(s):
    
    """ s is a string
        
    returns a dictionary containing all letters as keys and their
        
    frequencies as the values"""
    
    counts = {}
    
    for char in s:
        
    if char in counts:
    
        for char in s:
        
    if char in counts:
            
    counts[char] += 1
        
    else:
            
        counts[char] = 1
    
    return counts


#messier
def weaveStrings(s,t):
    outstring = ""
    i = 0
    while len(s) > i and len(t) > i:
        outstring += s[i] + t[i]
        i += 1
    if len(s) == i:
        outstring += t[i:]
    elif len(t) == i:
        outstring += s[i:]
    return outstring



#li
def checkFileForWord(fileName, word):
    """
    fileName is a string
    if the file does not exist, return False
    if the file does exist, check for word being a
    substring of the file; if you find it return True and 
    return False otherwise"""
    if os.path.exists(fileName):
        with open(fileName) as f:
            return re.findall(word, f.read()) != []
    else:
        return False


#Rujula


import os


def checkFileForWord(fileName, word):
   
    
    existence=False

    
    if os.path.exists("fileName"):
        
        if os.path.isfile("fileName"):
            
            file=open("fileName","r")
            
            text=file.read()
            
            if word in text:
                
            existence=True
    
    return existence


#James
def weaveStrings(s,t):
    if len(s) > len(t):
        for x in range(len(t)):
            out += s[x] + t[x]
        out += s[len(t):]
    else:
        for x in range(len(s)):
            out += s[x] + t[x]
        out += t[len(s):]
    return out


#Timothy

def areAnagrams(s,t):
    
    s = s.lower()
    
    t = t.lower()
    
    if len(s) == len(t):
        
        for i in range(len(s)):
            
        if t.find(s[i]) == -1:
                
        return False
            
        t.replace(s[i],"",1)
        
        return True
    
    return False
  

#Rujula


def weaveStrings(s,t):
    
    
    if len(s)<=len(t):
        
        shorter=s
        
        longer=t
    
    else:
        
        shorter=t
        
        longer=s

    
        final=""
    
    counter=0

    
    for x in shorter:
        
        final+=s[counter]
        
        final+=t[counter]
        
        counter+=1

    
        final+=longer[counter:len(longer)]
    
    return final


#morrison
def areAnagrams(s,t):
    s = s.lower()
    t = t.lower()
    s = list(s)
    t = list(t)
    s.sort()
    t.sort()
    return s == t
print(areAnagrams("Morrison", "nosirrom"))





Block F


#pranet
def isPerfectNumber(n):
  return sumOfProperDivisors(n) == n

def sumOfProperDivisors(n):
  nl = []
  start = n//2
  for i in range(start, 0, -1):
    if n%i == 0:
      nl.append(i)
  return(sum(nl))

#warner
def isPerfectNumber(n):
    proper_divisors = []
    for i in range(1, n):
        if not n%i:
            proper_divisors.append(i)
    return sum(proper_divisors) == n


#Luke
def countWords(s):
    return len(s.split())


#Sophia
def areAnagrams(s,t): 
    if(not(len(s) == len(t))):
        
        return False
    
    for i in s:
        
        found = False
        
        for j in range(len(t)):
            
            if (i == t[j]) or (i.swapcase() == t[j]):
                
                t = t[:j] + t[j+1:]
                
                found = True
                
                break
        
        if(not(found)):
            
            return False
    
    return True


#morrison  I stink
def areAnagrams(s, t):
    s = s.lower()
    t = t.lower()
    s = list(s)
    t = list(t)
    s.sort()
    r.sort()
    return s == t

#Dhruv
def weaveStrings(s,t):
    longest = s if len(s) > len(t) else t
    shortest = s if longest == t else t
    return ''.join([f'{s[i]}{t[i]}' if i < len(shortest) else s[i] for i in range(len(longest))])


#pranet
def areAnagrams(s, t):
    init = 0
    s.lower()
    t.lower()
    s = list(s)
    t = list(t)
    if len(s) != len(t):
      return False
    length = math.factorial(len(s))
    for i in range(length):
        random.shuffle(s)
        if s == t:
        init += 1
        return True
    if init != 1:
        return False

#pollard
##smartest if the file is big.
def checkFileForWord(fileName, word):
    with open(fileName, "r") as fp:
        for line in fp:
            if word in line:
                return True
        return False


#warner
# Paul Warner
def isPerfectNumber(n):
    proper_divisors = []
    for i in range(1, n):
        if not n%i:   ##cookie woof
            proper_divisors.append(i)
    return sum(proper_divisors) == n

#pranet
def weaveStrings(s,t):
    nl = []
    for i in s:
        nl.append(i)
        for k in t:
            nl.append(k)
            t = t[1:]
            print(k)
            break
    return ''.join(nl)


#Adam
def weaveStrings(s,t):
    helpme=0
    myweave=""
    if s.len() > t.len():
        helpme=s.len()
    else:
        helpme=t.len()
    for i in range (0, helpme):
         if s.len()> helpme:
            weave+=s[i]
         if t.len()> helpme:
            weave+=t[i]
    return weave

#morrison
def weaveStrings(s,t)
    out = ""
    n = min(len(s), len(t))
    for k in range(n):
        out  += s[k] + t[k]
    out += s[n:] + t[n:]
    return out

#pittenger
def weaveStrings(s,t):
    if len(t) > len(s):
        s, t = t, s
    length = len(t)
    return ''.join(s[i] + t[i] for i in range(length)) + s[length:]

#sophia
def containsEmbeddedWord(word, searchField):

    j = 0
    
    for i in searchField:
        
        if (word[j] == i) or (word[j].swapcase() == i):
            
            j += 1
            
            if j == len(word):
                
                return True
    
    return False


# Paul Warner
#this is cute.
def areAnagrams(s,t):
    s = list(s.lower())
    t = list(t.lower())
    for char in s:
        if char in t:
            t.remove(char)
    return not t

#adam
 def countWords(s):
    shatter = s.split()
    return len(shatter)  #shatter.len()

#Luke
def areAnagrams(s,t):
    s_list = list(s.lower())
    t_list = list(t.lower())
    s_list.sort()
    t_list.sort()
    if s_list == t_list:
        return True
    else:
        return False

#Carl

# smart if file is not too big. 
imoprt os
def checkFileForWord(fileName, word):
    if os.path.exists(fileName):
        with open(fileName) as f:
            return word in f.read()
    else:
        return False

#Luke
def sumOfProperDivisors(n):
    divisors_sum = 0
    for i in range(1, n//2+1):
        if n % i == 0:
            divisors_sum += i
    return divisors_sum
def isPerfectNumber(n):
     if sumOfProperDivisors(n) == n:
        return True
    else:
        return False

# morrison
def sumOfProperDivisors(n):
    out = 0
    for k in range(1,n):
        if n%k == 0:
            out += k
    return out
def isPerfectNumber(n):
    return n == sumOfProperDivisors(n)

#vester
#Baeden Vester
def areAnagrams(s,t):
    if len(s) == len(t):
        for char in s.lower():
            if char not in t.lower():
                return False

        return True
    else:
        return False


#Chloe
def weaveStrings(s,t):
    sList = list(s)
    tList = list(t)
    weaveList = []
    counter = 0
    while counter < len(s):
        weaveList.append(s[counter])
        weaveList.append(t[counter])
        counter += 1
    finalString = ""
    for char in weaveList:
        finalString += char
    return finalString


#pittenger
#Carl Modified
def weaveStrings(s,t):
    s, t, n = s.lower(), t.lower(), min(len(s), len(t))
    return ''.join(s[i] + t[i] for i in range(n)) + s[n:] + t[n:]


#jimin yu: this is oily
import re
def containsEmbeddedWord(word, searchField):
    letters = list(word)
    regex = '.*'.join(map(re.escape, letters))
    return re.search(regex, searchField) is not None

# jimin: this is sordid
def areAnagrams(s,t):
    return (sorted(s.lower()) == sorted(t.lower()))

What Can I do with String (:45)

Stack, Heap, and Primitive vs. Object

Recall that there are two important areas of memory in a program, the stacka and the heap.

The heap is the data warehouse where objects are stored. The stack is the more limited area of memory where the call stack (works the same in Java and Python) lives.

So far we have seen the eight primitive types

TypeDescription
Integer Types
byte This is an 8-bit (one byte) integer.
shortThis is a two-bit integer
int This is a four-bit integer
longThis is an 8-bit integer.
Other Java Types
float This is an four-bit IEEE 754 floating point number.
doubleThis is an 8-bit IEEE 754 floating-point number. We will use this type for floating point numbers in this class.
boolean There are two boolean constants, true and false.
charThis Java's character type. It has some fluidity with int.

Variables of primitive type store their values directly; they do not store a memory address. The == operator checks for equality of this value.


jshell> int x = 5;
x ==> 5

jshell> int y = 5;
y ==> 5

jshell> x == y
$3 ==> true

You can use the == operator on primitive types to check for equality.

All local variables of primitive type live strictly on the stack inside of their stack frames. They do not point to anything on the heap.

Objects (such as our Point class live on the heap. They can contain primitive data as state.

Everything in Java that is not a primitive type is an Object type; in fact all data of Object type are Objects.. All objects live on the heap. Local variables of Object type do not store their objects directly. They store a JVM memory address (an integer no larger than 8 bytes) in the heap. This is how they "point" at their objects.

Typography Note The names of primitive types are all lower-case. The names of all Object types are capitalized. When you create a class, you are creating a new Object type. This is why you must capitalize class names; failure to do so confuses other programmers.

Primitive types do not have methods. Object types will have one or more methods. We will explore the String and Object types today.

Important Object Methods These are the Object methods we will concern ourselves with in this class.

  • public String toString() This method returns a String representation of an Object. As you saw in Point.java, you can override this for a class you are making. By default, this method returns ClassName@someHexDigits.
  • public boolean equals(Object o) This method checks to see if your object is ``equal'' to another object. By default, this is equality of identity (like Python's is). You can override it but don't forget to do the species test.
  • public int hashCode() This defines a hash code for an Object so it can be inserted into a hashed data structure. All Objects are hashable. This method can be overridden.