无法理解*(星号)在Python变量赋值中的作用

时间:2016-03-24 02:09:43

标签: python variable-assignment

我是编程新手,目前正在通过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” 这行如何正常工作以及*在变量赋值的情况下*做了什么?

请原谅我,如果已经有一个类似的问题来解答我的问题,但我能找到的最接近的是关于*在参数中的作用。 如果是那种情况,我很乐意欣赏指向那里的链接。

感谢您的帮助!

3 个答案:

答案 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 ... ... 0100之间的每个分数一个),您只需使用{{1}选择正确的字符}}

答案 2 :(得分:0)

星号*将连接前面字符串的X版本,其中X由以下数字定义。 +将连接前后字符串

>>> "x"*2
'xx'
>>> "x"*2+"y"*2
'xxyy'
>>>