go - 创建 GPA 计算器时遇到问题
问题描述
我想做一个 GPA 计算器,它首先要求用户输入他们本学期的总学分。我做到了。然后我想将总主题作为用户的输入,我也可以这样做。但现在真正的问题来了。我想以下列形式从用户那里获取输入:- “数学”:“A”,“物理”:“B” 然后计算 GPA 我想从相应的成绩进行以下转换,例如 S = 10,A = 9, B = 8, C = 7 并用它来计算他们的 GPA
GPA = 总分 { 科目学分 * 各年级分数} / 总学分
因此,如果一个学生有 2 门数学和物理,数学的学分是 4,他的分数是 S,物理的学分是 3,他的分数是 C,那么 GPA 将是:-
GPA = 4(数学学分)* 10(S 成绩)+ 3(物理学分)* 7(C 成绩)/ 7(总学分)
下面的代码: -
package main
import "fmt"
var gpa float64
func main() {
// Schema
var totalCredit float64
var totalSubjects int
var letterGrade string
var credit float64
var score float64
var totalScore float64
// Takes value of credits and subjects from user
fmt.Print("Enter total credits")
_, _ = fmt.Scan(&totalCredit)
fmt.Print("Enter total number of subjects")
_, _ = fmt.Scan(&totalSubjects)
n := totalSubjects
for i:=0; i < n; i++ {
fmt.Println("Enter letterGrade")
_, _ = fmt.Scanf("%s", &letterGrade)
fmt.Println("Enter credits")
_, _ = fmt.Scan(&credit)
if letterGrade == "S" || letterGrade == "s" {
score = credit * 10
} else if letterGrade == "A" || letterGrade == "a" {
score = credit * 9
} else if letterGrade == "B" || letterGrade == "b" {
score = credit * 8
} else if letterGrade == "C" || letterGrade == "c" {
score = credit * 7
} else if letterGrade == "D" || letterGrade == "d" {
score = credit * 6
} else if letterGrade == "E" || letterGrade == "e" {
score = credit * 5
} else if letterGrade == "F" || letterGrade == "f" {
score = credit * 0
}
totalScore += score
}
gpa = totalScore / totalCredit
fmt.Println(gpa)
}
我想在 GO 中使用 OOP 创建上述内容。
解决方案
这是这个循环构造作业的一个合理的 Programming 101 学生解决方案:
package main
import (
"fmt"
"strings"
)
var grades = map[string]float64{
"S": 10,
"A": 9,
"B": 8,
"C": 7,
"D": 6,
"E": 5,
"F": 0,
}
func main() {
totalCredits := 0.0
totalScore := 0.0
var subjects int
for {
fmt.Println("Enter number of subjects:")
n, err := fmt.Scan(&subjects)
if n == 1 && err == nil {
if subjects >= 0 && subjects <= 20 {
break
}
}
}
for i := 0; i < subjects; i++ {
var grade float64
for {
var letterGrade string
fmt.Println("Enter letter grade:")
n, err := fmt.Scanf("%s", &letterGrade)
if n == 1 && err == nil {
var ok bool
grade, ok = grades[strings.ToUpper(letterGrade)]
if ok {
break
}
}
}
var credits float64
for {
fmt.Println("Enter credits:")
n, err := fmt.Scan(&credits)
if n == 1 && err == nil {
if credits >= 0 && credits <= 10 {
break
}
}
}
totalCredits += credits
totalScore += credits * grade
}
gpa := 0.0
if totalCredits != 0.0 {
gpa = totalScore / totalCredits
}
fmt.Println("GPA:", gpa)
}
输出:
$ go run gpa.go
Enter number of subjects:
2
Enter letter grade:
A
Enter credits:
3
Enter letter grade:
b
Enter credits:
4
GPA: 8.428571428571429
$
推荐阅读
- node.js - 在数组nodejs mongoose JOI上存储一个包含2个值的数组
- java - 解决子模块以外的依赖关系
- macos - macOS 上奇怪的并行部分 OpenMP 行为
- gradle - gradle:如何在同一个地方配置所有子项目插件?
- github - 做 git add (and) commit 的最佳实践是什么
- reactjs - 在 react-typescript 项目中创建后端 typescript 模块
- bash - 期望/Bash 脚本中的超时
- tizen - Tizen 无法在本机应用程序中写入文件
- django - 无法将属性添加到 __init__ 的 ModelForm 字段
- actionscript-3 - 逐步增加变量值