给出的数组是...
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”。
答案 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"]))