为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇潇雨雨 2021-12-21 11:06:53
我必须编写一个接受 5 个分数并确定每个分数等效字母等级的程序。结果将以表格格式打印。我了解问题的要求以及我没有转述的所有其他步骤,因为它们与我的问题无关。我无法弄清楚如何将我的代码压缩成某种循环。我觉得我拥有的东西很多余,应该有一种方法可以浓缩它。另外,我不允许使用列表来解决这个问题。# Letter grade constantsA_SCORE = 90B_SCORE = 80C_SCORE = 70D_SCORE = 60# Gather scores from usernum1 = 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 resultsprint("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: 75Enter score 2: 88Enter score 3: 91Enter score 4: 80Enter score 5: 85score 1:        75      Cscore 2:        88      Bscore 3:        91      Ascore 4:        80      Bscore 5:        85      B
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

是否没有家庭作业限制以完全阻止列表并以艰苦的方式进行工作。


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


# 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)

另请注意,无需将整数转换为字符串。打印函数隐式地执行此操作


查看完整回答
反对 回复 2021-12-21
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

您可以使用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


查看完整回答
反对 回复 2021-12-21
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

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


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



查看完整回答
反对 回复 2021-12-21
  • 3 回答
  • 0 关注
  • 284 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号