文件“scoretxt”为学生“孙悟空”翻转课堂比赛中,N名老师打的一个学生成绩,N个分数每个在一行,形式如下(注意:不要复制粘贴! !!>: 88 90 92 56 编写程序,从文件中读取数据,存入列表中,计算该名学生的最高分,最低分,平均分(保留两位小数)。提交scoretxt文件和程序文件。 [输出形式]孙悟空的最高分=90,最低分= 56,平均分=75.75
时间: 2024-03-24 13:39:11 浏览: 91
好的,您的问题是如何从文件中读取数据,计算最高分、最低分和平均分。以下是Python的示例代码:
```python
with open('scoretxt', 'r') as f:
scores = [int(line.strip()) for line in f]
highest = max(scores)
lowest = min(scores)
average = round(sum(scores) / len(scores), 2)
print(f"孙悟空的最高分={highest},最低分={lowest},平均分={average}")
```
解释一下代码的每一行:
1. 打开名为'scoretxt'的文件,并将其用只读模式打开,使用with语句可以确保文件在使用完毕后被正确关闭。
2. 读取文件中的每一行,使用strip()方法去除行末的换行符,并将其转换为整数类型,存储在列表scores中。
3. 使用max()函数计算列表scores中的最高分,并将结果存储在变量highest中。
4. 使用min()函数计算列表scores中的最低分,并将结果存储在变量lowest中。
5. 使用sum()函数计算列表scores中所有元素的和,除以列表长度len(scores)得到平均分,并使用round()函数保留两位小数。
6. 使用print()函数输出结果。
注意:上述代码假设每行只有一个数字。如果每行有多个数字,可以使用split()方法将其分割为多个数字,并使用for循环遍历每个数字。
相关问题
HashMap存放的是key/value对 1. 先定义一个Student类,里面fields有:姓名String name、年龄int age,方法:有参构造器,覆盖(重写)方法toString,在该方法中输出相应的姓名和年龄。所有字段的get/set方法。 2. 利用HashMap添加以下学生(key为学号,value为学生): 学号:15H002,姓名:孙悟空,年龄2000 学号:15H001,姓名:唐僧,年龄40 学号:15H003,姓名:猪八戒,年龄1000 请把这些学生放入的到HashMap对象中去。 3. 根据key(学号)查找学号为15H003和15H004的学生,如果存在则输出其学号、姓名、年龄信息,否则输出无法找到的提示信息。 4. 使用键值对访问方式,输出所有学生的学号、姓名、年龄。 5. 移除学号为15H001的学生。 6. 把HashMap变成数组,并输出每个数组元素的信息(姓名、年龄)
以下是代码实现:
```java
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
// 2. 添加学生信息到HashMap
Map<String, Student> studentMap = new HashMap<>();
studentMap.put("15H002", new Student("孙悟空", 2000));
studentMap.put("15H001", new Student("唐僧", 40));
studentMap.put("15H003", new Student("猪八戒", 1000));
// 3. 查找学生信息
findStudent(studentMap, "15H003");
findStudent(studentMap, "15H004");
// 4. 输出所有学生信息
for (String key : studentMap.keySet()) {
Student student = studentMap.get(key);
System.out.println("学号:" + key + "," + student.toString());
}
// 5. 移除学号为15H001的学生
studentMap.remove("15H001");
// 6. HashMap转为数组并输出每个元素信息
Student[] students = studentMap.values().toArray(new Student[0]);
for (Student student : students) {
System.out.println("姓名:" + student.getName() + ",年龄:" + student.getAge());
}
}
// 根据学号查找学生信息
public static void findStudent(Map<String, Student> studentMap, String id) {
if (studentMap.containsKey(id)) {
Student student = studentMap.get(id);
System.out.println("学号:" + id + "," + student.toString());
} else {
System.out.println("无法找到学号为" + id + "的学生信息");
}
}
}
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "姓名:" + name + ",年龄:" + age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
```
输出结果:
```
学号:15H003,姓名:猪八戒,年龄:1000
无法找到学号为15H004的学生信息
学号:15H002,姓名:孙悟空,年龄:2000
学号:15H001,姓名:唐僧,年龄:40
学号:15H003,姓名:猪八戒,年龄:1000
姓名:孙悟空,年龄:2000
姓名:猪八戒,年龄:1000
```
游记里的孙悟空既贪吃又调皮,一天他从皇母娘娘的蟠桃园摘了一些蟠桃,第一天他刚好吃了这些蟠桃的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的蟠桃的一半外加一个。第 n (n≤20) 天早上起来一看,只剩下 1 个蟠桃了。请小民同学帮助孙悟空计算那天他摘了几个蟠桃?用c++语言写出该程序
```c
#include <stdio.h>
int main() {
int n, x = 1;
scanf("%d", &n);
for (int i = n; i >= 1; i--) {
x = (x + 1) * 2;
}
printf("%d", x);
return 0;
}
```
注解:
利用逆推的思路,从第 n 天往前推,一直推到第一天,算出第一天摘了多少个蟠桃。每天吃剩下的是前一天的一半外加一个,也就是说第 i 天剩下的是第 i+1 天的 (i+1)/2+1,即(2i+1)/2=(i+1) 个蟠桃,所以可以用一个循环来倒推每一天剩下的蟠桃数,最终得到第一天摘了多少个蟠桃,即为答案。
时间复杂度:O(n)
空间复杂度:O(1)
阅读全文