【问题标题】:Is there a way to print a graph in a format?有没有办法以某种格式打印图表?
【发布时间】:2022-01-05 15:58:08
【问题描述】:

我正在编写一个虚构的报告:

  1. 计算平均成绩
  2. 打印一张相似度分数的小图表,并在适用的情况下列出接受调查的学生。

数据表格

数据表单中的输入是这样设置的:

StudentA___5 6 7 4 5 6
5=20=22=10=2=0=0=1=0=1;StudentB, StudentC
StudentB___7 8 6 6
2=30=15=8=4=3=2=0=0=0;

在第一行计算最终成绩。所有等级的权重相同,大于等于 5.5 且小于 6 的等级记为 6。否则,如果尚未四舍五入,则将其四舍五入到最接近的一半。

在第二行中,用 '=' 分隔的 10 个数字和用 ',' 分隔的 0 个或多个名称

  • 前 10 个数字是相似度分数,表示以 10% 的步长与当前节目的某个百分比匹配的节目数量。这意味着第一个数字表示 1%-10% 的匹配,最后一个数字表示 91%-100% 的匹配。

由于这不是很可读,教授想要一个根据这些规则的简单图表:

  • 如果匹配项为零,则显示下划线:_
  • 如果少于 20 个匹配项,则显示减号:-
  • 如果有 20 个或更多匹配项,则显示插入符号:∧

分号后的学生姓名为最后3个类别中匹配的学生姓名。这些学生的名字应该印在图表下方。如果没有匹配项,程序应打印“未找到匹配项”。

我想要的报告输出

StudentA has an average of 6-
-^^--__-_-
StudentB
StudentC

StudentB has an average of 7.0
-^-----___
No matches found

我的代码

我已经有了计算平均成绩的代码

import sys

for line in sys.stdin.readlines():
  split = line.split("_")
  name = split[0]
  grade = split[-1].split(" ")
  grade2 = [float(x) for x in grade]
  average = "%.1f" % round(sum(grade2) / len(grades2), 2)
  
  if average == "5.5":
     average = average + 0.5, "-"
  else:
    pass

  print(str(name) + "has an average grade of " + str(average))

但我对如何开始使用图形函数并没有太多线索。

【问题讨论】:

    标签: python r function


    【解决方案1】:

    也许这会有所帮助。

    datas = [
        ('StudentA___5 6 7 4 5 6',
        '5=20=22=10=2=0=0=1=0=1;StudentB, StudentC'),
        ('StudentB___7 8 6 6',
        '2=30=15=8=4=3=2=0=0=0;'),
    ]
    
    def print_graph(similarity_scores):
        graph = []
        for sim_score in similarity_scores:
            if sim_score >= 20:
                graph.append('^')
            elif sim_score > 0:
                graph.append('-')
            else:
                graph.append('_')
        print(''.join(graph))
    
    
    def get_avg_grade(grades):
        avg_grade = sum(grades) / len(grades)
        mod = avg_grade % 1
        if mod == 0:
            sign = ''
        elif mod >= 0.5:
            sign = '-'
        else:
            sign = '+'
        return round(avg_grade), sign
    
    
    for data in datas:
        name, *_, grades_str = data[0].split('_')
        grades = [float(grade) for grade in grades_str.split()]
        avg_grade, sign = get_avg_grade(grades)
        print(f'{name} has an average grade of {avg_grade}{sign}')
        
        sim_scores_str, names = data[1].split(';')
        sim_scores = [int(s) for s in sim_scores_str.split('=')]
        print_graph(sim_scores)
        
        if names:
            for name in [n.strip() for n in names.split(',')]:
                print(name)
        else:
            print('No matches found.')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      相关资源
      最近更新 更多