1. 程式人生 > >解壓 ---- 現在有一場跳水比賽決賽,共10名裁判,10選手,評分規則是這10名裁判依次給選手打分,如果裁判棄權則沒有分。最後,去掉一個最高分,去掉最低分,剩下的成績平均分就是選手的最終成績

解壓 ---- 現在有一場跳水比賽決賽,共10名裁判,10選手,評分規則是這10名裁判依次給選手打分,如果裁判棄權則沒有分。最後,去掉一個最高分,去掉最低分,剩下的成績平均分就是選手的最終成績

現在有一場跳水比賽決賽,共10名裁判,10選手,評分規則是這10名裁判依次給選手打分,如果裁判棄權則沒有分。最後,去掉一個最高分,去掉最低分,剩下的成績平均分就是選手的最終成績

解壓

In [1]:
a, b = 1, 2
print(a, b)
1 2
In [2]:
a, b = b, a
print(a, b)
2 1
In [3]:
name, city, birth = 'xiaoming', 'Beijing', (2017, 8, 8)
print('%s born at %s on %s' % (name, city, birth))
xiaoming born at Beijing on (2017, 8, 8)
In [4]:
name, city, (year, month, day) = 'xiaoming', 'Beijing', (2017, 8, 8)
print('%s %s年%s月%s日出生於%s' % (name, year, month, day, city))
xiaoming 2017年8月8日出生於Beijing

同樣的規則也適用於tuple或者list

同樣也適用於所有的可迭代物件,比如迭代器、字串、檔案物件

注意: 如果可迭代物件的個數超過變數的個數,則會丟擲ValueError

In [5]:
name, city, *birth = 'xiaoming', 'Beijing', 2017
, 8, 8
print(name, city, birth)
xiaoming Beijing [2017, 8, 8]

注意第3個帶*號的引數,它永遠都是List, 即使沒有值的情況下, 也會返回一個空的list,省去了型別檢查

In [7]:
name, city, *birth = 'xiaoming', 'Beijing'
print(name, city, birth)
xiaoming Beijing []
In [9]:
people = ['李白', '白居易', '李清照']
for p in people:
    family_name, *name = p
#     print('姓: %s - 名: %s' % (family_name, name))
    print('姓: %s - 名: %s' % (family_name, ''.join(name)))
    # 因為*name返回的是list, 所以把它轉換成字串
姓: 李 - 名: ['白']
姓: 李 - 名: 白
姓: 白 - 名: ['居', '易']
姓: 白 - 名: 居易
姓: 李 - 名: ['清', '照']
姓: 李 - 名: 清照
In [10]:
# 如 :
*head, tail = range(10)
print(head, tail)
[0, 1, 2, 3, 4, 5, 6, 7, 8] 9
In [11]:
# 如: 可以這種方法只取後面幾個,(同理:前後幾個,頭尾幾個)
*_, a, b = range(10)
print(a, b)
8 9

現在有一場跳水比賽決賽,共10名裁判,10選手,評分規則是這10名裁判依次給選手打分,如果裁判棄權則沒有分。最後,去掉一個最高分,去掉最低分,剩下的成績平均分就是選手的最終成績,

In [13]:
import random  # 隨機取得分數
import faker  # 用第三方庫引用姓名
f = faker.Faker('zh_CN')  # 不填引數, 預設為外國人的名, 'zh_CN'為中文名
players = [f.name() for i in range(10)]  # 取得10名運動員的名字
print(players)
['汲秀榮', '粱龍', '卻玉珍', '諸林', '郟晶', '蔚超', '許紅梅', '仉麗娟', '法穎', '束玉梅']
In [14]:
def collect_scores(player, judge_num=10):
    scores = []
    for i in range(judge_num):
        if i % 4 == 0:
            continue
        scores.append(random.randint(6, 10))
    return player, scores
In [15]:
all_scores = [collect_scores(player) for player in players]
for player, scores in all_scores:
    scores.sort()
    min_score, *f_scores, max_score = scores
    print(player, sum(f_scores) / len(f_scores))
汲秀榮 6.8
粱龍 7.4
卻玉珍 8.6
諸林 7.2
郟晶 7.8
蔚超 6.6
許紅梅 8.4
仉麗娟 7.6
法穎 8.0
束玉梅 8.0