python输入至少3名学生的姓名及4科成绩【姓名及成绩都有长有短】,将不对齐的输入 格式化后输出各元素整齐对齐 的输出结果【输出结果最后一列增加平均成绩】,输出结果的顺序为按平均成绩从高到低排列输出。
时间: 2024-10-12 11:06:28 浏览: 31
在Python中,你可以使用内置的`csv`模块来读取和处理这种不规则的输入数据,并利用`pandas`库来进行数据分析和格式化输出。首先,你需要导入必要的库并创建一个空的数据结构来存储学生信息。然后,可以编写一个函数来读取输入,计算平均分,并按照平均分排序。
下面是一个简单的示例:
```python
import csv
import pandas as pd
def read_input():
data = []
# 假设输入格式如:"张三,语文90,数学85,英语78,物理92"
with open("students.csv", "r", newline="", encoding="utf-8") as f:
reader = csv.reader(f, delimiter=',', quotechar='"')
next(reader) # 跳过表头
for row in reader:
name, *scores = row
total_score = sum(map(int, scores))
average_score = total_score / len(scores)
data.append({"姓名": name, "成绩": scores, "平均分": average_score})
data.sort(key=lambda x: x["平均分"], reverse=True)
# 将字典列表转换为DataFrame
df = pd.DataFrame(data)
# 对齐输出
output_columns = ["姓名"] + ["{}学科".format(i+1) for i in range(4)] + ["平均分"]
formatted_output = df[output_columns].applymap(lambda x: str(x).ljust(15)) # 假设每个字段宽度为15个字符
print(formatted_output.to_string(index=False))
# 输出结果的最后一列增加平均成绩
for i, row in formatted_output.iterrows():
formatted_output.at[i, "平均分"] = "{:.2f}".format(row["平均分"])
print(formatted_output)
```
这个脚本假设你的输入文件名为"students.csv",并且每个学生的记录都在一行中,格式如上述所示。请注意,由于实际的输入格式未知,这里仅提供了一个基本的框架,你可能需要根据实际情况调整处理方法。
阅读全文