友情提示:380元/半年,儿童学编程,就上码丁实验室。
Python中星号 * 操作符
问题:
我们有一个数学考试成绩序列,但是不知道有多少个成绩,现在需要去掉一个最大值和一个最小值,求平均分。
解决方法:
使用星号(*)表达式
首先看一下序列赋值的基本用法:
>>> a,b,c=(1,2,3)
>>> a
1
>>> b
2
>>> c
3
下面看星号(*)表达式的基本用法:
用法1:
>>> a,*b=(1,2,3)
>>> a
1
>>> b
[2, 3]
用法2:
>>> *a,b=[1,2,3]
>>> a
[1, 2]
>>> b
3
用法3:
>>> a,*b,c=’123′
>>> a
’1′
>>> b
['2']
>>> c
’3′
用法4:
>>> a,*b,c=(1,2)
>>> a
1
>>> b
[]
>>> c
2
有一点需要特别注意在赋值语句中使用星号(*)表达式获取序列值之后,其一定是一个列表,无论有没有获取到元素。
再看不在赋值语句中使用*号:
>>> a=(1,2,3,4)
>>> print(a)
(1, 2, 3, 4)
>>> print(*a)
1 2 3 4
>>> print(1,2,3,4)
1 2 3 4
在这里,星号的作用就是将一个序列分解成多个独立的元素。
再看一个例子:
>>> a=['abc']
>>> print(a)
['abc']
>>> print(*a)
abc
>>> >>> print(‘abc’)
abc
介绍到这里,下面来看一下我们开头的问题,如何解决:
代码如下:
def myAvg(records):
try:
records=sorted(records)
first,*middle,last=records
avg=(sum(middle))/len(middle)
return avg
except:
return -1
if __name__==’__main__’:
a=[]
b=[78]
c=[80,90]
d=[3,2,1]
e=[10,20,30,40,50]
recs=(a,b,c,d,e)
for rec in recs:
print(myAvg(rec))
输出结果如下:
-1
-1
-1
2.0
30.0
>>>
喜欢文章,欢迎大家转发!!!