Skip to content

Instantly share code, notes, and snippets.

@dpritchett
Created May 10, 2012 18:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dpritchett/2655066 to your computer and use it in GitHub Desktop.
Save dpritchett/2655066 to your computer and use it in GitHub Desktop.
; Instructions:
; Execute (calculate-grade-from-user-input)
(defn average
[coll]
(/ (reduce + coll) (count coll) 1.0))
(defn collect-test-scores
[]
(loop [lines []]
(if-let [[line & rest]
(do (println (str "Test score " (inc (count lines)) "?"))
(seq (filter #(not (clojure.string/blank? %)) [(read-line)])))]
(recur (conj lines line))
(map #(Integer/parseInt %) lines))))
(def cutoffs
[[95 "A+"] [90 "A-"]
[85 "B+"] [80 "B-"]
[75 "C+"] [70 "C-"]
[65 "D+"] [60 "D-"]
[0 "F"]])
(defn letter-grade
[average]
(second
(first
(filter #(<= (first %) average) cutoffs))))
(defn collect-user-input
[]
(let [username (do (println "User name? ") (read-line))
scores (collect-test-scores)]
[username scores]))
(defn calculate-grade-from-user-input
[]
(let [[username scores] (collect-user-input)
average-score (average scores)]
(format "User: %s Grade: %s Average: %2.1f"
username
(letter-grade average-score)
average-score)))
def grade_solver():
cutoffs = [[95, "A+"], [90, "A-"],
[85, "B+"], [80, "B-"],
[75, "C+"], [70, "C-"],
[65, "D+"], [60, "D-"],
[0, "F"]]
scores = []
temp_score = '###'
username = raw_input("Name please: ")
while temp_score:
temp_score = raw_input("Test score %d: " % (len(scores) + 1))
if temp_score:
scores.append(float(temp_score))
average = sum(scores) / len(scores)
for minimum, letter in cutoffs:
if average > minimum:
return "%s earned a %s with a %2.1f average." % (username, letter, average)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment