19. 现有学生成绩与对应等级:0~60:D、61~80 C、81~90 B、91~100 A,编写脚本实现当输入范围区间内的数字时打印出对应的等级,输入其他字符时提示“请输入数字”并退出脚本?
时间: 2024-03-08 10:50:19 浏览: 118
以下是 Python3 的实现代码:
```python
score = input("请输入学生成绩:")
if not score.isdigit():
print("请输入数字!")
else:
score = int(score)
if score < 0 or score > 100:
print("无效的成绩范围!")
elif score < 61:
print("D")
elif score < 81:
print("C")
elif score < 91:
print("B")
else:
print("A")
```
代码解释:
1. 首先获取用户输入的成绩,判断是否为数字,如果不是数字,直接输出提示信息并退出脚本;
2. 如果是数字,将字符串类型的成绩转换为整型;
3. 判断成绩范围是否合法,如果不在 0~100 的范围内,输出无效范围的提示信息;
4. 根据成绩范围输出相应的等级。
相关问题
r语言:1. 有如下56名同学的成绩:59 90 74 32 46 93 41 89 96 93 42 96 88 35 66 77 63 63 31 41 51 60 76 75 50 41 90 45 47 69 99 92 37 97 91 70 76 81 98 59 95 79 90 33 87 31 37 68 76 38 40 37 86 61 34 59,其对应的学生姓名分别是Stud1—Stud56,请将90-100标注为A,80-89标注为B,70-79标注为C,60-69标注为D,50-59标注为E,40-49标注为F,30-39标注为G。然后输出每个相同标签下同学的姓名!如下例: A:Stud2 …… B:Stud8 …… C: 提示:可以将数据放入txt文本文档,然后使用read.table 函数读取,使用which函数处理成绩
这是一个R语言的问题,我将会使用R语言来回答。
首先,我们可以将成绩数据放到一个文本文件中,如“grades.txt”,每行一个成绩,然后使用以下代码读取数据:
```
grades <- read.table("grades.txt")
```
接下来,我们可以使用which函数将成绩转换为相应的等级:
```
levels <- c("G", "F", "E", "D", "C", "B", "A")
grade_labels <- levels[cut(grades$V1, breaks=c(0, 30, 40, 50, 60, 70, 80, 90, 100), labels=levels)]
```
这里,我们使用了cut函数将成绩划分为不同的区间,并使用labels参数将区间标签设置为相应的等级。
接下来,我们可以将学生姓名与对应的等级数据合并:
```
students <- paste("Stud", 1:length(grades$V1), sep="")
grades_df <- data.frame(students, grade_labels)
```
最后,我们可以使用split函数按照等级将学生姓名分组:
```
groups <- split(grades_df$students, grades_df$grade_labels)
```
这将会生成一个名为“groups”的列表,其中每个元素表示一个等级,其对应的学生姓名存储在一个字符向量中。
我们可以使用以下代码输出每个等级下的学生姓名:
```
for (i in seq_along(groups)) {
cat(levels[i], ": ", paste(groups[[i]], collapse=", "), "\n")
}
```
这将会输出类似以下的结果:
```
G : Stud4, Stud15, Stud20, Stud37, Stud43
F : Stud7, Stud11, Stud25, Stud28, Stud46, Stud47, Stud49, Stud54
E : Stud5, Stud21, Stud22, Stud24, Stud38, Stud40, Stud51
D : Stud16, Stud17, Stud26, Stud27, Stud42, Stud44, Stud48, Stud56
C : Stud1, Stud13, Stud31, Stud35, Stud50
B : Stud8, Stud14, Stud23, Stud34, Stud39, Stud45, Stud52
A : Stud2, Stud9, Stud10, Stud12, Stud18, Stud19, Stud29, Stud30, Stud32, Stud33, Stud36, Stud41, Stud53, Stud55
```
(train_images, train_labels), (test_images, test_labels) = keras.datasets.cifar100.load_data(label_mode='fine') # 定义分类字典 class_dict = { 0: [0, 53, 57, 83], 1: [1, 3, 4, 6, 7, 14, 15, 18, 19, 21, 24, 26, 27, 29, 30, 31, 32, 34, 36, 38, 42, 43, 44, 45, 50, 55, 63, 64, 65, 66, 67, 72, 73, 74, 75, 77, 78, 79, 80, 88, 91, 93, 95, 97, 99], 2: [2, 11, 35, 46, 98], 3: [5, 9, 10, 16, 20, 22, 25, 28, 39, 40, 41, 61, 84, 86, 87, 94], 4: [12, 17, 37, 68, 76], 5: [23, 33, 49, 60, 71], 6: [47, 51, 52, 54, 56, 59, 62, 70, 82, 92, 96], 7: [8, 13, 48, 58, 69, 81, 85, 89, 90] } train_labels = np.zeros((train_labels.shape[0], 8)) test_labels = np.zeros((test_labels.shape[0], 8)) for i in range(8): train_labels[:, i] = np.any([train_labels[:, class_dict[i][j]] == 1 for j in range(len(class_dict[i]))], axis=0) test_labels[:, i] = np.any([test_labels[:, class_dict[i][j]] == 1 for j in range(len(class_dict[i]))], axis=0)
这段代码的作用是将 CIFAR-100 数据集中的 100 个类别划分为 8 个超类,并将每个样本的标签转换为一个 8 维的 one-hot 向量,其中每个维度代表一个超类。具体来说,根据 `class_dict` 中的超类定义,对每个超类中包含的类别在原始标签中进行逻辑或运算,得到一个布尔数组,然后将这个数组中任意一个为 True 的位置对应的 one-hot 向量的对应维度设为 1。
这段代码本身没有明显的错误,但需要注意的是,如果你要使用这段代码,需要先导入 `numpy` 和 `keras` 库。而且,这个划分方式可能并不适合所有的任务,需要根据具体情况进行调整。
阅读全文