仍然是语言基础问题,这次主要是选择结构的使用。和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都要复位
}
}
参考资料:
这就是文章该有的气质!