Looping Numbers |
sumFromZeroToN |
def sumFromZeroToN(n):
if n < 0:
return 0
answer = 0
for i in range(1,n+1):
answer += i
return answer
# or you can use a mathematical formula (but don't) |
sumAtoB |
def sumAtoB(a,b):
if a > b:
return 0
answer = 0
for i in range(a,b+1):
answer += i
return answer |
fiveSumFromZeroToN |
def fiveSumFromZeroToN(n):
if n < 0:
return 0
answer = 0
for i in range(5,n+1,5):
answer += i
return answer |
specialSumInclusive |
def specialSumInclusive(n):
answer = 0
for q in range(1,n+1):
if q%3 == 0 or q%5 == 0:
answer += q
return answer |
specialSumExclusive |
def specialSumExclusive(n):
answer = 0
for i in range(n+1):
if i%5 == 0 and i%7==0:
answer += i
return answer |
sumOfFirstNSquares |
def sumOfFirstNSquares(n):
answer = 0
for i in range(n+1):
answer += i*i
return answer |
sumSquaresBetween |
# Straightforward way:
def sumSquaresBetween(a,b):
answer = 0
for i in range(a,b+1):
if isPerfectSquare(i):
answer += i
return answer
def isPerfectSquare(n):
return int(n**.5) == n**.5
# -----------------------
# or a faster way:
def sumSquaresBetween(a,b):
answer = 0
i = int(a**.5) # may be too small
while True:
sq = i*i
if a <= sq <= b:
answer += sq
if sq > b:
break
i+=1
return answer |
sumOfPowers |
# Straightforward way:
def sumOfPowers(n):
answer = 0
for x in range(2,n+1):
a = x
# test if a is a power of 2
while a > 1:
a = a / 2.0
if a == 1:
answer += x
return answers
# ------------------------
# or a faster way:
def sumOfPowers(n):
answer = 0
if n < 2:
return 0
exp = 1
while True:
power2 = 2 ** exp
if power2 <= n:
answer += power2
else:
break
exp += 1
return answer |
Looping over digits |
sumDigits |
def sumDigits(n):
n = abs(n)
answer = 0
while n > 0:
answer += n%10 #add in the ones digit
n //= 10
return answer
# ---------------------
# or, using the string representation
of n
def sumDigits(n):
n = abs(n)
answer = 0
for c in str(n):
answer += int(c)
return answer |
countDigits |
def countDigits(n):
c = abs(n)
return len(str(c)) |
countOddDigits |
def countOddDigits(n):
n = abs(n)
answer = 0
for c in str(n):
if int(c)%2 == 1:
answer += 1
return answer |
countPrimeDigits |
def countPrimeDigits(n):
answer = 0
s = str(abs(n))
for c in s:
if c in '2357':
answer += 1
return answer |
Strings and Loops |
countLetter |
def
countLetter(string,letter):
answer = 0
for c in string:
if c == letter:
answer += 1
return answer |
findLetter |
def
findLetter(original,letter):
for i in range(len(original)):
if original[i] == letter:
return i
return -1 |
findWord |
def
findWord(original,word):
q = len(word)
for i in range(len(original)):
if original[i:i+q] == word:
return i
return -1 |
countWord |
def
countWord(original,word):
if word not in original:
return 0
q = len(word)
answer = 0
for i in range(len(original)):
if original[i:i+q] == word:
answer += 1
return answer |
isVowel |
# re-use findLetter()
from above
def isVowel(s):
return len(s)==1 and
findLetter('aeiouAEIOU',s) != -1 |
countVowels |
# re-use isVowel()
from above
def countVowels(s):
answer = 0
for c in s:
if isVowel(c):
answer += 1
return answer |
noVowels |
# re-use isVowel()
from above
def noVowels(s):
answer = ''
for c in s:
if not isVowel(c):
answer += c
return answer |
isConsonant |
# re-use isVowel()
from above
def isConsonant(c):
return len(c) == 1 and isAlpha(c) and
not isVowel(c)
def isAlpha(c):
return ('a' <= c <= 'z') or ('A' <= c
<= 'Z') |