我是编程新手,目前正在通过Zelle的“Python编程:计算机科学概论,第2版”进行编写。
在完成本书的其中一个练习时,我在理解作者提供的解决方案时遇到了一些麻烦。 练习基本上是制作一个程序,给出一定范围的点的字母等级。
问题如下: “某位CS教授给出了100分的考试,分数为90-100:A,80-89:B,70-79:C,60-698:D,<60:F。写一个程序,接受考试成绩作为输入并打印出相应的成绩。“
这是我自己的练习源代码:
score = float(input("Enter your quiz score: "))
if score >= 90:
print("You got an A.")
elif score >= 80:
print("You got a B.")
elif score >= 70:
print("You got a C.")
elif score >= 60:
print("You got a D.")
else:
print("You got a F.")
它的效果非常好,从我的搜索中,它是解决此类问题的标准解决方案。
然后,作者的解决方案如下:
score = eval(input("Enter the score (out of 100): "))
grades = 60*"F"+10*"D"+10*"C"+10*"B"+11*"A"
print("The grade is", grades[score])
我发现整个if-elif-else大块的内容非常简洁,只用2行就可以更简洁地表达。 但是,我在试图理解他的代码的第二行时遇到了麻烦: 等级= 60 *“F”+ 10 *“D”+ 10 *“C”+ 10 *“B”+ 11 *“A” 这行如何正常工作以及*在变量赋值的情况下*做了什么?
请原谅我,如果已经有一个类似的问题来解答我的问题,但我能找到的最接近的是关于*在参数中的作用。 如果是那种情况,我很乐意欣赏指向那里的链接。
感谢您的帮助!
答案 0 :(得分:4)
这与变量赋值无关。在Python中,您可以将字符串乘以非负整数;效果是重复字符串适当的次数。因此,例如,5 *“A”+ 2 *“B”是“AAAAABB”。
(所以在您看到的实际代码中,您有60个“F” - 所以当0 <=得分<60时,grades[score]
将为“F”,然后是10“ D“s - 当60 <=得分<70时,grades[score]
将为”D“,依此类推。)
答案 1 :(得分:2)
它与作业无关。 3*"F"
是"FFF"
,就这么简单。 "FFF"+"DDD"
是"FFFDDD"
。 grades
因此是一个由101个字符组成的字符串(60个F,10个D ... ... 0
和100
之间的每个分数一个),您只需使用{{1}选择正确的字符}}
答案 2 :(得分:0)
星号*
将连接前面字符串的X版本,其中X由以下数字定义。 +
将连接前后字符串
>>> "x"*2
'xx'
>>> "x"*2+"y"*2
'xxyy'
>>>