python3刷TK题库 1010: 平均绩点

in #acm7 years ago (edited)

仍然是语言基础问题,这次主要是选择结构的使用。和C/C++不一样的是,python没有switch...case结构,所以遇到多种情况的选择,一般要么用很多if,要么用python特有的数据结构--字典。我的实现使用很多if。如果想要pythonic一点,那肯定是用字典了。当然,也有用python的函数自己实现一个switch...case结构的。

1010: 平均绩点
时间限制: 1 Sec 内存限制: 32 MB
提交: 5803 解决: 1850
[提交][状态][讨论版][命题人:外部导入][下载1元][20kb]
题目描述
每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。
输入
有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。
输出
每组输出结果占一行。如果输入的大写字母都在集合{A,B,C,D,F}中,则输出对应的平均绩点,结果保留两位小数。否则,输出“Unknown”。
样例输入
A B C D F
B F F C C A
D C E F
样例输出
2.00
1.83
Unknown

我的python3程序:

while True:
    total=0
    Grade_in_letter=input()
    No_of_input=len(Grade_in_letter.split(' '))
    for i in range(0, No_of_input):
        if (Grade_in_letter.split(' ')[i]=='A'):
            total=total+4
        elif (Grade_in_letter.split(' ')[i]=='B'):
            total=total+3
        elif (Grade_in_letter.split(' ')[i]=='C'):
            total=total+2
        elif (Grade_in_letter.split(' ')[i]=='D'):
            total=total+1
        elif (Grade_in_letter.split(' ')[i]=='F'):
            total=total+0        
        else:
            total=-1
            break
    average=total/No_of_input
    if(average >= 0):
        print("{:.2f}".format(average))
    if(average < 0):
        print("Unknown")

附一个C(http://blog.csdn.net/sinat_37765046/article/details/74787247)

#include <stdio.h>
#include <string.h>
int main()
{
    char a[100];
    int i,n,flag;
    double sum;//浮点数都设置为double
    while(gets(a))//注意输入有空格,scanf遇到空格就退出,用gets
    {
        flag=1;
        sum=n=0;//sum统计字符对应的和,n统计字符个数
        for(i=0;i<strlen(a);i+=2)//遇到空格跳过,故计数器为i+=2
        {
            if(a[i]=='A') sum+=4,n++;求平均数->求和+求个数
            else if(a[i]=='B') sum+=3,n++;
            else if(a[i]=='C') sum+=2,n++;
            else if(a[i]=='D') sum+=1,n++;
            else if(a[i]=='F') n++;
            else flag=0;//标志变量记录有无非法输入
        }
        if(flag)
        {
            printf("%.2f\n",sum/n);
        }
        else
        {
            printf("Unknown\n"); 
        }
        n=0;
        sum=0;
        flag=1;//多次输入,所以计数器n,总和sum,标志变量flag都要复位
    }
}

参考资料:

  1. https://www.pydanny.com/why-doesnt-python-have-switch-case.html
  2. http://www.wellho.net/resources/ex.php4?item=y103/python_switch_case
Sort:  

这就是文章该有的气质!