使用字典的成绩计算器

时间:2019-03-01 00:10:49

标签: python

给出的数组是...

grade_scale = {
    'A+': {'low': 96, 'high': 100, 'gpa': 4.0},
    'A': {'low': 93, 'high': 95, 'gpa': 4.0},
    'A-': {'low': 90, 'high': 92, 'gpa': 3.7},
    'B+': {'low': 86, 'high': 89, 'gpa': 3.3},
    'B': {'low': 83, 'high': 85, 'gpa': 3.0},}

student123 = {
  "id": "smith123",
  "classes" : [
    {"name": "stats 100",   "points": 88, "credits": 4},
    {"name": "cs 101",      "points": 92, "credits": 3},
    {"name": "history 101", "points": 91, "credits": 3},
    {"name": "Pysch 201",   "points": 86, "credits": 4},
  ]
}

请支持我的编码,我是编码语言的新手。 我的直觉是创造:

def get_letter_grade_v1(grade_scale, gpa):
  for (grade, data) in grade_scale.items():
    if gpa >= data['gpa']:
      return grade
    elif gpa <= data['gpa']:
      return 

    else: 
      return 'D'
#print(get_letter_grade_v1(grade_scale, 3.47))

我似乎无法在没有更多损失的情况下走得更远。它是一个具有两个参数grade_scale和gpa(按此顺序)的函数,它返回字母等级。如果gpa太低以至于低于1.7,则返回“ D”。

2 个答案:

答案 0 :(得分:0)

只要给定的grade达到要迭代的等级的标准,就应该返回gpa,只有在循环结束且没有返回值时才返回D

def get_letter_grade_v1(grade_scale, gpa):
    for grade, data in grade_scale.items():
        if gpa >= data['gpa']:
            return grade
    return 'D'

答案 1 :(得分:0)

其他人已经指出了您的import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.StringTokenizer; /** * * @author bashizip */ public class KannelLogsParser { static String fileName; /** * @param args the command line arguments */ public static void main(String[] args) throws IOException { // fileName = args[0]; fileName = "access_kannel.txt"; String allLines = readLines(fileName); parseAndWriteToCsv(allLines); } static String readLines(String fileName) { BufferedReader br = null; String sCurrentLine = null; StringBuilder sb = new StringBuilder(); try { br = new BufferedReader( new FileReader(fileName)); while ((sCurrentLine = br.readLine()) != null) { sb.append(sCurrentLine).append("\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return sb.toString(); } private static void parseAndWriteToCsv(String allLines) throws IOException { String[] lines = allLines.split("\n"); System.out.println("lines to parse : " + lines.length); StringTokenizer st; StringBuilder output = new StringBuilder(); output.append("DATE;Heure;sent;SMS; SMSC; SVC; ACT; BINF; FID; from; to; flags; msg;;udh"+"\n"); int count = 0; for (String line : lines) { count++; System.out.println("Parsing ..." + 100 * count / lines.length + "%"); st = new StringTokenizer(line, " "); while (st.hasMoreTokens()) { String currentToken = st.nextToken(); boolean messageToken = false; boolean afterMessageToken = false; if (currentToken.startsWith("[")) { System.out.println(currentToken); messageToken = currentToken.startsWith("[msg"); try { currentToken = currentToken.substring(currentToken.indexOf(":") + 1, currentToken.indexOf("]")); } catch (Exception e) { System.err.println(e.getMessage()); messageToken = true; currentToken = currentToken.substring(currentToken.indexOf(":") + 1); } } currentToken = currentToken.replace("[", ""); currentToken = currentToken.replace("]", ""); output.append(currentToken); if (!messageToken) { output.append(";"); } else if (afterMessageToken) { afterMessageToken = false; output.append(" "); } else { output.append(" "); afterMessageToken = true; } } output.append("\n"); } Files.write(Paths.get(fileName + ".csv"), output.toString().getBytes()); System.out.println("Output CVS file: " + fileName + ".csv"); System.out.println("Finished !"); } } 语句中的缺陷。您还有另一个大问题,即将错误的值传递给函数。您需要将分数而不是GPA转换为字母。

此外,根据您的Python版本,您可能无法按预期的顺序迭代dict元素。为了安全起见,请检查范围的两端。

if

输出:

student123 = {
  "id": "smith123",
  "classes" : [
    {"name": "stats 100",   "points": 88, "credits": 4},
    {"name": "cs 101",      "points": 92, "credits": 3},
    {"name": "history 101", "points": 91, "credits": 3},
    {"name": "Pysch 201",   "points": 86, "credits": 4},
    {"name": "XYZ 864",     "points": 66, "credits": 1},
  ]
}

def get_letter_grade_v1(grade_scale, gpa):
  for (grade, data) in grade_scale.items():
    if data['low'] <= gpa <= data['high']:
      return grade

  return 'D'


for course in student123["classes"]:
    print(course["name"], get_letter_grade_v1(grade_scale, course["points"]))