如何将这个“学生等级”代码压缩成循环?

2024-09-21 09:41:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我要写一个程序,接受5分,并确定每个分数相当于字母等级。结果将以表格形式打印

我了解问题的要求,以及所有其他步骤,我没有转述,因为他们不属于我的问题

我很难弄清楚的是如何将代码压缩成某种循环。

我觉得我所拥有的是非常多余的,应该有一个方法来浓缩它。 另外,我不能使用列表来解决这个问题。

# Letter grade constants
A_SCORE = 90
B_SCORE = 80
C_SCORE = 70
D_SCORE = 60
# Gather scores from user
num1 = int(input("Enter score 1: "))
if num1 >= A_SCORE:
    letter1 = "A"
elif num1 >= B_SCORE:
    letter1 = "B"
elif num1 >= C_SCORE:
    letter1 = "C"
elif num1 >= D_SCORE:
    letter1 = "D"
else:
    letter1 = "F"
num2 = int(input("Enter score 2: "))
if num2 >= A_SCORE:
    letter2 = "A"
elif num2 >= B_SCORE:
    letter2 = "B"
elif num2 >= C_SCORE:
    letter2 = "C"
elif num2 >= D_SCORE:
    letter2 = "D"
else:
    letter2 = "F"
num3 = int(input("Enter score 3: "))
if num3 >= A_SCORE:
    letter3 = "A"
elif num3 >= B_SCORE:
    letter3 = "B"
elif num3 >= C_SCORE:
    letter3 = "C"
elif num3 >= D_SCORE:
    letter3 = "D"
else:
    letter3 = "F"
num4 = int(input("Enter score 4: "))
if num4 >= A_SCORE:
    letter4 = "A"
elif num4 >= B_SCORE:
    letter4 = "B"
elif num4 >= C_SCORE:
    letter4 = "C"
elif num4 >= D_SCORE:
    letter4 = "D"
else:
    letter4 = "F"
num5 = int(input("Enter score 5: "))
if num5 >= A_SCORE:
    letter5 = "A"
elif num5 >= B_SCORE:
    letter5 = "B"
elif num5 >= C_SCORE:
    letter5 = "C"
elif num5 >= D_SCORE:
    letter5 = "D"
else:
    letter5 = "F"

# Print results
print("score 1: \t\t" + str(num1) + "\t\t" + letter1)
print("score 2: \t\t" + str(num2) + "\t\t" + letter2)
print("score 3: \t\t" + str(num3) + "\t\t" + letter3)
print("score 4: \t\t" + str(num4) + "\t\t" + letter4)
print("score 5: \t\t" + str(num5) + "\t\t" + letter5)

下面是显示内容的示例。这是正确的格式,我刚刚排除了表格标题

Enter score 1: 75
Enter score 2: 88
Enter score 3: 91
Enter score 4: 80
Enter score 5: 85

score 1:        75      C
score 2:        88      B
score 3:        91      A
score 4:        80      B
score 5:        85      B

Tags: intscoreenterelifnum2num1letter3letter1
3条回答

您可以使用bisect模块来获取成绩。这里,get_score将采用数字等级并返回字母等级

from bisect import bisect
def get_score(A):
    i = bisect([60, 70, 80, 90], A)
    return 'FDCBA'[i]

mm = []
for i in range(5):
    mm += [input('Enter score {}: '.format(i))]

for m in mm:
    print('score {}:  {}   {}'.format(i, m, get_score(int(m))))

#Outputs
Enter score 0: 75
Enter score 1: 88
Enter score 2: 91
Enter score 3: 80
Enter score 4: 85
score 4:  75   C
score 4:  88   B
score 4:  91   A
score 4:  80   B
score 4:  85   B

是不是家庭作业的限制条件不存在,以防止名单上的所有和工作的艰苦方式

我能想象的最好的缩短代码的方法是一个函数:

# Letter grade constants
A_SCORE = 90
B_SCORE = 80
C_SCORE = 70
D_SCORE = 60
# Gather scores from user

def getscore(num):
    if num >= A_SCORE:
        return "A"
    elif num >= B_SCORE:
        return "B"
    elif num >= C_SCORE:
        return "C"
    elif num >= D_SCORE:
        return "D"
    else:
        return "F"

num1 = int(input("Enter score 1: "))
num2 = int(input("Enter score 2: "))
num3 = int(input("Enter score 3: "))
num4 = int(input("Enter score 4: "))
num5 = int(input("Enter score 5: "))

letter1 = getscore(num1)
letter2 = getscore(num2)
letter3 = getscore(num3)
letter4 = getscore(num4)
letter5 = getscore(num5)

# Print results
print("score 1: \t\t" + num1 + "\t\t" + letter1)
print("score 2: \t\t" + num2 + "\t\t" + letter2)
print("score 3: \t\t" + num3 + "\t\t" + letter3)
print("score 4: \t\t" + num4 + "\t\t" + letter4)
print("score 5: \t\t" + num5 + "\t\t" + letter5)

请注意,也不需要将int转换为字符串。print函数隐式地执行此操作

您的代码是使用循环的教科书案例。每当您发现自己在编写充满命令的重复代码时,每次只更改一些小细节,看看是否可以使用循环:

A_SCORE = 90
B_SCORE = 80
C_SCORE = 70
D_SCORE = 60

scores = []
grades = []

for n in range(1, 6):
    grade = int(input("Enter score {}: ".format(n)))
    grades.append(grade)

    if grade >= A_SCORE:
        scores.append('A')
    elif grade >= B_SCORE:
        scores.append('B')
    elif grade >= C_SCORE:
        scores.append('C')
    elif grade >= D_SCORE:
        scores.append('D')
    else:
        scores.append('F')

for n, (score, grade) in enumerate(zip(scores, grades), 1):
    print("score {}: \t\t".format(n) + str(grade) + "\t\t" + score)

输出:

Enter score 1: 75
Enter score 2: 88
Enter score 3: 91
Enter score 4: 80
Enter score 5: 85
score 1:        75      C
score 2:        88      B
score 3:        91      A
score 4:        80      B
score 5:        85      B

相关问题 更多 >

    热门问题