educoder平台课-Python程序设计-5.字符串

课程链接:头歌实践教学平台

自用学习整理,无商业用途

来源:头歌实践教学平台


5.1 序列通用操作

文本序列(字符串)、列表、元组和 range 等序列数据类型具有一些共性。
他们内部元素之间都存在先后顺序,都支持序列的拼接、重复、索引、切片、测试长度、最大值、最小值和存在性测试等操作。
各操作的描述如表 6.1 所示,s 和 t 是具有相同类型的序列,n、i、j 和 k 是整数而 x 是任何满足 s 所规定的类型和值限制的任意对象。
in 和 not in 操作具有与比较操作相同的优先级。

  • (拼接) 和 * (重复) 操作具有与对应数值运算相同的优先级。
操作符描述
s[i]索引,返回序列 s 的第 i 项,项序号为整数
s[start:end[:step]]切片,返回序列 s 从start到end (不包括end)的步长为step的字符生成新的序列,step缺省时,步长为1,返回序号从start到end的子序列。
s + t拼接两个序列 s 和 t,仅适用于列表和字符串
s * n 或n * sn 为整数,将序列 s 与自身拼接 n 次生成新序列,range不支持此操作
len(s)返回序列 s 的长度,序列包含元素的个数或字符串包含字符的个数
min(s,*[,key, default])返回序列 s的最小值,key关键字缺省时按元素值比较
max(s,*[,key, default])返回序列 s的最大值,key关键字缺省时按元素值比较
s.count(x)x 在 s 中出现的总次数
s.index(x[, i[, j]])元素或字符 x 在序列 s 中首次出现项的索引号,i值存在时表示从索引号 i 处开始查找 x,j 存在时表示查找范围在 i 和 j 之间。
x in s如果基本序列 s 中的某项等于 x ,则结果为 True,否则结果 False
如果字符串 s 中的任一子序列与 x 相等,则结果为True,否则结果False
x not in s如果基本序列 s 中的某项等于 x ,则结果为 False,否则结果 True
如果字符串 s 中的任一子序列与 x 相等,则结果为False,否则结果True

在序列中循环时,用 enumerate() 函数可以同时取出位置索引和对应的值:

for i, city in enumerate(['北京', '上海', '天津', '重庆']):
    print(i, city)  # 默认从0开始计数
for i, city in enumerate(['北京', '上海', '天津', '重庆'], 1):
    print(i, city)  # 从1开始计数

5.2 索引

对于元组、列表range 对象等基本序列类型,序列中每个元素拥有一个序号。
对于字符串,其中的每个字符拥有一个序号。
序列数据内部的字符或元素按照顺序有序存储,可以使用序号取得相应的数据项或字符。

Python维护了两套索引:
正向索引正向从 0 开始,终止值为序列长度减1(元素个数减一,即 len(s)-1);
逆向索引-1 开始,逆向索引终止值为负的序列长度(即-len(s) )
(注意,计算机中 -0 和 0 一样,因此,负数索引从 -1 开始)

两种序号体系可以混合使用,并且结合两种表示方法可以方便的对序列进行索引和切片。
图 6.1 中以列表和字符串为例给出正向和逆向两种索引编号规则的示例。
对字符串而言,英文、中文、空格和各种符号都各占一个字符位。

对于序列结构数据来说,索引和步长都具有正负两个值,分别表示左、右两个方向取值。
索引的正方向从左往右取值,起始位置为0;
逆向从右往左取值,起始位置为 -1。
因此任意一个序列结构数据的索引范围为 -len(seq) 到 len(seq)-1 范围内的连续整数。

所谓的索引是指通过序列数据的序号返回其对应的字符或元素的操作。 可以按正向序号进行索引或按逆向序号进行索引,通过序号获取对应的元素。 索引的方法是:

序列名[序号]

# 字符串序列
s = 'Hello Python!'  # 字符串,13个字符,空格算字符
print(s[0])    # 按序号正向索引,返回序号为0的字符 'H'
print(s[-13])  # 按逆向序号索引,返回序号为-13的字符 'H'

print(s[4])    # 按序号正向索引,返回序号为4的字符 'o'
print(s[-9])   # 按逆向序号索引,返回序号为-9的字符 'o'

print(s[6])    # 按序号正向索引,返回序号为6的字符 'P'
print(s[-7])   # 按逆向序号索引,返回序号为-7的字符字符 'P'

print(s[12])   # 按序号正向索引,返回序号为12的字符 '!'
print(s[-1])   # 按逆向序号索引,返回最后一个字符 '!'

实例 6.1 从身份证获取性别

公民身份号码里面还隐含出生日期、出生地、性别等信息,身份证倒数第二位是性别信息,奇数表示“男”,偶数表示“女”。
输入一个合法的身份证号,输出其持有者的性别。

id_number = input()

if id_number[16] in '02468':       # 字符串更简洁,也避免转整数的运算
# if int(id_number[16]) % 2 == 0:  # 也可转整数再用取模运算判定奇偶
    gender = '女'
else:
    gender = '男'
print(f'性别为{gender}')
# 利用条件表达式实现更简洁
id_number = input()
gender = '女' if id_number[16] in '02468' else '男'
print(f'性别为{gender}')

# 可在一行内完成
print(f'性别为女') if input()[16] in '02468' else print(f'性别为男')
# 序列类型 — 列表
scores = ['李明', 84, 80, 95, 88, 76, 65, 85, 98, 55]
print(scores[0])   # 按序号正向索引,返回序号为0的元素'李明'
print(scores[4])   # 按序号正向索引,返回序号为3的元素88
print(scores[-1])  # 按逆向序号索引,返回倒数第1个元素55
print(scores[-3])  # 按逆向序号索引,返回倒数第3个元素85
# 序列类型 — range
r = range(10)  # 获得0,1,2,3,4,5,6,7,8,9的序列对象
print(r[3])    # 按序号正向索引,返回序号为3的元素  3
print(r[-3])   # 按逆向序号索引,返回倒数第3个元素  7

索引超出范围

要注意的是,当使用的索引值超出列表现有数据的索引时,Python将会产生“索引超出范围”的错误。
例如,用试图用scores[10] 或scores[-11]获取列表 scores中不存在的序号 10 的数据,会得到“IndexError: list index out of range”的出错提示。

# 序列类型 — 列表索引越界
scores = ['李明', 84, 80, 95, 88, 76, 65, 85, 98, 55]
print(scores[10])
# 输出:IndexError: list index out of range
# 序列类型 — 列表索引越界
scores = ['李明', 84, 80, 95, 88, 76, 65, 85, 98, 55]
print(scores[-11])
# 输出:IndexError: list index out of range

索引序号必须为整数,不可为浮点数。

当试图用浮点数做索引序号时,Python将会产生TypeError。
当索引值是通过计算得到时,务必使其值为整型才可用做索引序号,或先对其进行取整操作再用做索引序号。
例如,10 / 5和10.0 // 5的结果都为 2.0,这是一个浮点数,当尝试输出 scores 列表中索引号为 10 / 5的数据,因索引序号为浮点数,程序会返回“TypeError: list indices must be integers or slices, not float”的出错提示,提示用户“列表的索引必须是整数,不能是浮点数”。

scores = ['李明', 84, 80, 95, 88, 76, 65, 85, 98, 55]
print(scores[10 / 5])
# 输出:TypeError: list indices must be integers or slices, not float

浮点数的整除结果是一个值等于整数的浮点数,也不可以做索引序号。

scores = ['李明', 84, 80, 95, 88, 76, 65, 85, 98, 55]
print(10.0 // 5)  # 运算结果为2.0,浮点数
print(scores[10.0 // 5])
# 输出:TypeError: list indices must be integers or slices, not float
# 以下用法可以得到整数,可用作序号
scores = ['李明', 84, 80, 95, 88, 76, 65, 85, 98, 55]

print(scores[int(10 / 5)])     # 除法结果取整
print(scores[10 // 5])         # 整数做整除
print(scores[int(10.0 // 5)])  # 浮点数整除后取整
# 输出:TypeError: list indices must be integers or slices, not float

索引得到的对象的数据类型取决于序列中对应序号的元素的数据类型。

如果索引结果仍是序列类型数据时,可以继续应用索引的方法获取元素中的数据。

cv = ['李明', 35, ('博士','副教授'), [96, 92, 85]]  

列表 cv 中包含用3个逗号分隔开的4个元素,分别是:
字符串'李明'、整数 35, 元组('博士','副教授')和列表[96, 92, 85]。

cv = ['李明', 35, ('博士', '副教授'), [96, 92, 85]]
# 包含字符串、数字、元组和列表等多种类型数据的列表
print(cv[0])  # 序号为 0 的元素为字符串:'李明'
print(cv[1])  # 序号为 1 的元素整数:35
print(cv[2])  # 序号为 2 的元素为元组('博士', '副教授')
print(cv[3])  # 序号为 3 的元素为列表[96, 92, 85]

其中包含的字符串'李明'、元组('博士','副教授')和列表[96, 92, 85]这三个元素都属于序列类型,可以继续应用索引的方法获取元素内部的数据。
如:'李明'[0]的值为'李'、('博士','副教授')[1] 的值为'副教授'。

cv = ['李明', 35, ('博士', '副教授'), [96, 92, 85]]
# 包含字符串、数字、元组和列表等多种类型数据的列表
print(cv[0])     # 序号为 0 的元素为字符串:'李明'
print(cv[0][0])  # 序号为 0 的元素中序号为0的元素为:'李'
print(cv[2])     # 序号为 2 的元素为元组('博士', '副教授')
print(cv[3])     # 序号为 3 的元素为列表[96, 92, 85]
print(cv[2][0])  # 序号为 2 的元素中序号为0的元素为:博士
print(cv[3][1])  # 序号为 3 的元素中序号为1的元素为:92

cv[2] 索引的结果是一个元组:('博士', '副教授'),元组仍是一个序列类型数据,仍可应用索引获取其中的元素。
cv[2][0]相当于:('博士', '副教授')[0]
元组对象('博士', '副教授')中序号为0的元素为:’博士’
所以cv[2][0]最终获取的数据为:'博士'。

实例 6.2 百分制转五分制

可以用字符串索引的方法实现百分制成绩转五分制成绩。

先将 区间0-100 划分为[0,10)、[10,20)、[20,30)、[30,40)、[40,50)、[50,60)、[60,70)、[70,80)、[80,90)、[90,100)、[100] 共 11 个区间。
各区间成绩分别对应五分制的“E、E、E、E、E、E、D、C、B、A、A”。
如果将落在各区间的数分别对10做整除,正好可以得到 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10共10个数字。
这些数字正好是字符串“EEEEEEDCBAA”中每个字符的序号。
根据用户输入的分数整除10,去掉其个位上的数字,得到其十位上的数字“i”,字符串中以“i”值作为索引的字符正好对应该分数段的五分制成绩。
例如,输入85时,85//10 的结果为 8,输出字符串中序号为 8 的字符“B”。

score = int(input())            # 输入整数
degree = 'EEEEEEDCBAA'          # 序号0,1,2,3,4,5,6,7,8,9,10
if score > 100 or score < 0:    # 排除不合法数据
    print('Data error!')
else:
    i = score // 10
    print(degree[i])   # degree[i]索引返回其中序号为i的字符

以上程序也可以用条件表达式实现:

score = int(input())
degree = 'EEEEEEDCBAA'
print('Data error!') if (score > 100 or score < 0) else print(degree[score // 10])

5.3 切片

字符串序列及列表、元组和range等序列类型数据都支持切片操作,切片是从一个序列中获取一个子序列,切片结果的数据类型与原序列相同
切片的方法是:

seq[start: end: step]

seq为字符串及列表、元组或range等序列类型数据对象名。

start:
表示切片开始的位置元素序号,是第一个要返回的元素的索引号,即切片结果包含seq[start]元素。
正向索引start缺省值为0,切片从第一个元素开始时,start可以省略。
逆向索引start缺省值为负的序列长度,即 -len(seq);

还可以这样理解切片,索引指向的是字符之间 ,第一个字符的左侧标为 0,最后一个字符的右侧标为 n ,n 是字符串长度。例如:

s = 'Hello World!'
print(s[6:12])  # 根据序号[6:12]切片,输出不包括序号12的字符串'World!'
print(s[:5])    # 从起点到序号为5的位置切片,不包括5,'Hello'
print(s[:-7])   # 从序号-12向后到-7切片,输出'Hello'

end:
表示是切片结束位置元素序号。
正向索引最后一个元素序号为序列长度减1,即: len(seq)-1; 逆向索引最后一个元素序号为 -1; 切片结果不包括seq[end]元素,即切片取不到右边界。

s = 'Hello World!'
print(s[:-7])    # 从序号-12向后到-7切片,输出'Hello'
print(s[-6:-1])  # 负向索引,不包含右边界元素,输出'World'
print(s[6:-1])   # 混用正负索引,输出'World'
print(len(s))    # 字符串长度12,最后一个元素序号11
print(s[:11])    # Hello World,未切取到最后字符 “!”

切片到最后一个元素时,end 省略设为序列长度(确保取到最后一个元素)。
想返回包含最后一个元素(len(s)-1)的切片时,结束位置的序号end应该设为len(s)或省略结束位置序号,即应该使用切片seq[start: len(s)] 或seq[start: ]。

s = 'Hello World!'
print(len(s))  # 字符串长度12,最后一个元素序号11
print(s[:12])  # Hello World!
print(s[:])    # Hello World!
print(s[6:])   # World!,未切取到最后字符 “!”
s = 'Hello World!'
print(s[:-7])    # 从序号-12向后到-7切片,输出'Hello'
print(s[6:])     # 从序号6向后到最后一个字符切片,输出'World!'
print(s[-6:-1])  # 负向索引,不包含右边界元素,输出'World'
print(s[6:-1])   # 混用正负索引,输出'World'

step:
表示取值的步长,默认为1,步长值可以为负值,但步长不能为0
步长为正时正向切片,步长为负时逆向切片

s = 'Hello World!'
print(s[::2])  # 步长为2,输出序号为偶数的元素,输出'HloWrd'
print(s[1::2])  # 步长为2,输出序号为奇数的元素,输出'el ol!'

设置步长为 -1可实现逆向切片,可用于字符串的逆序

s = 'Hello World!'
print(s[-1::-1])  # 按步长为-1进行切片,输出'!dlroW olleH'
print(s[::-1])    # 按步长为-1进行切片,输出'!dlroW olleH'

实例 6.3 回文字符串

一个字符串,如果各字符逆序排列与原字符串相同,则称为回文,如“12321”、“上海自来水来自海上”,用户输入一个字符串,判断该字符串是否为回文,如是回文输出“True”,否则输出“False”。

判断输入的字符串是否是回文,可以从前到后将字符串的每一个字符与从后向前每一个字符一一比较,如果都一一相同,则是回文。Python在处理字符串方面有更灵活的方法,可以利用切片方法(s [start: end: step]),令步长step值为-1,从最后一个字符开始,到字符串开始字符结束进行切片,即构造切片s[-1::-1]或s[::-1] ,可以获得反转后的字符串。比较反转后的字符串与原字符串是否相同,相同则是回文。

s = input()            # 输入一个字符串
if s == s[-1::-1]:     # s[-1::-1]将字符串反转,判断反转后是否与原字符串相等
    print('True')
else:
    print('False')

可以将其定义为函数,利用比较运算结果为布尔值的特性,直接返回比较运算表达式,避免使用分支语句。

def palindromic(s):
    """接收一个字符串为参数,判定其是否为回文,返回布尔值。"""
    return s == s[::-1]  # 比较运算结果为布尔值True或False,可直接做为函数返回值

实例 6.4 提取身份号码中的日期与性别

中国的居民身份证号是一个18个字符的字符串:
第7--14位数字表示出生年、月、日
第17位数字表示性别,奇数表示男性,偶数表示女性。
输入一个合法的身份证号,输出其出生年月日。(注:本书测试所用身份证号是用程序模拟生成的虚拟号码)

id_number = input()           # 测试数据是合法的18位身份证号
year = id_number[6:10]        # 序号6-9的字符串,年份
month = id_number[10:12]      # 序号为10-11的字符串,月份
date = id_number[12:14]       # 序号为12-13的字符串,日期
if id_number[16] in '13579':  # 若第17位数字在'13579'中存在,为奇数
    gender = '男'
else:
    gender = '女'
print('出生:  ' + year + '年' + month + '月' + date + '日')  # 字符串拼接
print(f'出生:  {year}年{int(month)}月{int(date)}日')         # int()转整数去除前导0
print(f'性别:  {gender}')

在这个程序中,通过字符串切片id_number[6:10]、id_number[10:12]、id_number[12:14]分别获取出生年份、月份和日期。
在切片时,切分出来的子字符串包括左边界,但不包括右边界。
语句print('出生于'+year+'年'+month+'月'+day+'日')的括号里,采用6个“+”将4个字符串和3个字符串变量拼接成一个新的字符串并输出。
这里也可以用“f”前缀格式化字符串输出,这种方法不限制变量类型,使用更为方便。
此处可用int()函数转为整数,去除月份或日期前导0,保持与身份证上的输出一致。

5.4 序列拼接与重复

字符串、元组与列表等序列类型都支持拼接与重复的操作。

序列拼接是通过“+”将两个相同类型的序列拼接为一个包含参与拼接的序列中所有元素的新序列。

# 字符串拼接
first_name = input()  # 输入名
last_name = input()   # 输入姓

# 输出姓名
full_name = last_name + first_name  # 将姓与名拼接为一个字符串
print(full_name)                    # 赵广辉,  拼接后是一个对象,输出时中间无空格
print(last_name + first_name)       # 赵广辉,  拼接后是一个对象,输出时中间无空格
print(last_name, first_name)        # 赵 广辉,输出多个对象时,默认中间有空格

列表拼接为新的列表对象

stu_name = ['李明']
score_2021 = [84, 80, 95, 88]
score_2022 = [96, 76, 65, 85, 98, 55]

stu_score = stu_name + score_2021 + score_2022  # 3个列表拼接到一起
print(stu_score)  # ['李明', 84, 80, 95, 88, 96, 76, 65, 85, 98, 55]
stu_name = ('李明',)  # 注意括号中的逗号不可少,('李明')类型为字符串<class 'str'>
score_2021 = (84, 80, 95, 88)
score_2022 = (96, 76, 65, 85, 98, 55)

stu_score = stu_name + score_2021 + score_2022
print(stu_score)  # ('李明', 84, 80, 95, 88, 96, 76, 65, 85, 98, 55)

序列重复 s * n 是将一个序列 s 乘以一个整数 n产生一个新序列,新序列是 s 中的元素重复 n 次。

print('-' * 30)             # 字符串'-' 重复30次,得到新字符串'------------------------------'
print(f'{"欢迎光临":^30}')  # 30表示占30字符宽度,^ 表示居中对齐
print('-' * 30)

序列重复时,当 n 小于或等于0时会被当作 0 来处理,此时序列重复0 次的操作将产生一个空序列。

print('-' * 0)     # 输出空字符串
print('-' * (-5))  # 输出空字符串

实例 6.5 数据脱敏

手机号属于个人隐私信息,编程将用户输入的手机号的4-7位用“*”替换。输入格式为: 11位数字的手机号码,如:13912345678。

tel = input()                            # 输入13213213211
tel_mask = tel[:3] + '*' * 4 + tel[-4:]  # 字符串切片、拼接和重复
print(tel_mask)                          # 132****3211

实例 6.6 约瑟夫环问题

有20个人围坐在一张圆桌周围,从第1个人开始报数,数到3的那个人出列,他的下一个人又从1开始报数,数到3的那个人又出列;
依此规律重复下去,直到圆桌周围的人数少于3时结束,循环输出每次出列的人和剩下的人的序号。

20个人围成一个圈可以用一个列表来表示:
joseph_ring = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
每次将列表的第3个元素去除,可以切片取前2个元素joseph_ring[:2],拼接到列表从第4个元素到末尾的切片joseph_ring[3:]:
joseph_ring = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
joseph_ring = joseph_ring[3:] + joseph_ring[:2]  # 跳过第3个元素
print(joseph_ring)  # [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2]
joseph_ring = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
while len(joseph_ring) > 2:          # 列表长度大于m-1时,去掉第m个元素
    print(joseph_ring[2], end=' ')   # 输出当前出列的元素
    joseph_ring = joseph_ring[3:] + joseph_ring[:2]  # 两个列表拼接为一个新列表
    print(joseph_ring)               # 输出列表中剩余元素

5.5 成员测试

Python 提供了“in” 和“not in”运算符,用于测试某对象是否为字符串、列表或元组等序列或集合中的成员,返回布尔值(True 或False)。

应用“in”测试时,如果该对象在指定的序列中存在,则返回True,否则返回False。应用“not in”测试时,正好相反。
成员测试一般用于条件运算,根据测试结果决定执行后续程序中的某个分支。

northeast = ['辽宁', '吉林', '黑龙江']
province = input()
if province in northeast:
    print(f'{province}是东北三省之一')
northeast = ['辽宁', '吉林', '黑龙江']
province = input()
if province not in northeast:
    print(f'{province}不是东北三省之一')
# 输入身份证号,输出性别

id_number = input()           # 测试数据是合法的18位身份证号
if id_number[16] in '13579':  # 若第17位数字在'13579'中存在,为奇数,或if id_number[-2] in '13579':
    gender = '男'
else:
    gender = '女'
print(f'性别: {gender}')

实例 6.7 判断火车票座位

我国高铁二等座车座席采用2+3布置,每排设有“3+2”方式排列五个座位,以“A、B、C、D、F”代表,字母“A”和“F”的座位靠窗,字母“C”和“D”靠中间过道,“B”代表三人座中间座席。 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬ 用户输入一个数字和一个字母组成的合法的座位号,根据字母判断位置是窗口、过道还是中间座席。

seat = input()
if seat[-1] in 'AF':
    print(f'{seat}是{seat[:-1]}排{"窗口"}')
elif seat[-1] in 'CD':
    print(f'{seat}是{seat[:-1]}排{"过道"}')
elif seat[-1] == 'B':
    print(f'{seat}是{seat[:-1]}排{"中间"}')

5.6 最大值与最小值

max(s) ____min(s) 可以返回序列元素的最大值和最小值。
元素为数值类型时直接比较;
元素为字符串时,比较字符串的unicode编码的值。

s = 'Hello world!'

print(max(s))  # 比较各字符的unicode值,w最大,输出w
print(min(s))  # 比较各字符的unicode值,' '空格字符串最小,输出一个空格
scores = ['李明', 84, 80, 95, 88, 96, 76, 65, 85, 98, 55]

print(max(scores[1:]))  # 切片去掉姓名元素,输出成绩中最大值98
print(min(scores[1:]))  # 切片去掉姓名元素,输出成绩中最小值55
ls = ['a', 'baa', 'bcde', 'de']

print(max(ls))            # 比较各字符的unicode值,d最大,输出de
print(min(ls))            # 比较各字符的unicode值,a最小,输出a

max() 和min()函数可用key关键字指定判定最大值和最小值的规则

ls = ['a', 'baa', 'bcde', 'de']
print(max(ls, key=len))   # 比较列表中各字符串长度,bcde最大
print(min(ls, key=len))   # 比较列表中各字符串长度,a最小,输出a

num = ['01', '9', '10', '5']
print(max(num))           # 比较列表中各字符串大小,'9'最大
print(max(num, key=int))  # 按各元素转整型后比较,'10'转整型10,最大

5.7 多变量赋值

在确定序列长度的情况下,可以应用Python多变量赋值语句把元组、列表和字符串等序列解包,将其中的多个元素分别赋值给多个独立的变量

x, y = (5, 10)   # 元组元素按顺序赋值给多个变量
print(f'x={x}, y={y}')  # x=5, y=10
print(x, y)              # 5 10
m, n = 3, 4      # 3,4为元组,元组元素按顺序赋值给多个变量
print(m, n)
a, b, c = 'xyz'  # 字符串中字符按顺序赋值给多个变量
print(a, b, c)
i, j = [3, 6]    # 列表元素按顺序赋值给多个变量
print(i, j)

多变量赋值时,序列长度必须与变量数量一致,否则将引发ValueError:

m,n = 3,4,5  # ValueError: too many values to unpack (expected 2)
m,n,k = 3,4  # ValueError: not enough values to unpack (expected 3, got 2)

多变量同时赋值常用于将在一行内输入的、用空格或逗号分隔的字符串根据分隔符切分为列表,然后用多变量赋值语句分别赋值给多个变量:

name, score = input().split()  # 'Tom 88' 切分后分别赋值给name和score
print(name, score)             # 输出:Tom 88

请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔。(假设输入数据一定有解)

# 假设输入数据一定有解
head, foot = map(int, input().split())  # 格式化输入
chicken = head - (foot - head * 2) // 2
rabbit = (foot - head * 2) // 2
print(f'有{chicken}只鸡,{rabbit}只兔')

5.8 字符串的创建

1. 将一个或多个字符放在引号中。

用单引号创建的字符串中可以包含双引号

s_string = '这是字符串,允许包含"双引号" '
print(s_string)

用双引号创建的字符串中可以包含单引号

d_string = "这是字符串,允许包含'单引号' "
print(d_string)

用三个引号括起的字符串可以包含单引号、双引号和回车符,即可以保留字符串的格式。

tri_string = '''这是字符串,允许包含"双引号"和'单引号' '''
print(tri_string)
poem = ''' 
驿外断桥边,寂寞开无主。
已是黄昏独自愁,更著风和雨。
无意苦争春,一任群芳妒。
零落成泥碾作尘,只有香如故。
'''
print(poem)

2. 用 str() 将其他对象转为字符串

num_str = str(371)   # 整数转字符串
sum_of_cube = 0      # 累加器初值0
for i in num_str:    # 遍历字符串中的字符
    sum_of_cube = sum_of_cube + int(i)** 3  # 各位上数字的3次方加和
print(sum_of_cube)   # 371

3. 读文件生成字符串

遍历用open() 函数创建的文件对象,每次循环把其中一行读取为一个以换行符“\n”结尾的字符串。

91.1748 81.64305 93.0148 84.629425 88.4625 ... 86.8273 90.89875 95.95105 60
# 每个循环读取到的数据分别为:
"91.1748\n"
"91.1748\n"
"81.64305\n"
"93.0148
"84.629425\n"
"88.4625\n"
...
"86.8273\n"
"90.89875\n"
"95.95105\n"
"60\n"

若文件中不包含空行,即每次读取的数据都是非空字符串的话,可以用float()函数将其转为浮点数:

print(float("91.1748\n"))  # 可得到浮点数91.1748,float()函数可自动去除字符串末尾的换行符“\n”
print(float("91.1748\n".strip()))  # 也可先用strip()去除字符串末尾的换行符“\n”
total, num = 0, 0                           # 总成绩初值为0,成绩数量初值0
with open('/data/bigfiles/4555b747-5799-4392-8599-bec63b0d32e1.txt') as score:  # 打开文本文件,创建文件对象命名为score
	for line in score:                      # 遍历文件,每行数据转浮点数累加得到总成绩
		total = total + float(line)         # 每行数据转浮点数累加得到总成绩
		num = num + 1                       # 统计成绩数量
avg = total / num                           # 计算平均成绩
print(round(avg, 2))                        # 79.66,保留2位小数
with open('/data/bigfiles/4555b747-5799-4392-8599-bec63b0d32e1.txt') as score:  # 打开文本文件,创建文件对象命名为score
	score = [float(line) for line in score]   # 列表推导式,每行数据转浮点数构建一个列表
avg = sum(score) / len(score)                  # 计算平均成绩
print(round(avg, 2))                           # 79.66,保留2位小数
列表推导式的具体用法可参考列表章节内容。
 

5.9 字符串常量

Python内置了一些字符串常量,在使用字符串常量时,需先import string,常用的字符串常量表如表6.1所示。

字符串常量字符集
string.ascii_letters'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.ascii_lowercase'abcdefghijklmnopqrstuvwxyz'
string.ascii_uppercase'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.digits'0123456789'
string.hexdigits'0123456789abcdefABCDEF'
string.octdigits'01234567'
string.punctuation'!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~'
string.printable'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~\t\n\r\x0b\x0c'
string.whitespace' \t\n\r\x0b\x0c'

输入一段文本,只保留其中的字母和数字,其他符号转为空格输出。

import string

txt = input()    # 输入一个字符串
text = ''        # 定义一个空字符串
for c in txt:   # 遍历文本
    if c in string.ascii_letters + string.digits:
        text = text + c   # 若是字母或数字,拼接到新字符串上
    else:
        text = text + ' '  # 否则拼接一个空格上去
print(text)      # 输出替换后的文本

很多系统设计密码时,会对用于密码的字符做一些限定。某平台的限制是:密码仅支持8~20位数字与大小写字母的组合,编程实现这个限制。 当包含不可用字符时,输出提示:'密码中含有不可用字符' 当长度小于8位或多于20位时输出提示,长度和字符都符合要求时,输出'密码符合规定'并输出用户设置的密码。

import string

# 密码仅支持8~20位数字与大小写字母的组合
password = input()  # 输入一个字符串
for c in password:  # 遍历文本
    if c not in string.ascii_letters + string.digits:
        print('密码中含有不可用字符')
        break
else:
    if len(password) >= 20:
        print('密码长度过长,限20位以内')
    elif len(password) < 8:
        print('密码长度不足8位')
    else:
        print('密码符合规定')
        print(f'你设置的密码是: {password}')

5.10 字符串遍历

字符串的遍历是指用循环的方法依次获取字符串中的每个字符

for c in string:        # 变量c依次取值为字符串中的字符
    语句块

string为字符串
循环次数为字符串中字符个数
变量c依次被赋值为字符串中的字符

输入一个字符串,逐行输出其中的字符。(竖向输出一个字符串)

my_string = input()  # 输入一个字符串
for c in my_string:  # 遍历,c依次取值为字符串中的字符
    print(c)

实例6.8 分类统计字符个数

输入一个字符串,统计字符串里英文字母、数字和其他字符的个数。

import string                      # 导入string库,使用库中字符会串常量
 
my_string = input()                # 输入一个字符串
letter, digit, other = 0, 0, 0     # 用于计数的3个变量均设初值为0
for c in my_string:                # 遍历,c依次取值为字符串中的字符
    if c in string.ascii_letters:  # 若c在字母常量中存在,则c是字母
        letter = letter + 1        # 字母计数加1个
    elif c in string.digits:       # 若c在数字常量中存在,则c是数字
        digit = digit + 1          # 数字计数加1个
    else:
        other = other + 1          # 否则其他字符计数加1个
print(f"字母{letter}个, 数字{digit}个, 其他字符{other}个")
# 123 The operators in and not in test for membership 456.
# 字母39个, 数字6个, 其他字符11个
my_string = input()                # 输入一个字符串
letter, digit, other = 0, 0, 0     # 用于计数的3个变量均设初值为0
for c in my_string:                # 遍历,c依次取值为字符串中的字符
    if c in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' :  # 若c在字母常量中存在,则c是字母
        letter = letter + 1        # 字母计数加1个
    elif c in '0123456789':       # 若c在数字常量中存在,则c是数字
        digit = digit + 1          # 数字计数加1个
    else:
        other = other + 1          # 否则其他字符计数加1个
print(f"字母{letter}个, 数字{digit}个, 其他字符{other}个")
# 123 The operators in and not in test for membership 456.
# 字母39个, 数字6个, 其他字符11个

5.11 常用字符串处理方法

常用字符串处理方法

方法名描述
str.upper()/str.lower()转换字符串str中所有字母为大写/小写
str.strip()用于移除字符串开头、结尾指定的字符(缺省时去掉空白字符,包括\t、\n、\r、\x0b、\x0c等)
str.join(iterable)以字符串str作为分隔符,将可迭代对象 iterable中字符串元素拼接为一个新的字符串。当iterable中存在非字符串元素时,返回一个TypeError 异常。
str.split(sep=None, maxsplit=-1)根据分隔符sep将字符串str切分成列表默认用空白字符 (包括 \n \r \t \f 和空格)切分对象且去掉字符串首尾的空白字符,可指定逗号或制表符等。maxsplit值存在且非 -1 时,最多切分maxsplit次。
str.count(sub[, start[, end]])返回 sub 在字符串str 里面出现的次数,如果start 或者 end 指定则返回指定范围内 sub出现的次数。
str.find(sub[, start[, end]])检测 sub 是否包含在字符串 str 中,如果是返回子字符串起始位置的索引值,否则返回-1。如果 start 和 end 指定范围,则检查是否包含在指定范围内。
str.replace(old, new[, count])把字符串str中的 old 替换成 new,如果 count 指定,则替换不超过 count 次,否则有多个old子串时全部替换为new。
str.index(sub[, start[, end]])与find()方法一样,返回子字符串起始位置的索引值,如果sub不在字符串 str中会报一个异常。
for <var> in <string>对字符串string进行遍历,依次将字符串string中的字符赋值给前面的变量var

str.upper()和str.lower()分别用于将其前面的字符串转换成大写字母和小写字母,如input().upper()可以将用户输入的字符串中的小写字母都转换成大写字母。
例如,网页上经常可以看到输入验证码时是不区分大小写的,其后台的程序一般会将用户的输入和图片中的字符都统一转成大写字母(或统一转成小写字母),再去一一比较是否一致。

verification_code = 'Q3Se'.upper()  # 网页上显示的校验码中的字母转为大写
code = input().upper()              # 将输入的字符符串中的字母转为大写
if code == verification_code:       # 如果输入的字符串转大写后与验证码相同
    print('验证码正确')
else:
    print('验证码错误')

rstrip()函数用于移除字符串结尾指定的字符
strip()函数用于移除字符串开头和结尾指定的字符

s = '0089840'
print(s)                              # 原字符串0089840
s1 = s.rstrip('0')                    # 移除结尾的0
print(f'去掉字符串末尾的指定字符:{s1}')  # 008984
s2 = s.strip('0')                     # 去除字符串首尾0
print(f'去掉字符串首尾的指定字符:{s2}')  # 8984

当参数缺省时,默认去掉字符串首尾的空白字符(不可见字符)
空白字符包括空格、“\t(制表符)”、“\n(换行符)”和“\r(回车符)”等。

s1 = '3.1415\n'                             # 末尾有换行符
s2 = '  5678  \t'                           # 末尾有制表符,开头结尾有空格
s2 = s2.strip()                             # 去除字符串首尾空白字符
print(f'去掉字符串末尾换行符:{s1.strip()}。')  # 008984
print(f'去掉字符串首尾空格和制表符:{s2}。')     # 8984

str.join(iterable) 以字符串str作为分隔符,将可迭代对象 iterable中字符串元素拼接为一个新的字符串。
当iterable中存在非字符串元素时,返回一个TypeError 异常。

ls = ['23', '59', '36']
print(':'.join(ls))  # 23:59:36
ls = ['23', '59', '36']
print(':'.join(ls))  # 23:59:36

str.split(sep=None, maxsplit=-1) 根据分隔符参数sep的值将字符串str切分成列表
缺省时根据空白字符切分,连续多个分隔字符当成一个字符处理,且忽略字符串开头和结尾的空白字符。 可指定逗号或制表符等符号做为分隔符号,指定用一个空格做分隔符时,多个空格将被切分多次
maxsplit值存在且非 -1 时,最多切分maxsplit次

s = '85 90 88 85'
ls = s.split()   # 缺省时根据空格切分
print(ls)        # ['85', '90', '88', '85']

sep参数值缺省或为None时,忽略字符串开头和结尾的空白字符,且连续多个空白字符被视为一个分隔符。

s = '   workshop             n.专题讨论会    '
x = s.split()
print(x)        # ['workshop', 'n.专题讨论会']
score = '85,90,88,85'
score_ls = score.split(',')  # 指定逗号为切分时的分隔符 
print(score_ls)              # ['85', '90', '88', '85']
word = 'about  adv. 大约; 左右; 将近;'
word_ls = word.split(maxsplit=1)  # maxsplit值存在且非 -1 时,最多切分maxsplit次
print(word_ls)                    # ['about', 'adv. 大约; 左右; 将近;'],2个元素

指定用一个空格做分隔符时,多个空格将被切分多次

s = '85 90    88 85'
ls = s.split(' ')  # 根据一个空格切分,有多个空格时将切分多次
print(ls)          # ['85', '90', '', '', '', '88', '85']

str.count(sub[, start[, end]])返回 子字符串sub在字符串str 里面出现的次数,如果start 或者 end 指定则返回指定范围内 sub出现的次数。

s = '武汉理工大学的武汉学生说武汉话很有武汉味儿'
print(s.count('武汉'))  # 4

str.replace(old, new[, count]) 把字符串str中的 old 替换成 new,如果 count 指定,则替换不超过 count 次,否则有多个old子串时全部替换为new。
替换后会产生一个新的字符串,所以要替换掉一个字符串中的多个字符,需要重复使用原字符串的名字。

import string

text = '''"This is great!" Hem said: "There's enough Cheese here to last us forever?" The little people felt happy and successful, and thought they were now secure.'''
symbol = string.punctuation      # '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
for c in symbol:                 # 遍历标点符号
    text = text.replace(c, ' ')  # 将标点符号替换为空格,重用名字text,下次循环替换新字符串中的符号
print(text.lower())              # 字母转小写后输出
print(text.split())              # 根据空格切分为列表
print(len(text.split()))         # 切分为列表后列表的长度就是原文中单词的数量

实例 6.9 从字符串中提取数据

tiobe网站每个月都会发布一个程序设计语言排名,网页https://www.tiobe.com/tiobe-index/%E4%B8%8A%E6%9C%89%E6%8E%92%E5%90%8D%E6%9B%B2%E7%BA%BF%EF%BC%9A 这个曲线的数据就在网页里,可以通过查看页面源代码看到以下数据:

[
    	{name : 'Python',data : [[Date.UTC(2001, 5, 30), 1.25], [Date.UTC(2001, 6, 30), 1.13], [Date.UTC(2001, 7, 30), 1.20], [Date.UTC(2001, 8, 28), 1.17], [Date.UTC(2001, 9, 26), 1.28], [Date.UTC(2001, 10, 28), 1.23], [Date.UTC(2001, 11, 31), 1.04], [Date.UTC(2002, 0, 30), 1.02], [Date.UTC(2002, 1, 27), 0.99], [Date.UTC(2002, 2, 29), 0.99], [Date.UTC(2002, 3, 29), 1.07], [Date.UTC(2002, 4, 29), 1.06], [Date.UTC(2002, 5, 29), 1.13], [Date.UTC(2002, 6, 31), 1.08], [Date.UTC(2002, 7, 29), 1.22], [Date.UTC(2002, 8, 29), 1.08], [Date.UTC(2002, 9, 30), 1.19], [Date.UTC(2002, 10, 29), 1.00], [Date.UTC(2002, 11, 31), 1.00], [Date.UTC(2003, 0, 31), 1.03], [Date.UTC(2003, 1, 28), 0.97], [Date.UTC(2003, 2, 31), 0.99], [Date.UTC(2003, 3, 30), 1.01], [Date.UTC(2003, 4, 30), 1.16], [Date.UTC(2003, 5, 30), 1.28], [Date.UTC(2003, 6, 31), 1.30], [Date.UTC(2003, 7, 31), 1.42], [Date.UTC(2003, 8, 30), 1.49], [Date.UTC(2003, 9, 31), 1.77], [Date.UTC(2003, 10, 30), 1.10], [Date.UTC(2003, 11, 31), 1.13], [Date.UTC(2004, 0, 31), 1.01], [Date.UTC(2004, 1, 29), 1.02], [Date.UTC(2004, 2, 31), 1.01], [Date.UTC(2004, 3, 30), 4.57], [Date.UTC(2004, 4, 30), 6.58], [Date.UTC(2004, 5, 30), 4.96], [Date.UTC(2004, 6, 31), 4.70], [Date.UTC(2004, 7, 30), 5.60], [Date.UTC(2004, 8, 30), 4.44], [Date.UTC(2004, 9, 31), 5.20], [Date.UTC(2004, 10, 30), 3.03], [Date.UTC(2004, 11, 31), 2.84], [Date.UTC(2005, 0, 31), 2.51], [Date.UTC(2005, 1, 28), 2.42], [Date.UTC(2005, 2, 31), 2.70], [Date.UTC(2005, 3, 30), 2.48], [Date.UTC(2005, 4, 31), 2.80], [Date.UTC(2005, 5, 30), 2.52], [Date.UTC(2005, 6, 31), 2.88], [Date.UTC(2005, 7, 31), 3.03], [Date.UTC(2005, 8, 30), 2.88], [Date.UTC(2005, 11, 3), 2.68], [Date.UTC(2006, 0, 4), 2.60], [Date.UTC(2006, 1, 2), 2.67], [Date.UTC(2006, 2, 1), 3.09], [Date.UTC(2006, 3, 2), 2.76], [Date.UTC(2006, 4, 1), 3.04], [Date.UTC(2006, 5, 1), 3.46], [Date.UTC(2006, 6, 2), 3.02], [Date.UTC(2006, 7, 2), 3.07], [Date.UTC(2006, 8, 2), 3.14], [Date.UTC(2006, 9, 1), 3.47], [Date.UTC(2006, 10, 2), 3.64], [Date.UTC(2006, 11, 1), 3.76], [Date.UTC(2007, 0, 2), 3.50], [Date.UTC(2007, 1, 3), 3.57], [Date.UTC(2007, 2, 3), 3.90], [Date.UTC(2007, 3, 1), 3.81], [Date.UTC(2007, 4, 5), 3.78], [Date.UTC(2007, 5, 2), 3.16], [Date.UTC(2007, 6, 2), 3.02], [Date.UTC(2007, 7, 5), 2.75], [Date.UTC(2007, 8, 2), 3.03], [Date.UTC(2007, 9, 4), 3.43], [Date.UTC(2007, 10, 4), 4.23], [Date.UTC(2007, 11, 3), 4.70], [Date.UTC(2008, 0, 3), 5.54], [Date.UTC(2008, 1, 7), 4.76], [Date.UTC(2008, 5, 1), 4.90], [Date.UTC(2008, 6, 2), 4.97], [Date.UTC(2008, 7, 3), 4.98], [Date.UTC(2008, 8, 3), 5.01], [Date.UTC(2008, 9, 6), 4.56], [Date.UTC(2008, 10, 2), 5.14], [Date.UTC(2008, 11, 3), 4.17], [Date.UTC(2009, 0, 2), 4.73], [Date.UTC(2009, 1, 1), 4.57], [Date.UTC(2009, 2, 5), 5.18], [Date.UTC(2009, 3, 7), 6.08], [Date.UTC(2009, 4, 1), 5.55], [Date.UTC(2009, 5, 4), 4.76], [Date.UTC(2009, 6, 2), 4.43], [Date.UTC(2009, 7, 1), 4.49], [Date.UTC(2009, 8, 5), 3.93], [Date.UTC(2009, 9, 2), 3.90], [Date.UTC(2009, 10, 2), 4.67], [Date.UTC(2009, 11, 2), 5.19], [Date.UTC(2010, 0, 5), 4.45], [Date.UTC(2010, 1, 7), 4.31], [Date.UTC(2010, 2, 7), 4.23], [Date.UTC(2010, 3, 5), 4.21], [Date.UTC(2010, 4, 15), 4.10], [Date.UTC(2010, 6, 6), 4.22], [Date.UTC(2010, 6, 30), 4.22], [Date.UTC(2010, 8, 11), 4.58], [Date.UTC(2010, 9, 2), 4.86], [Date.UTC(2010, 10, 3), 5.68], [Date.UTC(2010, 11, 7), 6.48], [Date.UTC(2011, 0, 2), 6.26], [Date.UTC(2011, 1, 8), 7.04], [Date.UTC(2011, 2, 8), 5.74], [Date.UTC(2011, 3, 3), 4.93], [Date.UTC(2011, 4, 2), 4.58], [Date.UTC(2011, 5, 5), 3.90], [Date.UTC(2011, 5, 27), 3.90], [Date.UTC(2011, 6, 8), 3.58], [Date.UTC(2011, 7, 3), 3.41], [Date.UTC(2011, 8, 10), 4.00], [Date.UTC(2011, 9, 9), 3.94], [Date.UTC(2011, 10, 7), 3.62], [Date.UTC(2011, 11, 4), 3.49], [Date.UTC(2012, 0, 8), 3.21], [Date.UTC(2012, 1, 5), 3.15], [Date.UTC(2012, 2, 11), 3.29], [Date.UTC(2012, 3, 8), 3.66], [Date.UTC(2012, 4, 9), 3.82], [Date.UTC(2012, 5, 10), 3.85], [Date.UTC(2012, 6, 4), 4.00], [Date.UTC(2012, 7, 10), 3.88], [Date.UTC(2012, 8, 2), 3.86], [Date.UTC(2012, 9, 5), 3.90], [Date.UTC(2012, 10, 4), 4.06], [Date.UTC(2012, 11, 2), 3.85], [Date.UTC(2013, 0, 5), 4.17], [Date.UTC(2013, 1, 8), 4.95], [Date.UTC(2013, 2, 11), 4.39], [Date.UTC(2013, 3, 7), 4.44], [Date.UTC(2013, 4, 8), 4.32], [Date.UTC(2013, 5, 9), 4.18], [Date.UTC(2013, 6, 7), 4.03], [Date.UTC(2013, 6, 12), 4.03], [Date.UTC(2013, 7, 4), 3.60], [Date.UTC(2013, 8, 11), 3.17], [Date.UTC(2013, 9, 10), 3.11], [Date.UTC(2013, 10, 9), 3.11], [Date.UTC(2013, 11, 6), 2.21], [Date.UTC(2014, 0, 1), 2.37], [Date.UTC(2014, 1, 8), 2.16], [Date.UTC(2014, 2, 3), 2.02], [Date.UTC(2014, 3, 10), 1.99], [Date.UTC(2014, 4, 7), 3.06], [Date.UTC(2014, 5, 8), 2.71], [Date.UTC(2014, 6, 6), 2.66], [Date.UTC(2014, 7, 11), 3.12], [Date.UTC(2014, 8, 1), 2.78], [Date.UTC(2014, 9, 3), 2.33], [Date.UTC(2014, 10, 8), 2.59], [Date.UTC(2014, 11, 7), 2.29], [Date.UTC(2015, 0, 6), 2.61], [Date.UTC(2015, 1, 5), 2.88], [Date.UTC(2015, 2, 7), 2.61], [Date.UTC(2015, 3, 13), 2.69], [Date.UTC(2015, 4, 13), 3.72], [Date.UTC(2015, 5, 6), 4.00], [Date.UTC(2015, 6, 12), 4.26], [Date.UTC(2015, 7, 6), 4.07], [Date.UTC(2015, 8, 5), 3.66], [Date.UTC(2015, 9, 4), 4.51], [Date.UTC(2015, 10, 7), 3.77], [Date.UTC(2015, 11, 4), 4.43], [Date.UTC(2016, 0, 2), 3.85], [Date.UTC(2016, 1, 2), 4.18], [Date.UTC(2016, 2, 3), 4.26], [Date.UTC(2016, 3, 7), 3.33], [Date.UTC(2016, 4, 6), 3.79], [Date.UTC(2016, 5, 5), 3.90], [Date.UTC(2016, 6, 4), 4.17], [Date.UTC(2016, 7, 6), 4.40], [Date.UTC(2016, 8, 8), 4.30], [Date.UTC(2016, 9, 7), 3.77], [Date.UTC(2016, 10, 5), 3.57], [Date.UTC(2016, 11, 4), 4.24], [Date.UTC(2017, 0, 7), 3.46], [Date.UTC(2017, 1, 8), 4.04], [Date.UTC(2017, 2, 7), 3.92], [Date.UTC(2017, 3, 9), 3.46], [Date.UTC(2017, 4, 6), 3.55], [Date.UTC(2017, 5, 3), 4.33], [Date.UTC(2017, 6, 7), 3.54], [Date.UTC(2017, 7, 2), 3.69], [Date.UTC(2017, 8, 6), 2.98], [Date.UTC(2017, 9, 5), 3.80], [Date.UTC(2017, 10, 12), 4.48], [Date.UTC(2017, 11, 9), 3.78], [Date.UTC(2018, 0, 3), 4.68], [Date.UTC(2018, 1, 8), 5.17], [Date.UTC(2018, 2, 7), 5.87], [Date.UTC(2018, 3, 1), 5.80], [Date.UTC(2018, 4, 6), 5.19], [Date.UTC(2018, 5, 10), 5.76], [Date.UTC(2018, 6, 7), 6.36], [Date.UTC(2018, 7, 1), 6.99], [Date.UTC(2018, 8, 3), 7.65], [Date.UTC(2018, 9, 5), 7.16], [Date.UTC(2018, 10, 8), 7.68], [Date.UTC(2018, 11, 2), 8.38], [Date.UTC(2019, 0, 4), 8.29], [Date.UTC(2019, 1, 6), 7.57], [Date.UTC(2019, 2, 2), 8.26], [Date.UTC(2019, 3, 7), 8.17], [Date.UTC(2019, 4, 4), 7.83], [Date.UTC(2019, 5, 9), 8.53], [Date.UTC(2019, 6, 6), 9.26], [Date.UTC(2019, 7, 5), 10.02], [Date.UTC(2019, 8, 9), 9.87], [Date.UTC(2019, 9, 5), 9.09], [Date.UTC(2019, 10, 3), 9.84], [Date.UTC(2019, 11, 6), 10.31], [Date.UTC(2020, 0, 5), 9.70], [Date.UTC(2020, 1, 4), 9.35], [Date.UTC(2020, 2, 4), 10.11], [Date.UTC(2020, 3, 2), 9.31], [Date.UTC(2020, 4, 2), 9.12], [Date.UTC(2020, 5, 1), 8.36], [Date.UTC(2020, 6, 4), 9.09], [Date.UTC(2020, 7, 2), 9.69], [Date.UTC(2020, 8, 6), 10.47], [Date.UTC(2020, 9, 4), 11.28], [Date.UTC(2020, 10, 3), 12.12], [Date.UTC(2020, 11, 3), 12.21], [Date.UTC(2021, 0, 2), 11.72], [Date.UTC(2021, 1, 6), 10.86], [Date.UTC(2021, 2, 4), 10.31], [Date.UTC(2021, 3, 4), 11.03], [Date.UTC(2021, 4, 2), 11.87], [Date.UTC(2021, 5, 5), 11.84], [Date.UTC(2021, 6, 4), 10.96], [Date.UTC(2021, 7, 3), 11.86], [Date.UTC(2021, 8, 11), 11.67], [Date.UTC(2021, 9, 6), 11.27], [Date.UTC(2021, 10, 6), 11.77], [Date.UTC(2021, 11, 5), 12.90], [Date.UTC(2022, 0, 1), 13.58], [Date.UTC(2022, 1, 2), 15.33], [Date.UTC(2022, 2, 2), 14.26], [Date.UTC(2022, 3, 5), 13.92], [Date.UTC(2022, 4, 3), 12.74], [Date.UTC(2022, 5, 4), 12.20], [Date.UTC(2022, 6, 2), 13.44], [Date.UTC(2022, 7, 2), 15.63], [Date.UTC(2022, 8, 1), 15.74], [Date.UTC(2022, 9, 1), 17.08], [Date.UTC(2022, 10, 1), 17.18], [Date.UTC(2022, 11, 2), 16.66], [Date.UTC(2022, 11, 29), 16.36], [Date.UTC(2023, 1, 1), 15.49], [Date.UTC(2023, 2, 2), 14.83], [Date.UTC(2023, 3, 1), 14.51], [Date.UTC(2023, 4, 2), 13.45], [Date.UTC(2023, 5, 2), 12.46], [Date.UTC(2023, 6, 2), 13.42], [Date.UTC(2023, 7, 4), 13.33], [Date.UTC(2023, 8, 2), 14.16], [Date.UTC(2023, 9, 4), 14.82], [Date.UTC(2023, 10, 2), 14.16], [Date.UTC(2023, 11, 4), 13.86], [Date.UTC(2024, 0, 2), 13.97], [Date.UTC(2024, 1, 2), 15.16], [Date.UTC(2024, 2, 1), 15.63], [Date.UTC(2024, 3, 3), 16.41], [Date.UTC(2024, 4, 1), 16.33]]}, {name : 'C',data : [[Date.UTC(2001, 5, 30), 20.24], [Date.UTC(2001, 6, 30), 20.77], [Date.UTC(2001, 7, 30), 20.75], [Date.UTC(2001, 8, 28), 20.77], [Date.UTC(2001, 9, 26), 19.75], [Date.UTC(2001, 10, 28), 19.21], [Date.UTC(2001, 11, 31), 20.14], [Date.UTC(2002, 0, 30), 18.83], [Date.UTC(2002, 1, 27), 19.89], [Date.UTC(2002, 2, 29), 19.85], [Date.UTC(2002, 3, 29), 19.82], [Date.UTC(2002, 4, 29), 19.99], [Date.UTC(2002, 5, 29), 19.57], [Date.UTC(2002, 6, 31), 19.25], [Date.UTC(2002, 7, 29), 18.16], [Date.UTC(2002, 8, 29), 18.70], [Date.UTC(2002, 9, 30), 18.73], [Date.UTC(2002, 10, 29), 17.50], [Date.UTC(2002, 11, 31), 17.26], [Date.UTC(2003, 0, 31), 18.25], [Date.UTC(2003, 1, 28), 18.54], [Date.UTC(2003, 2, 31), 17.21], [Date.UTC(2003, 3, 30), 18.02], [Date.UTC(2003, 4, 30), 18.50], [Date.UTC(2003, 5, 30), 18.52], [Date.UTC(2003, 6, 31), 17.97], [Date.UTC(2003, 7, 31), 17.78], [Date.UTC(2003, 8, 30), 18.31], [Date.UTC(2003, 9, 31), 17.00], [Date.UTC(2003, 10, 30), 18.47], [Date.UTC(2003, 11, 31), 18.60], [Date.UTC(2004, 0, 31), 18.20], [Date.UTC(2004, 1, 29), 18.93], [Date.UTC(2004, 2, 31), 17.75], [Date.UTC(2004, 3, 30), 17.95], [Date.UTC(2004, 4, 30), 18.29], [Date.UTC(2004, 5, 30), 17.14], [Date.UTC(2004, 6, 31), 16.33], [Date.UTC(2004, 7, 30), 17.12], [Date.UTC(2004, 8, 30), 18.17], [Date.UTC(2004, 9, 31), 17.99], [Date.UTC(2004, 10, 30), 19.70], [Date.UTC(2004, 11, 31), 20.71], [Date.UTC(2005, 0, 31), 19.82], [Date.UTC(2005, 1, 28), 19.47], [Date.UTC(2005, 2, 31), 18.63], [Date.UTC(2005, 3, 30), 18.52], [Date.UTC(2005, 4, 31), 19.37], [Date.UTC(2005, 5, 30), 19.85], [Date.UTC(2005, 6, 31), 19.47], [Date.UTC(2005, 7, 31), 19.16], [Date.UTC(2005, 8, 30), 18.77], [Date.UTC(2005, 11, 3), 19.63], [Date.UTC(2006, 0, 4), 19.01], [Date.UTC(2006, 1, 2), 18.33], [Date.UTC(2006, 2, 1), 17.79], [Date.UTC(2006, 3, 2), 17.69], [Date.UTC(2006, 4, 1), 17.69], [Date.UTC(2006, 5, 1), 18.25], [Date.UTC(2006, 6, 2), 17.83], [Date.UTC(2006, 7, 2), 17.43], [Date.UTC(2006, 8, 2), 18.06], [Date.UTC(2006, 9, 1), 17.66], [Date.UTC(2006, 10, 2), 17.20], [Date.UTC(2006, 11, 1), 16.62], [Date.UTC(2007, 0, 2), 15.81], [Date.UTC(2007, 1, 3), 16.10], [Date.UTC(2007, 2, 3), 15.63], [Date.UTC(2007, 3, 1), 14.94], [Date.UTC(2007, 4, 5), 15.15], [Date.UTC(2007, 5, 2), 15.97], [Date.UTC(2007, 6, 2), 16.36], [Date.UTC(2007, 7, 5), 15.70], [Date.UTC(2007, 8, 2), 14.91], [Date.UTC(2007, 9, 4), 14.59], [Date.UTC(2007, 10, 4), 13.97], [Date.UTC(2007, 11, 3), 13.17], [Date.UTC(2008, 0, 3), 13.92], [Date.UTC(2008, 1, 7), 14.86], [Date.UTC(2008, 5, 1), 15.51], [Date.UTC(2008, 6, 2), 15.95], [Date.UTC(2008, 7, 3), 16.18], [Date.UTC(2008, 8, 3), 15.38], [Date.UTC(2008, 9, 6), 15.57], [Date.UTC(2008, 10, 2), 15.28], [Date.UTC(2008, 11, 3), 15.02], [Date.UTC(2009, 0, 2), 15.93], [Date.UTC(2009, 1, 1), 15.84], [Date.UTC(2009, 2, 5), 15.86], [Date.UTC(2009, 3, 7), 15.47], [Date.UTC(2009, 4, 1), 16.13], [Date.UTC(2009, 5, 4), 16.78], [Date.UTC(2009, 6, 2), 17.32], [Date.UTC(2009, 7, 1), 17.22], [Date.UTC(2009, 8, 5), 16.86], [Date.UTC(2009, 9, 2), 16.84], [Date.UTC(2009, 10, 2), 17.32], [Date.UTC(2009, 11, 2), 16.28], [Date.UTC(2010, 0, 5), 16.22], [Date.UTC(2010, 1, 7), 16.60], [Date.UTC(2010, 2, 7), 17.28], [Date.UTC(2010, 3, 5), 18.06], [Date.UTC(2010, 4, 15), 18.19], [Date.UTC(2010, 6, 6), 18.48], [Date.UTC(2010, 6, 30), 17.87], [Date.UTC(2010, 8, 11), 17.15], [Date.UTC(2010, 9, 2), 17.18], [Date.UTC(2010, 10, 3), 16.72], [Date.UTC(2010, 11, 7), 16.08], [Date.UTC(2011, 0, 2), 15.82], [Date.UTC(2011, 1, 8), 14.99], [Date.UTC(2011, 2, 8), 15.26], [Date.UTC(2011, 3, 3), 16.16], [Date.UTC(2011, 4, 2), 16.17], [Date.UTC(2011, 5, 5), 16.28], [Date.UTC(2011, 5, 27), 16.28], [Date.UTC(2011, 6, 8), 17.28], [Date.UTC(2011, 7, 3), 17.39], [Date.UTC(2011, 8, 10), 18.00], [Date.UTC(2011, 9, 9), 17.71], [Date.UTC(2011, 10, 7), 17.32], [Date.UTC(2011, 11, 4), 17.06], [Date.UTC(2012, 0, 8), 16.97], [Date.UTC(2012, 1, 5), 16.52], [Date.UTC(2012, 2, 11), 17.09], [Date.UTC(2012, 3, 8), 17.55], [Date.UTC(2012, 4, 9), 17.35], [Date.UTC(2012, 5, 10), 17.72], [Date.UTC(2012, 6, 4), 18.33], [Date.UTC(2012, 7, 10), 18.94], [Date.UTC(2012, 8, 2), 19.30], [Date.UTC(2012, 9, 5), 19.82], [Date.UTC(2012, 10, 4), 19.22], [Date.UTC(2012, 11, 2), 18.70], [Date.UTC(2013, 0, 5), 17.85], [Date.UTC(2013, 1, 8), 17.08], [Date.UTC(2013, 2, 11), 17.14], [Date.UTC(2013, 3, 7), 17.86], [Date.UTC(2013, 4, 8), 18.73], [Date.UTC(2013, 5, 9), 17.81], [Date.UTC(2013, 6, 7), 17.63], [Date.UTC(2013, 6, 12), 17.63], [Date.UTC(2013, 7, 4), 15.97], [Date.UTC(2013, 8, 11), 16.98], [Date.UTC(2013, 9, 10), 17.25], [Date.UTC(2013, 10, 9), 18.16], [Date.UTC(2013, 11, 6), 17.89], [Date.UTC(2014, 0, 1), 17.94], [Date.UTC(2014, 1, 8), 18.33], [Date.UTC(2014, 2, 3), 17.53], [Date.UTC(2014, 3, 10), 17.63], [Date.UTC(2014, 4, 7), 16.93], [Date.UTC(2014, 5, 8), 16.19], [Date.UTC(2014, 6, 6), 17.14], [Date.UTC(2014, 7, 11), 16.40], [Date.UTC(2014, 8, 1), 16.72], [Date.UTC(2014, 9, 3), 17.66], [Date.UTC(2014, 10, 8), 17.47], [Date.UTC(2014, 11, 7), 17.59], [Date.UTC(2015, 0, 6), 16.70], [Date.UTC(2015, 1, 5), 16.49], [Date.UTC(2015, 2, 7), 16.64], [Date.UTC(2015, 3, 13), 15.75], [Date.UTC(2015, 4, 13), 16.85], [Date.UTC(2015, 5, 6), 16.79], [Date.UTC(2015, 6, 12), 16.15], [Date.UTC(2015, 7, 6), 14.73], [Date.UTC(2015, 8, 5), 15.62], [Date.UTC(2015, 9, 4), 16.19], [Date.UTC(2015, 10, 7), 17.15], [Date.UTC(2015, 11, 4), 16.46], [Date.UTC(2016, 0, 2), 16.04], [Date.UTC(2016, 1, 2), 15.59], [Date.UTC(2016, 2, 3), 14.60], [Date.UTC(2016, 3, 7), 13.91], [Date.UTC(2016, 4, 6), 13.22], [Date.UTC(2016, 5, 5), 12.38], [Date.UTC(2016, 6, 4), 12.24], [Date.UTC(2016, 7, 6), 11.30], [Date.UTC(2016, 8, 8), 10.95], [Date.UTC(2016, 9, 7), 9.84], [Date.UTC(2016, 10, 5), 9.20], [Date.UTC(2016, 11, 4), 8.73], [Date.UTC(2017, 0, 7), 9.35], [Date.UTC(2017, 1, 8), 8.44], [Date.UTC(2017, 2, 7), 7.74], [Date.UTC(2017, 3, 9), 6.97], [Date.UTC(2017, 4, 6), 7.00], [Date.UTC(2017, 5, 3), 6.85], [Date.UTC(2017, 6, 7), 7.32], [Date.UTC(2017, 7, 2), 6.48], [Date.UTC(2017, 8, 6), 7.38], [Date.UTC(2017, 9, 5), 8.37], [Date.UTC(2017, 10, 12), 9.29], [Date.UTC(2017, 11, 9), 10.16], [Date.UTC(2018, 0, 3), 11.04], [Date.UTC(2018, 1, 8), 11.86], [Date.UTC(2018, 2, 7), 12.76], [Date.UTC(2018, 3, 1), 13.59], [Date.UTC(2018, 4, 6), 14.00], [Date.UTC(2018, 5, 10), 14.94], [Date.UTC(2018, 6, 7), 14.66], [Date.UTC(2018, 7, 1), 14.97], [Date.UTC(2018, 8, 3), 15.45], [Date.UTC(2018, 9, 5), 15.38], [Date.UTC(2018, 10, 8), 14.40], [Date.UTC(2018, 11, 2), 14.28], [Date.UTC(2019, 0, 4), 13.34], [Date.UTC(2019, 1, 6), 12.42], [Date.UTC(2019, 2, 2), 13.31], [Date.UTC(2019, 3, 7), 14.08], [Date.UTC(2019, 4, 4), 14.24], [Date.UTC(2019, 5, 9), 13.30], [Date.UTC(2019, 6, 6), 14.21], [Date.UTC(2019, 7, 5), 15.15], [Date.UTC(2019, 8, 9), 15.21], [Date.UTC(2019, 9, 5), 16.18], [Date.UTC(2019, 10, 3), 16.04], [Date.UTC(2019, 11, 6), 16.09], [Date.UTC(2020, 0, 5), 15.77], [Date.UTC(2020, 1, 4), 16.77], [Date.UTC(2020, 2, 4), 16.33], [Date.UTC(2020, 3, 2), 16.72], [Date.UTC(2020, 4, 2), 17.07], [Date.UTC(2020, 5, 1), 17.19], [Date.UTC(2020, 6, 4), 16.45], [Date.UTC(2020, 7, 2), 16.98], [Date.UTC(2020, 8, 6), 15.95], [Date.UTC(2020, 9, 4), 16.95], [Date.UTC(2020, 10, 3), 16.21], [Date.UTC(2020, 11, 3), 16.48], [Date.UTC(2021, 0, 2), 17.38], [Date.UTC(2021, 1, 6), 16.34], [Date.UTC(2021, 2, 4), 15.33], [Date.UTC(2021, 3, 4), 14.32], [Date.UTC(2021, 4, 2), 13.38], [Date.UTC(2021, 5, 5), 12.54], [Date.UTC(2021, 6, 4), 11.63], [Date.UTC(2021, 7, 3), 12.57], [Date.UTC(2021, 8, 11), 11.83], [Date.UTC(2021, 9, 6), 11.16], [Date.UTC(2021, 10, 6), 10.72], [Date.UTC(2021, 11, 5), 11.80], [Date.UTC(2022, 0, 1), 12.44], [Date.UTC(2022, 1, 2), 14.08], [Date.UTC(2022, 2, 2), 13.06], [Date.UTC(2022, 3, 5), 12.71], [Date.UTC(2022, 4, 3), 11.59], [Date.UTC(2022, 5, 4), 11.91], [Date.UTC(2022, 6, 2), 13.13], [Date.UTC(2022, 7, 2), 14.76], [Date.UTC(2022, 8, 1), 13.96], [Date.UTC(2022, 9, 1), 15.21], [Date.UTC(2022, 10, 1), 15.08], [Date.UTC(2022, 11, 2), 16.56], [Date.UTC(2022, 11, 29), 16.26], [Date.UTC(2023, 1, 1), 15.39], [Date.UTC(2023, 2, 2), 14.73], [Date.UTC(2023, 3, 1), 14.41], [Date.UTC(2023, 4, 2), 13.35], [Date.UTC(2023, 5, 2), 12.37], [Date.UTC(2023, 6, 2), 11.56], [Date.UTC(2023, 7, 4), 11.41], [Date.UTC(2023, 8, 2), 11.27], [Date.UTC(2023, 9, 4), 12.08], [Date.UTC(2023, 10, 2), 11.77], [Date.UTC(2023, 11, 4), 11.44], [Date.UTC(2024, 0, 2), 11.44], [Date.UTC(2024, 1, 2), 10.97], [Date.UTC(2024, 2, 1), 11.17], [Date.UTC(2024, 3, 3), 10.21], [Date.UTC(2024, 4, 1), 9.98]]}, {name : 'C++',data : [[Date.UTC(2001, 5, 30), 14.20], [Date.UTC(2001, 6, 30), 16.11], [Date.UTC(2001, 7, 30), 16.12], [Date.UTC(2001, 8, 28), 15.85], [Date.UTC(2001, 9, 26), 16.10], [Date.UTC(2001, 10, 28), 15.67], [Date.UTC(2001, 11, 31), 14.96], [Date.UTC(2002, 0, 30), 15.18], [Date.UTC(2002, 1, 27), 15.54], [Date.UTC(2002, 2, 29), 15.91], [Date.UTC(2002, 3, 29), 15.37], [Date.UTC(2002, 4, 29), 14.86], [Date.UTC(2002, 5, 29), 14.18], [Date.UTC(2002, 6, 31), 14.94], [Date.UTC(2002, 7, 29), 14.77], [Date.UTC(2002, 8, 29), 15.90], [Date.UTC(2002, 9, 30), 15.03], [Date.UTC(2002, 10, 29), 13.64], [Date.UTC(2002, 11, 31), 13.19], [Date.UTC(2003, 0, 31), 14.63], [Date.UTC(2003, 1, 28), 15.53], [Date.UTC(2003, 2, 31), 14.57], [Date.UTC(2003, 3, 30), 15.80], [Date.UTC(2003, 4, 30), 15.58], [Date.UTC(2003, 5, 30), 16.72], [Date.UTC(2003, 6, 31), 16.58], [Date.UTC(2003, 7, 31), 17.53], [Date.UTC(2003, 8, 30), 16.17], [Date.UTC(2003, 9, 31), 16.31], [Date.UTC(2003, 10, 30), 17.42], [Date.UTC(2003, 11, 31), 16.08], [Date.UTC(2004, 0, 31), 15.71], [Date.UTC(2004, 1, 29), 14.50], [Date.UTC(2004, 2, 31), 15.99], [Date.UTC(2004, 3, 30), 12.27], [Date.UTC(2004, 4, 30), 12.55], [Date.UTC(2004, 5, 30), 13.44], [Date.UTC(2004, 6, 31), 15.31], [Date.UTC(2004, 7, 30), 14.92], [Date.UTC(2004, 8, 30), 15.02], [Date.UTC(2004, 9, 31), 13.86], [Date.UTC(2004, 10, 30), 11.91], [Date.UTC(2004, 11, 31), 11.93], [Date.UTC(2005, 0, 31), 11.34], [Date.UTC(2005, 1, 28), 11.63], [Date.UTC(2005, 2, 31), 10.19], [Date.UTC(2005, 3, 30), 9.90], [Date.UTC(2005, 4, 31), 9.72], [Date.UTC(2005, 5, 30), 11.06], [Date.UTC(2005, 6, 31), 10.51], [Date.UTC(2005, 7, 31), 11.17], [Date.UTC(2005, 8, 30), 11.82], [Date.UTC(2005, 11, 3), 11.03], [Date.UTC(2006, 0, 4), 11.46], [Date.UTC(2006, 1, 2), 11.30], [Date.UTC(2006, 2, 1), 11.16], [Date.UTC(2006, 3, 2), 10.90], [Date.UTC(2006, 4, 1), 10.94], [Date.UTC(2006, 5, 1), 10.67], [Date.UTC(2006, 6, 2), 9.78], [Date.UTC(2006, 7, 2), 10.25], [Date.UTC(2006, 8, 2), 10.75], [Date.UTC(2006, 9, 1), 11.06], [Date.UTC(2006, 10, 2), 11.05], [Date.UTC(2006, 11, 1), 10.41], [Date.UTC(2007, 0, 2), 10.42], [Date.UTC(2007, 1, 3), 10.77], [Date.UTC(2007, 2, 3), 11.11], [Date.UTC(2007, 3, 1), 10.72], [Date.UTC(2007, 4, 5), 10.11], [Date.UTC(2007, 5, 2), 11.12], [Date.UTC(2007, 6, 2), 10.50], [Date.UTC(2007, 7, 5), 10.11], [Date.UTC(2007, 8, 2), 9.94], [Date.UTC(2007, 9, 4), 9.58], [Date.UTC(2007, 10, 4), 8.75], [Date.UTC(2007, 11, 3), 7.87], [Date.UTC(2008, 0, 3), 8.73], [Date.UTC(2008, 1, 7), 9.27], [Date.UTC(2008, 5, 1), 10.81], [Date.UTC(2008, 6, 2), 10.69], [Date.UTC(2008, 7, 3), 10.06], [Date.UTC(2008, 8, 3), 10.72], [Date.UTC(2008, 9, 6), 10.95], [Date.UTC(2008, 10, 2), 10.36], [Date.UTC(2008, 11, 3), 10.10], [Date.UTC(2009, 0, 2), 10.12], [Date.UTC(2009, 1, 1), 9.63], [Date.UTC(2009, 2, 5), 10.36], [Date.UTC(2009, 3, 7), 10.74], [Date.UTC(2009, 4, 1), 11.07], [Date.UTC(2009, 5, 4), 10.59], [Date.UTC(2009, 6, 2), 10.42], [Date.UTC(2009, 7, 1), 10.50], [Date.UTC(2009, 8, 5), 9.99], [Date.UTC(2009, 9, 2), 9.88], [Date.UTC(2009, 10, 2), 10.00], [Date.UTC(2009, 11, 2), 9.18], [Date.UTC(2010, 0, 5), 9.71], [Date.UTC(2010, 1, 7), 9.45], [Date.UTC(2010, 2, 7), 9.61], [Date.UTC(2010, 3, 5), 9.71], [Date.UTC(2010, 4, 15), 10.38], [Date.UTC(2010, 6, 6), 10.47], [Date.UTC(2010, 6, 30), 9.66], [Date.UTC(2010, 8, 11), 9.81], [Date.UTC(2010, 9, 2), 9.80], [Date.UTC(2010, 10, 3), 9.50], [Date.UTC(2010, 11, 7), 9.01], [Date.UTC(2011, 0, 2), 8.78], [Date.UTC(2011, 1, 8), 8.19], [Date.UTC(2011, 2, 8), 8.75], [Date.UTC(2011, 3, 3), 9.23], [Date.UTC(2011, 4, 2), 9.15], [Date.UTC(2011, 5, 5), 9.83], [Date.UTC(2011, 5, 27), 9.83], [Date.UTC(2011, 6, 8), 9.02], [Date.UTC(2011, 7, 3), 8.43], [Date.UTC(2011, 8, 10), 8.85], [Date.UTC(2011, 9, 9), 9.07], [Date.UTC(2011, 10, 7), 8.08], [Date.UTC(2011, 11, 4), 8.25], [Date.UTC(2012, 0, 8), 8.05], [Date.UTC(2012, 1, 5), 7.85], [Date.UTC(2012, 2, 11), 8.05], [Date.UTC(2012, 3, 8), 8.90], [Date.UTC(2012, 4, 9), 9.82], [Date.UTC(2012, 5, 10), 9.36], [Date.UTC(2012, 6, 4), 9.12], [Date.UTC(2012, 7, 10), 9.33], [Date.UTC(2012, 8, 2), 9.15], [Date.UTC(2012, 9, 5), 9.26], [Date.UTC(2012, 10, 4), 9.70], [Date.UTC(2012, 11, 2), 9.20], [Date.UTC(2013, 0, 5), 9.14], [Date.UTC(2013, 1, 8), 8.76], [Date.UTC(2013, 2, 11), 9.11], [Date.UTC(2013, 3, 7), 9.71], [Date.UTC(2013, 4, 8), 9.20], [Date.UTC(2013, 5, 9), 8.82], [Date.UTC(2013, 6, 7), 8.75], [Date.UTC(2013, 6, 12), 8.75], [Date.UTC(2013, 7, 4), 9.37], [Date.UTC(2013, 8, 11), 8.66], [Date.UTC(2013, 9, 10), 8.66], [Date.UTC(2013, 10, 9), 8.37], [Date.UTC(2013, 11, 6), 8.27], [Date.UTC(2014, 0, 1), 7.56], [Date.UTC(2014, 1, 8), 6.89], [Date.UTC(2014, 2, 3), 6.31], [Date.UTC(2014, 3, 10), 6.14], [Date.UTC(2014, 4, 7), 5.99], [Date.UTC(2014, 5, 8), 6.43], [Date.UTC(2014, 6, 6), 5.52], [Date.UTC(2014, 7, 11), 4.70], [Date.UTC(2014, 8, 1), 4.67], [Date.UTC(2014, 9, 3), 4.87], [Date.UTC(2014, 10, 8), 6.10], [Date.UTC(2014, 11, 7), 6.10], [Date.UTC(2015, 0, 6), 6.70], [Date.UTC(2015, 1, 5), 6.61], [Date.UTC(2015, 2, 7), 6.64], [Date.UTC(2015, 3, 13), 6.96], [Date.UTC(2015, 4, 13), 7.87], [Date.UTC(2015, 5, 6), 7.76], [Date.UTC(2015, 6, 12), 8.64], [Date.UTC(2015, 7, 6), 7.74], [Date.UTC(2015, 8, 5), 6.78], [Date.UTC(2015, 9, 4), 5.75], [Date.UTC(2015, 10, 7), 6.20], [Date.UTC(2015, 11, 4), 5.94], [Date.UTC(2016, 0, 2), 6.91], [Date.UTC(2016, 1, 2), 6.91], [Date.UTC(2016, 2, 3), 6.72], [Date.UTC(2016, 3, 7), 5.92], [Date.UTC(2016, 4, 6), 6.70], [Date.UTC(2016, 5, 5), 6.20], [Date.UTC(2016, 6, 4), 6.31], [Date.UTC(2016, 7, 6), 5.80], [Date.UTC(2016, 8, 8), 6.66], [Date.UTC(2016, 9, 7), 5.80], [Date.UTC(2016, 10, 5), 5.41], [Date.UTC(2016, 11, 4), 5.34], [Date.UTC(2017, 0, 7), 6.30], [Date.UTC(2017, 1, 8), 5.43], [Date.UTC(2017, 2, 7), 5.18], [Date.UTC(2017, 3, 9), 4.55], [Date.UTC(2017, 4, 6), 4.75], [Date.UTC(2017, 5, 3), 5.72], [Date.UTC(2017, 6, 7), 5.58], [Date.UTC(2017, 7, 2), 5.55], [Date.UTC(2017, 8, 6), 5.56], [Date.UTC(2017, 9, 5), 5.01], [Date.UTC(2017, 10, 12), 5.34], [Date.UTC(2017, 11, 9), 4.72], [Date.UTC(2018, 0, 3), 5.60], [Date.UTC(2018, 1, 8), 5.73], [Date.UTC(2018, 2, 7), 6.45], [Date.UTC(2018, 3, 1), 7.22], [Date.UTC(2018, 4, 6), 7.67], [Date.UTC(2018, 5, 10), 8.34], [Date.UTC(2018, 6, 7), 7.62], [Date.UTC(2018, 7, 1), 7.47], [Date.UTC(2018, 8, 3), 7.39], [Date.UTC(2018, 9, 5), 7.59], [Date.UTC(2018, 10, 8), 8.28], [Date.UTC(2018, 11, 2), 7.56], [Date.UTC(2019, 0, 4), 8.16], [Date.UTC(2019, 1, 6), 7.44], [Date.UTC(2019, 2, 2), 8.13], [Date.UTC(2019, 3, 7), 8.84], [Date.UTC(2019, 4, 4), 8.10], [Date.UTC(2019, 5, 9), 7.38], [Date.UTC(2019, 6, 6), 6.70], [Date.UTC(2019, 7, 5), 6.06], [Date.UTC(2019, 8, 9), 5.64], [Date.UTC(2019, 9, 5), 6.23], [Date.UTC(2019, 10, 3), 5.60], [Date.UTC(2019, 11, 6), 6.20], [Date.UTC(2020, 0, 5), 5.57], [Date.UTC(2020, 1, 4), 6.16], [Date.UTC(2020, 2, 4), 6.79], [Date.UTC(2020, 3, 2), 6.78], [Date.UTC(2020, 4, 2), 6.13], [Date.UTC(2020, 5, 1), 5.95], [Date.UTC(2020, 6, 4), 6.21], [Date.UTC(2020, 7, 2), 6.84], [Date.UTC(2020, 8, 6), 7.11], [Date.UTC(2020, 9, 4), 6.94], [Date.UTC(2020, 10, 3), 7.60], [Date.UTC(2020, 11, 3), 6.91], [Date.UTC(2021, 0, 2), 7.56], [Date.UTC(2021, 1, 6), 6.88], [Date.UTC(2021, 2, 4), 6.52], [Date.UTC(2021, 3, 4), 7.14], [Date.UTC(2021, 4, 2), 7.81], [Date.UTC(2021, 5, 5), 7.36], [Date.UTC(2021, 6, 4), 8.02], [Date.UTC(2021, 7, 3), 7.36], [Date.UTC(2021, 8, 11), 7.13], [Date.UTC(2021, 9, 6), 7.50], [Date.UTC(2021, 10, 6), 8.28], [Date.UTC(2021, 11, 5), 7.73], [Date.UTC(2022, 0, 1), 8.29], [Date.UTC(2022, 1, 2), 8.01], [Date.UTC(2022, 2, 2), 8.66], [Date.UTC(2022, 3, 5), 8.28], [Date.UTC(2022, 4, 3), 8.83], [Date.UTC(2022, 5, 4), 9.63], [Date.UTC(2022, 6, 2), 10.00], [Date.UTC(2022, 7, 2), 10.14], [Date.UTC(2022, 8, 1), 9.76], [Date.UTC(2022, 9, 1), 9.92], [Date.UTC(2022, 10, 1), 10.75], [Date.UTC(2022, 11, 2), 11.94], [Date.UTC(2022, 11, 29), 12.91], [Date.UTC(2023, 1, 1), 13.94], [Date.UTC(2023, 2, 2), 13.29], [Date.UTC(2023, 3, 1), 12.96], [Date.UTC(2023, 4, 2), 11.96], [Date.UTC(2023, 5, 2), 11.36], [Date.UTC(2023, 6, 2), 10.80], [Date.UTC(2023, 7, 4), 10.63], [Date.UTC(2023, 8, 2), 10.65], [Date.UTC(2023, 9, 4), 10.67], [Date.UTC(2023, 10, 2), 10.36], [Date.UTC(2023, 11, 4), 10.01], [Date.UTC(2024, 0, 2), 9.96], [Date.UTC(2024, 1, 2), 10.53], [Date.UTC(2024, 2, 1), 10.70], [Date.UTC(2024, 3, 3), 9.76], [Date.UTC(2024, 4, 1), 9.53]]}, {name : 'Java',data : [[Date.UTC(2001, 5, 30), 26.49], [Date.UTC(2001, 6, 30), 25.03], [Date.UTC(2001, 7, 30), 24.66], [Date.UTC(2001, 8, 28), 24.82], [Date.UTC(2001, 9, 26), 25.68], [Date.UTC(2001, 10, 28), 24.37], [Date.UTC(2001, 11, 31), 24.20], [Date.UTC(2002, 0, 30), 24.06], [Date.UTC(2002, 1, 27), 24.01], [Date.UTC(2002, 2, 29), 24.41], [Date.UTC(2002, 3, 29), 25.05], [Date.UTC(2002, 4, 29), 25.19], [Date.UTC(2002, 5, 29), 24.20], [Date.UTC(2002, 6, 31), 24.53], [Date.UTC(2002, 7, 29), 22.89], [Date.UTC(2002, 8, 29), 24.48], [Date.UTC(2002, 9, 30), 24.20], [Date.UTC(2002, 10, 29), 24.12], [Date.UTC(2002, 11, 31), 24.23], [Date.UTC(2003, 0, 31), 24.79], [Date.UTC(2003, 1, 28), 24.78], [Date.UTC(2003, 2, 31), 24.60], [Date.UTC(2003, 3, 30), 24.66], [Date.UTC(2003, 4, 30), 23.11], [Date.UTC(2003, 5, 30), 22.34], [Date.UTC(2003, 6, 31), 23.21], [Date.UTC(2003, 7, 31), 22.24], [Date.UTC(2003, 8, 30), 21.90], [Date.UTC(2003, 9, 31), 23.08], [Date.UTC(2003, 10, 30), 25.01], [Date.UTC(2003, 11, 31), 23.57], [Date.UTC(2004, 0, 31), 22.56], [Date.UTC(2004, 1, 29), 23.17], [Date.UTC(2004, 2, 31), 24.24], [Date.UTC(2004, 3, 30), 18.69], [Date.UTC(2004, 4, 30), 17.54], [Date.UTC(2004, 5, 30), 17.05], [Date.UTC(2004, 6, 31), 17.00], [Date.UTC(2004, 7, 30), 15.90], [Date.UTC(2004, 8, 30), 17.05], [Date.UTC(2004, 9, 31), 14.80], [Date.UTC(2004, 10, 30), 16.33], [Date.UTC(2004, 11, 31), 17.48], [Date.UTC(2005, 0, 31), 18.34], [Date.UTC(2005, 1, 28), 18.87], [Date.UTC(2005, 2, 31), 16.98], [Date.UTC(2005, 3, 30), 17.40], [Date.UTC(2005, 4, 31), 18.57], [Date.UTC(2005, 5, 30), 19.66], [Date.UTC(2005, 6, 31), 21.21], [Date.UTC(2005, 7, 31), 22.44], [Date.UTC(2005, 8, 30), 21.87], [Date.UTC(2005, 11, 3), 22.13], [Date.UTC(2006, 0, 4), 22.25], [Date.UTC(2006, 1, 2), 22.43], [Date.UTC(2006, 2, 1), 21.89], [Date.UTC(2006, 3, 2), 21.28], [Date.UTC(2006, 4, 1), 21.32], [Date.UTC(2006, 5, 1), 21.13], [Date.UTC(2006, 6, 2), 21.85], [Date.UTC(2006, 7, 2), 22.38], [Date.UTC(2006, 8, 2), 21.53], [Date.UTC(2006, 9, 1), 21.17], [Date.UTC(2006, 10, 2), 20.40], [Date.UTC(2006, 11, 1), 19.91], [Date.UTC(2007, 0, 2), 19.16], [Date.UTC(2007, 1, 3), 18.98], [Date.UTC(2007, 2, 3), 18.04], [Date.UTC(2007, 3, 1), 18.36], [Date.UTC(2007, 4, 5), 19.14], [Date.UTC(2007, 5, 2), 20.03], [Date.UTC(2007, 6, 2), 21.01], [Date.UTC(2007, 7, 5), 21.77], [Date.UTC(2007, 8, 2), 21.70], [Date.UTC(2007, 9, 4), 21.62], [Date.UTC(2007, 10, 4), 20.54], [Date.UTC(2007, 11, 3), 20.05], [Date.UTC(2008, 0, 3), 20.85], [Date.UTC(2008, 1, 7), 21.48], [Date.UTC(2008, 5, 1), 20.89], [Date.UTC(2008, 6, 2), 21.34], [Date.UTC(2008, 7, 3), 21.57], [Date.UTC(2008, 8, 3), 20.71], [Date.UTC(2008, 9, 6), 20.95], [Date.UTC(2008, 10, 2), 20.30], [Date.UTC(2008, 11, 3), 17.92], [Date.UTC(2009, 0, 2), 19.02], [Date.UTC(2009, 1, 1), 19.40], [Date.UTC(2009, 2, 5), 19.80], [Date.UTC(2009, 3, 7), 19.34], [Date.UTC(2009, 4, 1), 19.54], [Date.UTC(2009, 5, 4), 20.15], [Date.UTC(2009, 6, 2), 20.45], [Date.UTC(2009, 7, 1), 19.53], [Date.UTC(2009, 8, 5), 19.38], [Date.UTC(2009, 9, 2), 18.65], [Date.UTC(2009, 10, 2), 18.37], [Date.UTC(2009, 11, 2), 17.06], [Date.UTC(2010, 0, 5), 17.48], [Date.UTC(2010, 1, 7), 17.35], [Date.UTC(2010, 2, 7), 17.51], [Date.UTC(2010, 3, 5), 18.05], [Date.UTC(2010, 4, 15), 17.96], [Date.UTC(2010, 6, 6), 18.67], [Date.UTC(2010, 6, 30), 17.99], [Date.UTC(2010, 8, 11), 17.92], [Date.UTC(2010, 9, 2), 18.17], [Date.UTC(2010, 10, 3), 18.51], [Date.UTC(2010, 11, 7), 18.00], [Date.UTC(2011, 0, 2), 17.77], [Date.UTC(2011, 1, 8), 18.48], [Date.UTC(2011, 2, 8), 19.71], [Date.UTC(2011, 3, 3), 19.04], [Date.UTC(2011, 4, 2), 18.16], [Date.UTC(2011, 5, 5), 18.58], [Date.UTC(2011, 5, 27), 18.58], [Date.UTC(2011, 6, 8), 19.25], [Date.UTC(2011, 7, 3), 19.41], [Date.UTC(2011, 8, 10), 18.76], [Date.UTC(2011, 9, 9), 17.91], [Date.UTC(2011, 10, 7), 17.87], [Date.UTC(2011, 11, 4), 17.56], [Date.UTC(2012, 0, 8), 17.47], [Date.UTC(2012, 1, 5), 17.05], [Date.UTC(2012, 2, 11), 17.11], [Date.UTC(2012, 3, 8), 17.03], [Date.UTC(2012, 4, 9), 16.60], [Date.UTC(2012, 5, 10), 16.26], [Date.UTC(2012, 6, 4), 16.09], [Date.UTC(2012, 7, 10), 16.35], [Date.UTC(2012, 8, 2), 16.27], [Date.UTC(2012, 9, 5), 17.19], [Date.UTC(2012, 10, 4), 17.46], [Date.UTC(2012, 11, 2), 17.57], [Date.UTC(2013, 0, 5), 17.42], [Date.UTC(2013, 1, 8), 18.39], [Date.UTC(2013, 2, 11), 18.16], [Date.UTC(2013, 3, 7), 17.68], [Date.UTC(2013, 4, 8), 16.91], [Date.UTC(2013, 5, 9), 16.66], [Date.UTC(2013, 6, 7), 15.91], [Date.UTC(2013, 6, 12), 15.91], [Date.UTC(2013, 7, 4), 15.98], [Date.UTC(2013, 8, 11), 16.15], [Date.UTC(2013, 9, 10), 16.11], [Date.UTC(2013, 10, 9), 16.52], [Date.UTC(2013, 11, 6), 17.31], [Date.UTC(2014, 0, 1), 16.52], [Date.UTC(2014, 1, 8), 17.32], [Date.UTC(2014, 2, 3), 16.41], [Date.UTC(2014, 3, 10), 17.35], [Date.UTC(2014, 4, 7), 16.91], [Date.UTC(2014, 5, 8), 16.11], [Date.UTC(2014, 6, 6), 15.69], [Date.UTC(2014, 7, 11), 14.98], [Date.UTC(2014, 8, 1), 14.14], [Date.UTC(2014, 9, 3), 13.51], [Date.UTC(2014, 10, 8), 14.39], [Date.UTC(2014, 11, 7), 14.96], [Date.UTC(2015, 0, 6), 15.53], [Date.UTC(2015, 1, 5), 15.34], [Date.UTC(2015, 2, 7), 15.58], [Date.UTC(2015, 3, 13), 16.04], [Date.UTC(2015, 4, 13), 16.87], [Date.UTC(2015, 5, 6), 17.82], [Date.UTC(2015, 6, 12), 17.73], [Date.UTC(2015, 7, 6), 19.27], [Date.UTC(2015, 8, 5), 19.56], [Date.UTC(2015, 9, 4), 19.54], [Date.UTC(2015, 10, 7), 20.40], [Date.UTC(2015, 11, 4), 20.97], [Date.UTC(2016, 0, 2), 21.47], [Date.UTC(2016, 1, 2), 21.14], [Date.UTC(2016, 2, 3), 20.53], [Date.UTC(2016, 3, 7), 20.85], [Date.UTC(2016, 4, 6), 20.96], [Date.UTC(2016, 5, 5), 20.79], [Date.UTC(2016, 6, 4), 19.80], [Date.UTC(2016, 7, 6), 19.01], [Date.UTC(2016, 8, 8), 18.24], [Date.UTC(2016, 9, 7), 18.80], [Date.UTC(2016, 10, 5), 18.75], [Date.UTC(2016, 11, 4), 17.86], [Date.UTC(2017, 0, 7), 17.28], [Date.UTC(2017, 1, 8), 16.68], [Date.UTC(2017, 2, 7), 16.38], [Date.UTC(2017, 3, 9), 15.57], [Date.UTC(2017, 4, 6), 14.64], [Date.UTC(2017, 5, 3), 14.49], [Date.UTC(2017, 6, 7), 13.77], [Date.UTC(2017, 7, 2), 12.96], [Date.UTC(2017, 8, 6), 12.69], [Date.UTC(2017, 9, 5), 12.43], [Date.UTC(2017, 10, 12), 13.23], [Date.UTC(2017, 11, 9), 13.27], [Date.UTC(2018, 0, 3), 14.22], [Date.UTC(2018, 1, 8), 14.99], [Date.UTC(2018, 2, 7), 14.94], [Date.UTC(2018, 3, 1), 15.78], [Date.UTC(2018, 4, 6), 16.38], [Date.UTC(2018, 5, 10), 15.37], [Date.UTC(2018, 6, 7), 16.14], [Date.UTC(2018, 7, 1), 16.88], [Date.UTC(2018, 8, 3), 17.44], [Date.UTC(2018, 9, 5), 17.80], [Date.UTC(2018, 10, 8), 16.75], [Date.UTC(2018, 11, 2), 15.93], [Date.UTC(2019, 0, 4), 16.90], [Date.UTC(2019, 1, 6), 15.88], [Date.UTC(2019, 2, 2), 14.88], [Date.UTC(2019, 3, 7), 15.04], [Date.UTC(2019, 4, 4), 16.00], [Date.UTC(2019, 5, 9), 15.00], [Date.UTC(2019, 6, 6), 15.06], [Date.UTC(2019, 7, 5), 16.03], [Date.UTC(2019, 8, 9), 16.66], [Date.UTC(2019, 9, 5), 16.88], [Date.UTC(2019, 10, 3), 16.25], [Date.UTC(2019, 11, 6), 17.25], [Date.UTC(2020, 0, 5), 16.90], [Date.UTC(2020, 1, 4), 17.36], [Date.UTC(2020, 2, 4), 17.78], [Date.UTC(2020, 3, 2), 16.73], [Date.UTC(2020, 4, 2), 16.28], [Date.UTC(2020, 5, 1), 16.10], [Date.UTC(2020, 6, 4), 15.10], [Date.UTC(2020, 7, 2), 14.43], [Date.UTC(2020, 8, 6), 13.48], [Date.UTC(2020, 9, 4), 12.56], [Date.UTC(2020, 10, 3), 11.68], [Date.UTC(2020, 11, 3), 12.53], [Date.UTC(2021, 0, 2), 11.96], [Date.UTC(2021, 1, 6), 11.29], [Date.UTC(2021, 2, 4), 10.45], [Date.UTC(2021, 3, 4), 11.23], [Date.UTC(2021, 4, 2), 11.74], [Date.UTC(2021, 5, 5), 11.54], [Date.UTC(2021, 6, 4), 11.20], [Date.UTC(2021, 7, 3), 10.43], [Date.UTC(2021, 8, 11), 11.12], [Date.UTC(2021, 9, 6), 10.46], [Date.UTC(2021, 10, 6), 10.72], [Date.UTC(2021, 11, 5), 10.12], [Date.UTC(2022, 0, 1), 10.66], [Date.UTC(2022, 1, 2), 12.13], [Date.UTC(2022, 2, 2), 11.19], [Date.UTC(2022, 3, 5), 10.82], [Date.UTC(2022, 4, 3), 10.99], [Date.UTC(2022, 5, 4), 10.47], [Date.UTC(2022, 6, 2), 11.59], [Date.UTC(2022, 7, 2), 12.46], [Date.UTC(2022, 8, 1), 11.72], [Date.UTC(2022, 9, 1), 12.84], [Date.UTC(2022, 10, 1), 11.98], [Date.UTC(2022, 11, 2), 11.82], [Date.UTC(2022, 11, 29), 12.21], [Date.UTC(2023, 1, 1), 13.21], [Date.UTC(2023, 2, 2), 13.56], [Date.UTC(2023, 3, 1), 13.23], [Date.UTC(2023, 4, 2), 12.22], [Date.UTC(2023, 5, 2), 11.28], [Date.UTC(2023, 6, 2), 10.50], [Date.UTC(2023, 7, 4), 10.33], [Date.UTC(2023, 8, 2), 9.49], [Date.UTC(2023, 9, 4), 8.92], [Date.UTC(2023, 10, 2), 8.35], [Date.UTC(2023, 11, 4), 7.99], [Date.UTC(2024, 0, 2), 7.87], [Date.UTC(2024, 1, 2), 8.88], [Date.UTC(2024, 2, 1), 8.95], [Date.UTC(2024, 3, 3), 8.94], [Date.UTC(2024, 4, 1), 8.69]]}, {name : 'C#',data : [[Date.UTC(2001, 5, 30), 0.38], [Date.UTC(2001, 6, 30), 0.43], [Date.UTC(2001, 7, 30), 0.38], [Date.UTC(2001, 8, 28), 0.39], [Date.UTC(2001, 9, 26), 0.42], [Date.UTC(2001, 10, 28), 0.76], [Date.UTC(2001, 11, 31), 0.59], [Date.UTC(2002, 0, 30), 0.62], [Date.UTC(2002, 1, 27), 0.74], [Date.UTC(2002, 2, 29), 0.74], [Date.UTC(2002, 3, 29), 1.18], [Date.UTC(2002, 4, 29), 1.16], [Date.UTC(2002, 5, 29), 1.46], [Date.UTC(2002, 6, 31), 1.36], [Date.UTC(2002, 7, 29), 1.46], [Date.UTC(2002, 8, 29), 1.65], [Date.UTC(2002, 9, 30), 1.78], [Date.UTC(2002, 10, 29), 2.38], [Date.UTC(2002, 11, 31), 2.45], [Date.UTC(2003, 0, 31), 1.99], [Date.UTC(2003, 1, 28), 1.98], [Date.UTC(2003, 2, 31), 2.38], [Date.UTC(2003, 3, 30), 1.88], [Date.UTC(2003, 4, 30), 1.94], [Date.UTC(2003, 5, 30), 1.78], [Date.UTC(2003, 6, 31), 2.00], [Date.UTC(2003, 7, 31), 2.06], [Date.UTC(2003, 8, 30), 1.94], [Date.UTC(2003, 9, 31), 1.90], [Date.UTC(2003, 10, 30), 1.71], [Date.UTC(2003, 11, 31), 1.80], [Date.UTC(2004, 0, 31), 2.18], [Date.UTC(2004, 1, 29), 2.24], [Date.UTC(2004, 2, 31), 2.14], [Date.UTC(2004, 3, 30), 1.88], [Date.UTC(2004, 4, 30), 1.65], [Date.UTC(2004, 5, 30), 1.67], [Date.UTC(2004, 6, 31), 1.63], [Date.UTC(2004, 7, 30), 1.63], [Date.UTC(2004, 8, 30), 1.64], [Date.UTC(2004, 9, 31), 1.50], [Date.UTC(2004, 10, 30), 1.95], [Date.UTC(2004, 11, 31), 2.20], [Date.UTC(2005, 0, 31), 2.36], [Date.UTC(2005, 1, 28), 2.53], [Date.UTC(2005, 2, 31), 2.82], [Date.UTC(2005, 3, 30), 2.77], [Date.UTC(2005, 4, 31), 2.78], [Date.UTC(2005, 5, 30), 3.14], [Date.UTC(2005, 6, 31), 3.48], [Date.UTC(2005, 7, 31), 3.29], [Date.UTC(2005, 8, 30), 3.46], [Date.UTC(2005, 11, 3), 3.31], [Date.UTC(2006, 0, 4), 3.55], [Date.UTC(2006, 1, 2), 3.97], [Date.UTC(2006, 2, 1), 3.15], [Date.UTC(2006, 3, 2), 3.95], [Date.UTC(2006, 4, 1), 3.27], [Date.UTC(2006, 5, 1), 3.24], [Date.UTC(2006, 6, 2), 3.40], [Date.UTC(2006, 7, 2), 2.68], [Date.UTC(2006, 8, 2), 2.99], [Date.UTC(2006, 9, 1), 3.06], [Date.UTC(2006, 10, 2), 3.02], [Date.UTC(2006, 11, 1), 3.17], [Date.UTC(2007, 0, 2), 3.52], [Date.UTC(2007, 1, 3), 3.19], [Date.UTC(2007, 2, 3), 3.37], [Date.UTC(2007, 3, 1), 3.55], [Date.UTC(2007, 4, 5), 3.66], [Date.UTC(2007, 5, 2), 3.48], [Date.UTC(2007, 6, 2), 3.71], [Date.UTC(2007, 7, 5), 3.99], [Date.UTC(2007, 8, 2), 3.58], [Date.UTC(2007, 9, 4), 3.74], [Date.UTC(2007, 10, 4), 3.92], [Date.UTC(2007, 11, 3), 3.99], [Date.UTC(2008, 0, 3), 4.86], [Date.UTC(2008, 1, 7), 4.51], [Date.UTC(2008, 5, 1), 4.06], [Date.UTC(2008, 6, 2), 4.00], [Date.UTC(2008, 7, 3), 3.70], [Date.UTC(2008, 8, 3), 4.33], [Date.UTC(2008, 9, 6), 3.77], [Date.UTC(2008, 10, 2), 4.03], [Date.UTC(2008, 11, 3), 4.58], [Date.UTC(2009, 0, 2), 5.61], [Date.UTC(2009, 1, 1), 5.06], [Date.UTC(2009, 2, 5), 4.32], [Date.UTC(2009, 3, 7), 4.06], [Date.UTC(2009, 4, 1), 4.27], [Date.UTC(2009, 5, 4), 4.54], [Date.UTC(2009, 6, 2), 4.54], [Date.UTC(2009, 7, 1), 4.44], [Date.UTC(2009, 8, 5), 4.19], [Date.UTC(2009, 9, 2), 4.42], [Date.UTC(2009, 10, 2), 5.35], [Date.UTC(2009, 11, 2), 6.26], [Date.UTC(2010, 0, 5), 5.77], [Date.UTC(2010, 1, 7), 5.01], [Date.UTC(2010, 2, 7), 4.26], [Date.UTC(2010, 3, 5), 4.43], [Date.UTC(2010, 4, 15), 4.78], [Date.UTC(2010, 6, 6), 5.73], [Date.UTC(2010, 6, 30), 4.99], [Date.UTC(2010, 8, 11), 5.02], [Date.UTC(2010, 9, 2), 4.96], [Date.UTC(2010, 10, 3), 5.71], [Date.UTC(2010, 11, 7), 6.69], [Date.UTC(2011, 0, 2), 6.23], [Date.UTC(2011, 1, 8), 6.81], [Date.UTC(2011, 2, 8), 7.21], [Date.UTC(2011, 3, 3), 7.19], [Date.UTC(2011, 4, 2), 7.54], [Date.UTC(2011, 5, 5), 6.84], [Date.UTC(2011, 5, 27), 6.84], [Date.UTC(2011, 6, 8), 6.22], [Date.UTC(2011, 7, 3), 6.04], [Date.UTC(2011, 8, 10), 6.82], [Date.UTC(2011, 9, 9), 6.72], [Date.UTC(2011, 10, 7), 7.32], [Date.UTC(2011, 11, 4), 8.21], [Date.UTC(2012, 0, 8), 8.76], [Date.UTC(2012, 1, 5), 8.65], [Date.UTC(2012, 2, 11), 8.24], [Date.UTC(2012, 3, 8), 7.35], [Date.UTC(2012, 4, 9), 6.82], [Date.UTC(2012, 5, 10), 7.03], [Date.UTC(2012, 6, 4), 6.67], [Date.UTC(2012, 7, 10), 6.59], [Date.UTC(2012, 8, 2), 6.60], [Date.UTC(2012, 9, 5), 6.53], [Date.UTC(2012, 10, 4), 5.59], [Date.UTC(2012, 11, 2), 5.55], [Date.UTC(2013, 0, 5), 6.20], [Date.UTC(2013, 1, 8), 6.68], [Date.UTC(2013, 2, 11), 6.60], [Date.UTC(2013, 3, 7), 6.15], [Date.UTC(2013, 4, 8), 6.12], [Date.UTC(2013, 5, 9), 5.78], [Date.UTC(2013, 6, 7), 6.21], [Date.UTC(2013, 6, 12), 6.21], [Date.UTC(2013, 7, 4), 6.12], [Date.UTC(2013, 8, 11), 5.56], [Date.UTC(2013, 9, 10), 5.72], [Date.UTC(2013, 10, 9), 6.02], [Date.UTC(2013, 11, 6), 5.62], [Date.UTC(2014, 0, 1), 5.85], [Date.UTC(2014, 1, 8), 6.45], [Date.UTC(2014, 2, 3), 5.57], [Date.UTC(2014, 3, 10), 4.82], [Date.UTC(2014, 4, 7), 3.75], [Date.UTC(2014, 5, 8), 3.94], [Date.UTC(2014, 6, 6), 4.05], [Date.UTC(2014, 7, 11), 3.41], [Date.UTC(2014, 8, 1), 4.35], [Date.UTC(2014, 9, 3), 4.75], [Date.UTC(2014, 10, 8), 4.98], [Date.UTC(2014, 11, 7), 4.33], [Date.UTC(2015, 0, 6), 5.05], [Date.UTC(2015, 1, 5), 5.74], [Date.UTC(2015, 2, 7), 4.92], [Date.UTC(2015, 3, 13), 4.95], [Date.UTC(2015, 4, 13), 5.26], [Date.UTC(2015, 5, 6), 5.06], [Date.UTC(2015, 6, 12), 5.65], [Date.UTC(2015, 7, 6), 4.84], [Date.UTC(2015, 8, 5), 4.91], [Date.UTC(2015, 9, 4), 4.82], [Date.UTC(2015, 10, 7), 4.32], [Date.UTC(2015, 11, 4), 4.11], [Date.UTC(2016, 0, 2), 4.71], [Date.UTC(2016, 1, 2), 4.40], [Date.UTC(2016, 2, 3), 4.27], [Date.UTC(2016, 3, 7), 3.80], [Date.UTC(2016, 4, 6), 4.48], [Date.UTC(2016, 5, 5), 3.79], [Date.UTC(2016, 6, 4), 3.92], [Date.UTC(2016, 7, 6), 4.91], [Date.UTC(2016, 8, 8), 5.49], [Date.UTC(2016, 9, 7), 4.37], [Date.UTC(2016, 10, 5), 3.66], [Date.UTC(2016, 11, 4), 3.17], [Date.UTC(2017, 0, 7), 4.04], [Date.UTC(2017, 1, 8), 4.90], [Date.UTC(2017, 2, 7), 4.41], [Date.UTC(2017, 3, 9), 3.58], [Date.UTC(2017, 4, 6), 3.46], [Date.UTC(2017, 5, 3), 3.53], [Date.UTC(2017, 6, 7), 3.52], [Date.UTC(2017, 7, 2), 4.20], [Date.UTC(2017, 8, 6), 4.78], [Date.UTC(2017, 9, 5), 3.86], [Date.UTC(2017, 10, 12), 3.01], [Date.UTC(2017, 11, 9), 2.82], [Date.UTC(2018, 0, 3), 3.75], [Date.UTC(2018, 1, 8), 4.45], [Date.UTC(2018, 2, 7), 5.07], [Date.UTC(2018, 3, 1), 5.27], [Date.UTC(2018, 4, 6), 4.40], [Date.UTC(2018, 5, 10), 4.31], [Date.UTC(2018, 6, 7), 3.79], [Date.UTC(2018, 7, 1), 3.54], [Date.UTC(2018, 8, 3), 3.30], [Date.UTC(2018, 9, 5), 3.49], [Date.UTC(2018, 10, 8), 3.95], [Date.UTC(2018, 11, 2), 3.45], [Date.UTC(2019, 0, 4), 3.28], [Date.UTC(2019, 1, 6), 2.85], [Date.UTC(2019, 2, 2), 3.27], [Date.UTC(2019, 3, 7), 3.52], [Date.UTC(2019, 4, 4), 3.98], [Date.UTC(2019, 5, 9), 4.48], [Date.UTC(2019, 6, 6), 4.36], [Date.UTC(2019, 7, 5), 3.84], [Date.UTC(2019, 8, 9), 3.40], [Date.UTC(2019, 9, 5), 3.86], [Date.UTC(2019, 10, 3), 4.32], [Date.UTC(2019, 11, 6), 4.80], [Date.UTC(2020, 0, 5), 5.35], [Date.UTC(2020, 1, 4), 5.93], [Date.UTC(2020, 2, 4), 5.32], [Date.UTC(2020, 3, 2), 4.74], [Date.UTC(2020, 4, 2), 4.29], [Date.UTC(2020, 5, 1), 4.73], [Date.UTC(2020, 6, 4), 5.25], [Date.UTC(2020, 7, 2), 4.68], [Date.UTC(2020, 8, 6), 4.58], [Date.UTC(2020, 9, 4), 4.16], [Date.UTC(2020, 10, 3), 4.67], [Date.UTC(2020, 11, 3), 4.20], [Date.UTC(2021, 0, 2), 3.95], [Date.UTC(2021, 1, 6), 4.44], [Date.UTC(2021, 2, 4), 4.97], [Date.UTC(2021, 3, 4), 4.91], [Date.UTC(2021, 4, 2), 4.41], [Date.UTC(2021, 5, 5), 4.33], [Date.UTC(2021, 6, 4), 4.84], [Date.UTC(2021, 7, 3), 5.14], [Date.UTC(2021, 8, 11), 5.78], [Date.UTC(2021, 9, 6), 5.26], [Date.UTC(2021, 10, 6), 6.06], [Date.UTC(2021, 11, 5), 6.40], [Date.UTC(2022, 0, 1), 5.68], [Date.UTC(2022, 1, 2), 5.37], [Date.UTC(2022, 2, 2), 5.92], [Date.UTC(2022, 3, 5), 6.82], [Date.UTC(2022, 4, 3), 6.39], [Date.UTC(2022, 5, 4), 6.12], [Date.UTC(2022, 6, 2), 5.65], [Date.UTC(2022, 7, 2), 5.41], [Date.UTC(2022, 8, 1), 4.88], [Date.UTC(2022, 9, 1), 4.42], [Date.UTC(2022, 10, 1), 4.25], [Date.UTC(2022, 11, 2), 4.92], [Date.UTC(2022, 11, 29), 5.73], [Date.UTC(2023, 1, 1), 6.38], [Date.UTC(2023, 2, 2), 7.17], [Date.UTC(2023, 3, 1), 8.21], [Date.UTC(2023, 4, 2), 7.43], [Date.UTC(2023, 5, 2), 6.71], [Date.UTC(2023, 6, 2), 6.87], [Date.UTC(2023, 7, 4), 7.04], [Date.UTC(2023, 8, 2), 7.31], [Date.UTC(2023, 9, 4), 7.71], [Date.UTC(2023, 10, 2), 7.65], [Date.UTC(2023, 11, 4), 7.30], [Date.UTC(2024, 0, 2), 7.16], [Date.UTC(2024, 1, 2), 7.53], [Date.UTC(2024, 2, 1), 7.54], [Date.UTC(2024, 3, 3), 6.77], [Date.UTC(2024, 4, 1), 6.49]]}, {name : 'JavaScript',data : [[Date.UTC(2001, 5, 30), 1.55], [Date.UTC(2001, 6, 30), 1.72], [Date.UTC(2001, 7, 30), 1.66], [Date.UTC(2001, 8, 28), 1.63], [Date.UTC(2001, 9, 26), 1.51], [Date.UTC(2001, 10, 28), 1.47], [Date.UTC(2001, 11, 31), 1.46], [Date.UTC(2002, 0, 30), 2.73], [Date.UTC(2002, 1, 27), 1.48], [Date.UTC(2002, 2, 29), 1.47], [Date.UTC(2002, 3, 29), 1.37], [Date.UTC(2002, 4, 29), 1.36], [Date.UTC(2002, 5, 29), 1.43], [Date.UTC(2002, 6, 31), 1.15], [Date.UTC(2002, 7, 29), 2.02], [Date.UTC(2002, 8, 29), 1.91], [Date.UTC(2002, 9, 30), 1.98], [Date.UTC(2002, 10, 29), 2.49], [Date.UTC(2002, 11, 31), 2.42], [Date.UTC(2003, 0, 31), 2.92], [Date.UTC(2003, 1, 28), 2.81], [Date.UTC(2003, 2, 31), 2.63], [Date.UTC(2003, 3, 30), 3.26], [Date.UTC(2003, 4, 30), 1.72], [Date.UTC(2003, 5, 30), 1.69], [Date.UTC(2003, 6, 31), 1.79], [Date.UTC(2003, 7, 31), 1.90], [Date.UTC(2003, 8, 30), 1.66], [Date.UTC(2003, 9, 31), 1.92], [Date.UTC(2003, 10, 30), 1.74], [Date.UTC(2003, 11, 31), 1.74], [Date.UTC(2004, 0, 31), 2.14], [Date.UTC(2004, 1, 29), 2.06], [Date.UTC(2004, 2, 31), 1.78], [Date.UTC(2004, 3, 30), 1.78], [Date.UTC(2004, 4, 30), 1.45], [Date.UTC(2004, 5, 30), 1.61], [Date.UTC(2004, 6, 31), 1.68], [Date.UTC(2004, 7, 30), 1.51], [Date.UTC(2004, 8, 30), 1.27], [Date.UTC(2004, 9, 31), 1.20], [Date.UTC(2004, 10, 30), 1.59], [Date.UTC(2004, 11, 31), 1.70], [Date.UTC(2005, 0, 31), 1.78], [Date.UTC(2005, 1, 28), 1.65], [Date.UTC(2005, 2, 31), 1.64], [Date.UTC(2005, 3, 30), 1.44], [Date.UTC(2005, 4, 31), 1.39], [Date.UTC(2005, 5, 30), 1.78], [Date.UTC(2005, 6, 31), 1.92], [Date.UTC(2005, 7, 31), 1.77], [Date.UTC(2005, 8, 30), 2.04], [Date.UTC(2005, 11, 3), 1.84], [Date.UTC(2006, 0, 4), 1.54], [Date.UTC(2006, 1, 2), 1.51], [Date.UTC(2006, 2, 1), 1.73], [Date.UTC(2006, 3, 2), 1.57], [Date.UTC(2006, 4, 1), 2.19], [Date.UTC(2006, 5, 1), 1.46], [Date.UTC(2006, 6, 2), 2.11], [Date.UTC(2006, 7, 2), 2.02], [Date.UTC(2006, 8, 2), 2.44], [Date.UTC(2006, 9, 1), 2.20], [Date.UTC(2006, 10, 2), 2.31], [Date.UTC(2006, 11, 1), 2.56], [Date.UTC(2007, 0, 2), 2.84], [Date.UTC(2007, 1, 3), 2.98], [Date.UTC(2007, 2, 3), 3.49], [Date.UTC(2007, 3, 1), 3.14], [Date.UTC(2007, 4, 5), 3.07], [Date.UTC(2007, 5, 2), 2.62], [Date.UTC(2007, 6, 2), 2.51], [Date.UTC(2007, 7, 5), 2.58], [Date.UTC(2007, 8, 2), 2.72], [Date.UTC(2007, 9, 4), 2.68], [Date.UTC(2007, 10, 4), 2.93], [Date.UTC(2007, 11, 3), 2.73], [Date.UTC(2008, 0, 3), 3.20], [Date.UTC(2008, 1, 7), 2.33], [Date.UTC(2008, 5, 1), 2.93], [Date.UTC(2008, 6, 2), 2.76], [Date.UTC(2008, 7, 3), 2.89], [Date.UTC(2008, 8, 3), 3.13], [Date.UTC(2008, 9, 6), 2.67], [Date.UTC(2008, 10, 2), 2.93], [Date.UTC(2008, 11, 3), 2.97], [Date.UTC(2009, 0, 2), 3.36], [Date.UTC(2009, 1, 1), 3.54], [Date.UTC(2009, 2, 5), 3.61], [Date.UTC(2009, 3, 7), 3.68], [Date.UTC(2009, 4, 1), 3.55], [Date.UTC(2009, 5, 4), 4.02], [Date.UTC(2009, 6, 2), 3.51], [Date.UTC(2009, 7, 1), 2.81], [Date.UTC(2009, 8, 5), 3.00], [Date.UTC(2009, 9, 2), 3.03], [Date.UTC(2009, 10, 2), 2.92], [Date.UTC(2009, 11, 2), 3.51], [Date.UTC(2010, 0, 5), 2.71], [Date.UTC(2010, 1, 7), 2.64], [Date.UTC(2010, 2, 7), 2.65], [Date.UTC(2010, 3, 5), 2.47], [Date.UTC(2010, 4, 15), 2.08], [Date.UTC(2010, 6, 6), 2.43], [Date.UTC(2010, 6, 30), 2.40], [Date.UTC(2010, 8, 11), 1.66], [Date.UTC(2010, 9, 2), 1.66], [Date.UTC(2010, 10, 3), 1.66], [Date.UTC(2010, 11, 7), 1.51], [Date.UTC(2011, 0, 2), 1.59], [Date.UTC(2011, 1, 8), 2.56], [Date.UTC(2011, 2, 8), 1.87], [Date.UTC(2011, 3, 3), 1.51], [Date.UTC(2011, 4, 2), 1.39], [Date.UTC(2011, 5, 5), 1.50], [Date.UTC(2011, 5, 27), 1.50], [Date.UTC(2011, 6, 8), 2.24], [Date.UTC(2011, 7, 3), 1.56], [Date.UTC(2011, 8, 10), 1.47], [Date.UTC(2011, 9, 9), 2.19], [Date.UTC(2011, 10, 7), 2.56], [Date.UTC(2011, 11, 4), 2.20], [Date.UTC(2012, 0, 8), 2.32], [Date.UTC(2012, 1, 5), 2.46], [Date.UTC(2012, 2, 11), 3.39], [Date.UTC(2012, 3, 8), 2.88], [Date.UTC(2012, 4, 9), 2.13], [Date.UTC(2012, 5, 10), 1.47], [Date.UTC(2012, 6, 4), 1.45], [Date.UTC(2012, 7, 10), 1.37], [Date.UTC(2012, 8, 2), 1.33], [Date.UTC(2012, 9, 5), 1.26], [Date.UTC(2012, 10, 4), 1.28], [Date.UTC(2012, 11, 2), 1.32], [Date.UTC(2013, 0, 5), 1.98], [Date.UTC(2013, 1, 8), 1.42], [Date.UTC(2013, 2, 11), 1.37], [Date.UTC(2013, 3, 7), 1.51], [Date.UTC(2013, 4, 8), 1.54], [Date.UTC(2013, 5, 9), 1.65], [Date.UTC(2013, 6, 7), 1.84], [Date.UTC(2013, 6, 12), 1.84], [Date.UTC(2013, 7, 4), 2.09], [Date.UTC(2013, 8, 11), 2.01], [Date.UTC(2013, 9, 10), 2.04], [Date.UTC(2013, 10, 9), 2.05], [Date.UTC(2013, 11, 6), 1.85], [Date.UTC(2014, 0, 1), 1.58], [Date.UTC(2014, 1, 8), 1.93], [Date.UTC(2014, 2, 3), 1.90], [Date.UTC(2014, 3, 10), 1.75], [Date.UTC(2014, 4, 7), 1.79], [Date.UTC(2014, 5, 8), 2.00], [Date.UTC(2014, 6, 6), 1.81], [Date.UTC(2014, 7, 11), 2.17], [Date.UTC(2014, 8, 1), 2.45], [Date.UTC(2014, 9, 3), 1.77], [Date.UTC(2014, 10, 8), 2.09], [Date.UTC(2014, 11, 7), 2.43], [Date.UTC(2015, 0, 6), 3.27], [Date.UTC(2015, 1, 5), 3.51], [Date.UTC(2015, 2, 7), 3.63], [Date.UTC(2015, 3, 13), 3.30], [Date.UTC(2015, 4, 13), 3.13], [Date.UTC(2015, 5, 6), 2.30], [Date.UTC(2015, 6, 12), 2.19], [Date.UTC(2015, 7, 6), 2.16], [Date.UTC(2015, 8, 5), 2.34], [Date.UTC(2015, 9, 4), 2.29], [Date.UTC(2015, 10, 7), 2.47], [Date.UTC(2015, 11, 4), 2.36], [Date.UTC(2016, 0, 2), 2.57], [Date.UTC(2016, 1, 2), 2.20], [Date.UTC(2016, 2, 3), 2.33], [Date.UTC(2016, 3, 7), 2.57], [Date.UTC(2016, 4, 6), 2.34], [Date.UTC(2016, 5, 5), 2.58], [Date.UTC(2016, 6, 4), 2.64], [Date.UTC(2016, 7, 6), 2.71], [Date.UTC(2016, 8, 8), 2.93], [Date.UTC(2016, 9, 7), 2.75], [Date.UTC(2016, 10, 5), 2.71], [Date.UTC(2016, 11, 4), 2.86], [Date.UTC(2017, 0, 7), 2.85], [Date.UTC(2017, 1, 8), 2.87], [Date.UTC(2017, 2, 7), 2.67], [Date.UTC(2017, 3, 9), 2.85], [Date.UTC(2017, 4, 6), 3.07], [Date.UTC(2017, 5, 3), 3.02], [Date.UTC(2017, 6, 7), 2.61], [Date.UTC(2017, 7, 2), 2.10], [Date.UTC(2017, 8, 6), 2.02], [Date.UTC(2017, 9, 5), 3.01], [Date.UTC(2017, 10, 12), 2.97], [Date.UTC(2017, 11, 9), 2.47], [Date.UTC(2018, 0, 3), 3.47], [Date.UTC(2018, 1, 8), 3.16], [Date.UTC(2018, 2, 7), 3.92], [Date.UTC(2018, 3, 1), 3.49], [Date.UTC(2018, 4, 6), 2.92], [Date.UTC(2018, 5, 10), 2.50], [Date.UTC(2018, 6, 7), 2.83], [Date.UTC(2018, 7, 1), 2.41], [Date.UTC(2018, 8, 3), 2.13], [Date.UTC(2018, 9, 5), 2.28], [Date.UTC(2018, 10, 8), 2.66], [Date.UTC(2018, 11, 2), 3.06], [Date.UTC(2019, 0, 4), 3.30], [Date.UTC(2019, 1, 6), 2.85], [Date.UTC(2019, 2, 2), 2.43], [Date.UTC(2019, 3, 7), 2.51], [Date.UTC(2019, 4, 4), 2.69], [Date.UTC(2019, 5, 9), 2.72], [Date.UTC(2019, 6, 6), 2.30], [Date.UTC(2019, 7, 5), 2.26], [Date.UTC(2019, 8, 9), 2.13], [Date.UTC(2019, 9, 5), 2.08], [Date.UTC(2019, 10, 3), 1.93], [Date.UTC(2019, 11, 6), 2.09], [Date.UTC(2020, 0, 5), 2.45], [Date.UTC(2020, 1, 4), 2.06], [Date.UTC(2020, 2, 4), 2.05], [Date.UTC(2020, 3, 2), 2.38], [Date.UTC(2020, 4, 2), 2.68], [Date.UTC(2020, 5, 1), 2.27], [Date.UTC(2020, 6, 4), 2.48], [Date.UTC(2020, 7, 2), 2.87], [Date.UTC(2020, 8, 6), 2.54], [Date.UTC(2020, 9, 4), 2.14], [Date.UTC(2020, 10, 3), 2.03], [Date.UTC(2020, 11, 3), 2.35], [Date.UTC(2021, 0, 2), 2.20], [Date.UTC(2021, 1, 6), 2.27], [Date.UTC(2021, 2, 4), 2.11], [Date.UTC(2021, 3, 4), 2.44], [Date.UTC(2021, 4, 2), 2.45], [Date.UTC(2021, 5, 5), 2.33], [Date.UTC(2021, 6, 4), 2.71], [Date.UTC(2021, 7, 3), 2.95], [Date.UTC(2021, 8, 11), 2.55], [Date.UTC(2021, 9, 6), 2.19], [Date.UTC(2021, 10, 6), 2.66], [Date.UTC(2021, 11, 5), 2.30], [Date.UTC(2022, 0, 1), 2.09], [Date.UTC(2022, 1, 2), 1.83], [Date.UTC(2022, 2, 2), 2.09], [Date.UTC(2022, 3, 5), 2.41], [Date.UTC(2022, 4, 3), 2.12], [Date.UTC(2022, 5, 4), 2.09], [Date.UTC(2022, 6, 2), 1.78], [Date.UTC(2022, 7, 2), 2.40], [Date.UTC(2022, 8, 1), 2.82], [Date.UTC(2022, 9, 1), 2.74], [Date.UTC(2022, 10, 1), 2.74], [Date.UTC(2022, 11, 2), 3.19], [Date.UTC(2022, 11, 29), 2.87], [Date.UTC(2023, 1, 1), 2.52], [Date.UTC(2023, 2, 2), 2.17], [Date.UTC(2023, 3, 1), 2.10], [Date.UTC(2023, 4, 2), 2.44], [Date.UTC(2023, 5, 2), 2.82], [Date.UTC(2023, 6, 2), 3.11], [Date.UTC(2023, 7, 4), 3.29], [Date.UTC(2023, 8, 2), 3.30], [Date.UTC(2023, 9, 4), 2.91], [Date.UTC(2023, 10, 2), 3.21], [Date.UTC(2023, 11, 4), 2.90], [Date.UTC(2024, 0, 2), 2.77], [Date.UTC(2024, 1, 2), 3.17], [Date.UTC(2024, 2, 1), 3.38], [Date.UTC(2024, 3, 3), 2.89], [Date.UTC(2024, 4, 1), 3.01]]}, {name : 'Visual Basic',data : [[Date.UTC(2010, 8, 11), 0.33], [Date.UTC(2010, 9, 2), 0.33], [Date.UTC(2010, 10, 3), 0.32], [Date.UTC(2010, 11, 7), 0.26], [Date.UTC(2011, 0, 2), 0.26], [Date.UTC(2011, 1, 8), 0.59], [Date.UTC(2011, 2, 8), 0.56], [Date.UTC(2011, 3, 3), 0.34], [Date.UTC(2011, 4, 2), 0.48], [Date.UTC(2011, 5, 5), 0.43], [Date.UTC(2011, 5, 27), 0.43], [Date.UTC(2011, 6, 8), 0.48], [Date.UTC(2011, 7, 3), 0.46], [Date.UTC(2011, 8, 10), 0.31], [Date.UTC(2011, 9, 9), 0.48], [Date.UTC(2011, 10, 7), 0.53], [Date.UTC(2011, 11, 4), 0.36], [Date.UTC(2012, 0, 8), 0.48], [Date.UTC(2012, 1, 5), 0.80], [Date.UTC(2012, 2, 11), 0.78], [Date.UTC(2012, 3, 8), 0.98], [Date.UTC(2012, 4, 9), 1.27], [Date.UTC(2012, 5, 10), 1.22], [Date.UTC(2012, 6, 4), 0.92], [Date.UTC(2012, 7, 10), 0.88], [Date.UTC(2012, 8, 2), 0.84], [Date.UTC(2012, 9, 5), 0.60], [Date.UTC(2012, 10, 4), 0.77], [Date.UTC(2012, 11, 2), 0.89], [Date.UTC(2013, 0, 5), 1.04], [Date.UTC(2013, 1, 8), 1.01], [Date.UTC(2013, 2, 11), 0.89], [Date.UTC(2013, 3, 7), 1.10], [Date.UTC(2013, 4, 8), 1.13], [Date.UTC(2013, 5, 9), 1.07], [Date.UTC(2013, 6, 7), 1.25], [Date.UTC(2013, 6, 12), 1.25], [Date.UTC(2013, 7, 4), 1.32], [Date.UTC(2013, 8, 11), 1.84], [Date.UTC(2013, 9, 10), 1.93], [Date.UTC(2013, 10, 9), 1.97], [Date.UTC(2013, 11, 6), 1.69], [Date.UTC(2014, 0, 1), 1.56], [Date.UTC(2014, 1, 8), 1.80], [Date.UTC(2014, 2, 3), 1.86], [Date.UTC(2014, 3, 10), 1.75], [Date.UTC(2014, 4, 7), 1.26], [Date.UTC(2014, 5, 8), 1.91], [Date.UTC(2014, 6, 6), 1.49], [Date.UTC(2014, 7, 11), 2.01], [Date.UTC(2014, 8, 1), 1.27], [Date.UTC(2014, 9, 3), 1.56], [Date.UTC(2014, 10, 8), 1.66], [Date.UTC(2014, 11, 7), 1.80], [Date.UTC(2015, 0, 6), 1.07], [Date.UTC(2015, 1, 5), 1.72], [Date.UTC(2015, 2, 7), 1.95], [Date.UTC(2015, 3, 13), 2.20], [Date.UTC(2015, 4, 13), 1.89], [Date.UTC(2015, 5, 6), 1.84], [Date.UTC(2015, 6, 12), 1.95], [Date.UTC(2015, 7, 6), 1.78], [Date.UTC(2015, 8, 5), 1.53], [Date.UTC(2015, 9, 4), 1.51], [Date.UTC(2015, 10, 7), 1.68], [Date.UTC(2015, 11, 4), 1.65], [Date.UTC(2016, 0, 2), 1.68], [Date.UTC(2016, 1, 2), 1.86], [Date.UTC(2016, 2, 3), 1.67], [Date.UTC(2016, 3, 7), 1.61], [Date.UTC(2016, 4, 6), 1.83], [Date.UTC(2016, 5, 5), 2.25], [Date.UTC(2016, 6, 4), 2.01], [Date.UTC(2016, 7, 6), 2.05], [Date.UTC(2016, 8, 8), 1.76], [Date.UTC(2016, 9, 7), 1.99], [Date.UTC(2016, 10, 5), 1.92], [Date.UTC(2016, 11, 4), 1.97], [Date.UTC(2017, 0, 7), 1.91], [Date.UTC(2017, 1, 8), 1.88], [Date.UTC(2017, 2, 7), 2.01], [Date.UTC(2017, 3, 9), 2.06], [Date.UTC(2017, 4, 6), 2.35], [Date.UTC(2017, 5, 3), 2.01], [Date.UTC(2017, 6, 7), 2.10], [Date.UTC(2017, 7, 2), 1.81], [Date.UTC(2017, 8, 6), 1.75], [Date.UTC(2017, 9, 5), 1.42], [Date.UTC(2017, 10, 12), 1.49], [Date.UTC(2017, 11, 9), 1.35], [Date.UTC(2018, 0, 3), 2.31], [Date.UTC(2018, 1, 8), 2.18], [Date.UTC(2018, 2, 7), 1.74], [Date.UTC(2018, 3, 1), 1.80], [Date.UTC(2018, 4, 6), 0.91], [Date.UTC(2018, 5, 10), 1.15], [Date.UTC(2018, 6, 7), 0.89], [Date.UTC(2018, 7, 1), 0.92], [Date.UTC(2018, 8, 3), 0.68], [Date.UTC(2018, 9, 5), 0.65], [Date.UTC(2018, 10, 8), 0.85], [Date.UTC(2018, 11, 2), 0.98], [Date.UTC(2019, 0, 4), 1.03], [Date.UTC(2019, 1, 6), 0.99], [Date.UTC(2019, 2, 2), 0.95], [Date.UTC(2019, 3, 7), 1.06], [Date.UTC(2019, 4, 4), 1.32], [Date.UTC(2019, 5, 9), 1.07], [Date.UTC(2019, 6, 6), 1.01], [Date.UTC(2019, 7, 5), 1.02], [Date.UTC(2019, 8, 9), 1.08], [Date.UTC(2019, 9, 5), 1.23], [Date.UTC(2019, 10, 3), 0.96], [Date.UTC(2019, 11, 6), 0.93], [Date.UTC(2020, 0, 5), 0.83], [Date.UTC(2020, 1, 4), 0.60], [Date.UTC(2020, 2, 4), 0.77], [Date.UTC(2020, 3, 2), 4.72], [Date.UTC(2020, 4, 2), 4.18], [Date.UTC(2020, 5, 1), 4.69], [Date.UTC(2020, 6, 4), 5.23], [Date.UTC(2020, 7, 2), 4.66], [Date.UTC(2020, 8, 6), 4.12], [Date.UTC(2020, 9, 4), 3.97], [Date.UTC(2020, 10, 3), 4.01], [Date.UTC(2020, 11, 3), 3.92], [Date.UTC(2021, 0, 2), 3.84], [Date.UTC(2021, 1, 6), 4.33], [Date.UTC(2021, 2, 4), 4.85], [Date.UTC(2021, 3, 4), 4.55], [Date.UTC(2021, 4, 2), 4.02], [Date.UTC(2021, 5, 5), 4.01], [Date.UTC(2021, 6, 4), 4.50], [Date.UTC(2021, 7, 3), 4.67], [Date.UTC(2021, 8, 11), 4.62], [Date.UTC(2021, 9, 6), 5.24], [Date.UTC(2021, 10, 6), 5.72], [Date.UTC(2021, 11, 5), 5.40], [Date.UTC(2022, 0, 1), 4.74], [Date.UTC(2022, 1, 2), 5.23], [Date.UTC(2022, 2, 2), 5.77], [Date.UTC(2022, 3, 5), 5.40], [Date.UTC(2022, 4, 3), 5.86], [Date.UTC(2022, 5, 4), 5.42], [Date.UTC(2022, 6, 2), 4.97], [Date.UTC(2022, 7, 2), 4.90], [Date.UTC(2022, 8, 1), 4.39], [Date.UTC(2022, 9, 1), 3.95], [Date.UTC(2022, 10, 1), 4.11], [Date.UTC(2022, 11, 2), 3.94], [Date.UTC(2022, 11, 29), 4.64], [Date.UTC(2023, 1, 1), 4.14], [Date.UTC(2023, 2, 2), 4.75], [Date.UTC(2023, 3, 1), 4.40], [Date.UTC(2023, 4, 2), 3.84], [Date.UTC(2023, 5, 2), 3.34], [Date.UTC(2023, 6, 2), 2.90], [Date.UTC(2023, 7, 4), 2.63], [Date.UTC(2023, 8, 2), 2.22], [Date.UTC(2023, 9, 4), 2.13], [Date.UTC(2023, 10, 2), 2.10], [Date.UTC(2023, 11, 4), 1.82], [Date.UTC(2024, 0, 2), 1.60], [Date.UTC(2024, 1, 2), 1.52], [Date.UTC(2024, 2, 1), 1.42], [Date.UTC(2024, 3, 3), 1.70], [Date.UTC(2024, 4, 1), 2.01]]}, {name : 'Go',data : [[Date.UTC(2010, 0, 5), 1.25], [Date.UTC(2010, 1, 7), 1.78], [Date.UTC(2010, 2, 7), 0.92], [Date.UTC(2010, 3, 5), 0.71], [Date.UTC(2010, 4, 15), 0.64], [Date.UTC(2010, 6, 6), 0.49], [Date.UTC(2010, 6, 30), 0.60], [Date.UTC(2010, 8, 11), 0.73], [Date.UTC(2010, 9, 2), 0.63], [Date.UTC(2010, 10, 3), 0.55], [Date.UTC(2010, 11, 7), 0.59], [Date.UTC(2011, 0, 2), 0.59], [Date.UTC(2011, 1, 8), 0.71], [Date.UTC(2011, 2, 8), 0.96], [Date.UTC(2011, 3, 3), 0.56], [Date.UTC(2011, 4, 2), 0.49], [Date.UTC(2011, 5, 5), 0.42], [Date.UTC(2011, 5, 27), 0.42], [Date.UTC(2011, 6, 8), 0.37], [Date.UTC(2011, 7, 3), 0.48], [Date.UTC(2011, 8, 10), 0.36], [Date.UTC(2011, 9, 9), 0.37], [Date.UTC(2011, 10, 7), 0.36], [Date.UTC(2011, 11, 4), 0.39], [Date.UTC(2012, 0, 8), 0.47], [Date.UTC(2012, 1, 5), 0.28], [Date.UTC(2012, 2, 11), 0.09], [Date.UTC(2012, 3, 8), 0.10], [Date.UTC(2012, 4, 9), 0.10], [Date.UTC(2012, 5, 10), 0.11], [Date.UTC(2012, 6, 4), 0.11], [Date.UTC(2012, 7, 10), 0.12], [Date.UTC(2012, 8, 2), 0.11], [Date.UTC(2012, 9, 5), 0.11], [Date.UTC(2012, 10, 4), 0.11], [Date.UTC(2012, 11, 2), 0.11], [Date.UTC(2013, 0, 5), 0.12], [Date.UTC(2013, 1, 8), 0.11], [Date.UTC(2013, 2, 11), 0.12], [Date.UTC(2013, 3, 7), 0.11], [Date.UTC(2013, 4, 8), 0.11], [Date.UTC(2013, 5, 9), 0.11], [Date.UTC(2013, 6, 7), 0.22], [Date.UTC(2013, 6, 12), 0.22], [Date.UTC(2013, 7, 4), 0.51], [Date.UTC(2013, 8, 11), 0.22], [Date.UTC(2013, 9, 10), 0.19], [Date.UTC(2013, 10, 9), 0.21], [Date.UTC(2013, 11, 6), 0.26], [Date.UTC(2014, 0, 1), 0.32], [Date.UTC(2014, 1, 8), 0.32], [Date.UTC(2014, 2, 3), 0.29], [Date.UTC(2014, 3, 10), 0.32], [Date.UTC(2014, 4, 7), 0.42], [Date.UTC(2014, 5, 8), 0.42], [Date.UTC(2014, 6, 6), 0.40], [Date.UTC(2014, 7, 11), 0.37], [Date.UTC(2014, 8, 1), 0.40], [Date.UTC(2014, 9, 3), 0.33], [Date.UTC(2014, 10, 8), 0.33], [Date.UTC(2014, 11, 7), 0.26], [Date.UTC(2015, 0, 6), 0.10], [Date.UTC(2015, 1, 5), 0.30], [Date.UTC(2015, 2, 7), 0.26], [Date.UTC(2015, 3, 13), 0.30], [Date.UTC(2015, 4, 13), 0.03], [Date.UTC(2015, 5, 6), 0.06], [Date.UTC(2015, 6, 12), 0.06], [Date.UTC(2015, 7, 6), 0.08], [Date.UTC(2015, 8, 5), 0.25], [Date.UTC(2015, 9, 4), 0.14], [Date.UTC(2015, 10, 7), 0.20], [Date.UTC(2015, 11, 4), 0.19], [Date.UTC(2016, 0, 2), 0.16], [Date.UTC(2016, 1, 2), 0.29], [Date.UTC(2016, 2, 3), 0.20], [Date.UTC(2016, 3, 7), 0.24], [Date.UTC(2016, 4, 6), 0.25], [Date.UTC(2016, 5, 5), 0.21], [Date.UTC(2016, 6, 4), 0.16], [Date.UTC(2016, 7, 6), 1.27], [Date.UTC(2016, 8, 8), 1.62], [Date.UTC(2016, 9, 7), 1.81], [Date.UTC(2016, 10, 5), 2.00], [Date.UTC(2016, 11, 4), 1.94], [Date.UTC(2017, 0, 7), 2.33], [Date.UTC(2017, 1, 8), 2.10], [Date.UTC(2017, 2, 7), 1.98], [Date.UTC(2017, 3, 9), 1.97], [Date.UTC(2017, 4, 6), 2.08], [Date.UTC(2017, 5, 3), 2.04], [Date.UTC(2017, 6, 7), 2.36], [Date.UTC(2017, 7, 2), 1.65], [Date.UTC(2017, 8, 6), 1.57], [Date.UTC(2017, 9, 5), 1.36], [Date.UTC(2017, 10, 12), 1.57], [Date.UTC(2017, 11, 9), 1.39], [Date.UTC(2018, 0, 3), 1.57], [Date.UTC(2018, 1, 8), 1.42], [Date.UTC(2018, 2, 7), 1.44], [Date.UTC(2018, 3, 1), 1.18], [Date.UTC(2018, 4, 6), 0.97], [Date.UTC(2018, 5, 10), 0.88], [Date.UTC(2018, 6, 7), 0.97], [Date.UTC(2018, 7, 1), 1.00], [Date.UTC(2018, 8, 3), 1.08], [Date.UTC(2018, 9, 5), 1.25], [Date.UTC(2018, 10, 8), 1.50], [Date.UTC(2018, 11, 2), 1.19], [Date.UTC(2019, 0, 4), 1.12], [Date.UTC(2019, 1, 6), 0.96], [Date.UTC(2019, 2, 2), 1.02], [Date.UTC(2019, 3, 7), 1.01], [Date.UTC(2019, 4, 4), 1.11], [Date.UTC(2019, 5, 9), 1.26], [Date.UTC(2019, 6, 6), 1.02], [Date.UTC(2019, 7, 5), 0.97], [Date.UTC(2019, 8, 9), 1.22], [Date.UTC(2019, 9, 5), 1.10], [Date.UTC(2019, 10, 3), 0.85], [Date.UTC(2019, 11, 6), 1.00], [Date.UTC(2020, 0, 5), 0.90], [Date.UTC(2020, 1, 4), 1.13], [Date.UTC(2020, 2, 4), 1.28], [Date.UTC(2020, 3, 2), 1.36], [Date.UTC(2020, 4, 2), 1.27], [Date.UTC(2020, 5, 1), 1.02], [Date.UTC(2020, 6, 4), 1.21], [Date.UTC(2020, 7, 2), 1.43], [Date.UTC(2020, 8, 6), 1.46], [Date.UTC(2020, 9, 4), 1.16], [Date.UTC(2020, 10, 3), 1.36], [Date.UTC(2020, 11, 3), 1.14], [Date.UTC(2021, 0, 2), 1.41], [Date.UTC(2021, 1, 6), 1.28], [Date.UTC(2021, 2, 4), 1.31], [Date.UTC(2021, 3, 4), 1.22], [Date.UTC(2021, 4, 2), 1.22], [Date.UTC(2021, 5, 5), 0.95], [Date.UTC(2021, 6, 4), 1.17], [Date.UTC(2021, 7, 3), 0.90], [Date.UTC(2021, 8, 11), 1.13], [Date.UTC(2021, 9, 6), 1.28], [Date.UTC(2021, 10, 6), 1.21], [Date.UTC(2021, 11, 5), 0.95], [Date.UTC(2022, 0, 1), 1.04], [Date.UTC(2022, 1, 2), 1.23], [Date.UTC(2022, 2, 2), 0.98], [Date.UTC(2022, 3, 5), 1.09], [Date.UTC(2022, 4, 3), 1.11], [Date.UTC(2022, 5, 4), 1.02], [Date.UTC(2022, 6, 2), 1.14], [Date.UTC(2022, 7, 2), 0.96], [Date.UTC(2022, 8, 1), 1.16], [Date.UTC(2022, 9, 1), 1.27], [Date.UTC(2022, 10, 1), 1.15], [Date.UTC(2022, 11, 2), 1.15], [Date.UTC(2022, 11, 29), 1.14], [Date.UTC(2023, 1, 1), 1.11], [Date.UTC(2023, 2, 2), 1.24], [Date.UTC(2023, 3, 1), 1.28], [Date.UTC(2023, 4, 2), 0.99], [Date.UTC(2023, 5, 2), 1.00], [Date.UTC(2023, 6, 2), 1.07], [Date.UTC(2023, 7, 4), 1.16], [Date.UTC(2023, 8, 2), 1.19], [Date.UTC(2023, 9, 4), 1.37], [Date.UTC(2023, 10, 2), 1.19], [Date.UTC(2023, 11, 4), 1.03], [Date.UTC(2024, 0, 2), 1.38], [Date.UTC(2024, 1, 2), 1.73], [Date.UTC(2024, 2, 1), 1.56], [Date.UTC(2024, 3, 3), 1.85], [Date.UTC(2024, 4, 1), 1.60]]}, {name : 'SQL',data : [[Date.UTC(2001, 5, 30), 2.96], [Date.UTC(2001, 6, 30), 2.77], [Date.UTC(2001, 7, 30), 2.38], [Date.UTC(2001, 8, 28), 2.36], [Date.UTC(2001, 9, 26), 2.24], [Date.UTC(2001, 10, 28), 1.84], [Date.UTC(2001, 11, 31), 1.87], [Date.UTC(2002, 0, 30), 1.94], [Date.UTC(2002, 1, 27), 2.09], [Date.UTC(2002, 2, 29), 2.06], [Date.UTC(2002, 3, 29), 2.33], [Date.UTC(2002, 4, 29), 2.36], [Date.UTC(2002, 5, 29), 2.53], [Date.UTC(2002, 6, 31), 2.66], [Date.UTC(2002, 7, 29), 2.65], [Date.UTC(2002, 8, 29), 2.54], [Date.UTC(2002, 9, 30), 2.64], [Date.UTC(2002, 10, 29), 2.38], [Date.UTC(2002, 11, 31), 2.52], [Date.UTC(2003, 0, 31), 2.56], [Date.UTC(2003, 1, 28), 2.51], [Date.UTC(2003, 2, 31), 2.56], [Date.UTC(2003, 3, 30), 2.65], [Date.UTC(2003, 4, 30), 3.12], [Date.UTC(2003, 5, 30), 3.04], [Date.UTC(2003, 6, 31), 2.99], [Date.UTC(2003, 7, 31), 3.24], [Date.UTC(2003, 8, 30), 3.72], [Date.UTC(2003, 9, 31), 3.70], [Date.UTC(2003, 10, 30), 2.93], [Date.UTC(2003, 11, 31), 3.10], [Date.UTC(2004, 0, 31), 3.51], [Date.UTC(2004, 1, 29), 3.10], [Date.UTC(2004, 2, 31), 2.97], [Date.UTC(2004, 3, 30), 2.44], [Date.UTC(2018, 1, 8), 2.36], [Date.UTC(2018, 2, 7), 2.69], [Date.UTC(2018, 3, 1), 2.65], [Date.UTC(2018, 4, 6), 1.99], [Date.UTC(2018, 5, 10), 2.34], [Date.UTC(2018, 6, 7), 2.33], [Date.UTC(2018, 7, 1), 2.32], [Date.UTC(2018, 8, 3), 2.06], [Date.UTC(2018, 9, 5), 2.04], [Date.UTC(2018, 10, 8), 1.84], [Date.UTC(2018, 11, 2), 2.18], [Date.UTC(2019, 0, 4), 2.28], [Date.UTC(2019, 1, 6), 1.90], [Date.UTC(2019, 2, 2), 1.93], [Date.UTC(2019, 3, 7), 2.27], [Date.UTC(2019, 4, 4), 2.56], [Date.UTC(2019, 5, 9), 2.22], [Date.UTC(2019, 6, 6), 1.98], [Date.UTC(2019, 7, 5), 1.63], [Date.UTC(2019, 8, 9), 1.94], [Date.UTC(2019, 9, 5), 1.93], [Date.UTC(2019, 10, 3), 1.69], [Date.UTC(2019, 11, 6), 1.84], [Date.UTC(2020, 0, 5), 1.50], [Date.UTC(2020, 1, 4), 1.53], [Date.UTC(2020, 2, 4), 1.83], [Date.UTC(2020, 3, 2), 2.17], [Date.UTC(2020, 4, 2), 2.09], [Date.UTC(2020, 5, 1), 1.73], [Date.UTC(2020, 6, 4), 1.40], [Date.UTC(2020, 7, 2), 1.46], [Date.UTC(2020, 8, 6), 1.76], [Date.UTC(2020, 9, 4), 1.57], [Date.UTC(2020, 10, 3), 1.54], [Date.UTC(2020, 11, 3), 1.53], [Date.UTC(2021, 0, 2), 1.61], [Date.UTC(2021, 1, 6), 1.72], [Date.UTC(2021, 2, 4), 1.87], [Date.UTC(2021, 3, 4), 1.83], [Date.UTC(2021, 4, 2), 1.71], [Date.UTC(2021, 5, 5), 1.88], [Date.UTC(2021, 6, 4), 1.53], [Date.UTC(2021, 7, 3), 1.47], [Date.UTC(2021, 8, 11), 1.80], [Date.UTC(2021, 9, 6), 2.17], [Date.UTC(2021, 10, 6), 2.11], [Date.UTC(2021, 11, 5), 1.79], [Date.UTC(2022, 0, 1), 1.80], [Date.UTC(2022, 1, 2), 1.55], [Date.UTC(2022, 2, 2), 1.85], [Date.UTC(2022, 3, 5), 2.28], [Date.UTC(2022, 4, 3), 1.87], [Date.UTC(2022, 5, 4), 1.94], [Date.UTC(2022, 6, 2), 1.64], [Date.UTC(2022, 7, 2), 1.67], [Date.UTC(2022, 8, 1), 2.01], [Date.UTC(2022, 9, 1), 1.78], [Date.UTC(2022, 10, 1), 1.82], [Date.UTC(2022, 11, 2), 2.22], [Date.UTC(2022, 11, 29), 2.50], [Date.UTC(2023, 1, 1), 2.12], [Date.UTC(2023, 2, 2), 1.95], [Date.UTC(2023, 3, 1), 1.68], [Date.UTC(2023, 4, 2), 1.48], [Date.UTC(2023, 5, 2), 1.47], [Date.UTC(2023, 6, 2), 1.48], [Date.UTC(2023, 7, 4), 1.53], [Date.UTC(2023, 8, 2), 1.44], [Date.UTC(2023, 9, 4), 1.78], [Date.UTC(2023, 10, 2), 1.88], [Date.UTC(2023, 11, 4), 1.61], [Date.UTC(2024, 0, 2), 1.46], [Date.UTC(2024, 1, 2), 1.82], [Date.UTC(2024, 2, 1), 1.92], [Date.UTC(2024, 3, 3), 1.61], [Date.UTC(2024, 4, 1), 1.44]]}, {name : 'Fortran',data : [[Date.UTC(2001, 5, 30), 1.41], [Date.UTC(2001, 6, 30), 1.31], [Date.UTC(2001, 7, 30), 1.46], [Date.UTC(2001, 8, 28), 1.40], [Date.UTC(2001, 9, 26), 1.32], [Date.UTC(2001, 10, 28), 1.29], [Date.UTC(2001, 11, 31), 1.23], [Date.UTC(2002, 0, 30), 1.23], [Date.UTC(2002, 1, 27), 1.27], [Date.UTC(2002, 2, 29), 1.27], [Date.UTC(2002, 3, 29), 1.28], [Date.UTC(2002, 4, 29), 1.26], [Date.UTC(2002, 5, 29), 1.28], [Date.UTC(2002, 6, 31), 1.05], [Date.UTC(2002, 7, 29), 1.16], [Date.UTC(2002, 8, 29), 1.14], [Date.UTC(2002, 9, 30), 1.19], [Date.UTC(2002, 10, 29), 1.22], [Date.UTC(2002, 11, 31), 1.24], [Date.UTC(2003, 0, 31), 1.14], [Date.UTC(2003, 1, 28), 1.07], [Date.UTC(2003, 2, 31), 0.96], [Date.UTC(2003, 3, 30), 0.87], [Date.UTC(2003, 4, 30), 0.91], [Date.UTC(2003, 5, 30), 0.94], [Date.UTC(2003, 6, 31), 0.87], [Date.UTC(2003, 7, 31), 0.83], [Date.UTC(2003, 8, 30), 0.73], [Date.UTC(2003, 9, 31), 0.78], [Date.UTC(2003, 10, 30), 0.56], [Date.UTC(2003, 11, 31), 0.54], [Date.UTC(2004, 0, 31), 0.48], [Date.UTC(2004, 1, 29), 0.50], [Date.UTC(2004, 2, 31), 0.51], [Date.UTC(2004, 3, 30), 0.38], [Date.UTC(2004, 4, 30), 0.37], [Date.UTC(2004, 5, 30), 0.34], [Date.UTC(2004, 6, 31), 0.33], [Date.UTC(2004, 7, 30), 0.28], [Date.UTC(2004, 8, 30), 0.37], [Date.UTC(2004, 9, 31), 0.43], [Date.UTC(2004, 10, 30), 0.50], [Date.UTC(2004, 11, 31), 0.52], [Date.UTC(2005, 0, 31), 0.52], [Date.UTC(2005, 1, 28), 0.89], [Date.UTC(2005, 2, 31), 1.05], [Date.UTC(2005, 3, 30), 1.06], [Date.UTC(2005, 4, 31), 0.82], [Date.UTC(2005, 5, 30), 0.79], [Date.UTC(2005, 6, 31), 0.59], [Date.UTC(2005, 7, 31), 0.60], [Date.UTC(2005, 8, 30), 0.64], [Date.UTC(2005, 11, 3), 0.45], [Date.UTC(2006, 0, 4), 0.47], [Date.UTC(2006, 1, 2), 0.48], [Date.UTC(2006, 2, 1), 0.46], [Date.UTC(2006, 3, 2), 0.46], [Date.UTC(2006, 4, 1), 0.43], [Date.UTC(2006, 5, 1), 0.43], [Date.UTC(2006, 6, 2), 0.37], [Date.UTC(2006, 7, 2), 0.39], [Date.UTC(2006, 8, 2), 0.40], [Date.UTC(2006, 9, 1), 0.40], [Date.UTC(2006, 10, 2), 0.39], [Date.UTC(2006, 11, 1), 0.45], [Date.UTC(2007, 0, 2), 0.48], [Date.UTC(2007, 1, 3), 0.52], [Date.UTC(2007, 2, 3), 0.53], [Date.UTC(2007, 3, 1), 0.61], [Date.UTC(2007, 4, 5), 0.63], [Date.UTC(2007, 5, 2), 0.58], [Date.UTC(2007, 6, 2), 0.56], [Date.UTC(2007, 7, 5), 0.46], [Date.UTC(2007, 8, 2), 0.48], [Date.UTC(2007, 9, 4), 0.45], [Date.UTC(2007, 10, 4), 0.60], [Date.UTC(2007, 11, 3), 0.70], [Date.UTC(2008, 0, 3), 0.31], [Date.UTC(2008, 1, 7), 0.25], [Date.UTC(2008, 5, 1), 0.33], [Date.UTC(2008, 6, 2), 0.29], [Date.UTC(2008, 7, 3), 0.29], [Date.UTC(2008, 8, 3), 0.30], [Date.UTC(2008, 9, 6), 0.38], [Date.UTC(2008, 10, 2), 0.38], [Date.UTC(2008, 11, 3), 0.35], [Date.UTC(2009, 0, 2), 0.32], [Date.UTC(2009, 1, 1), 0.31], [Date.UTC(2009, 2, 5), 0.32], [Date.UTC(2009, 3, 7), 0.34], [Date.UTC(2009, 4, 1), 0.36], [Date.UTC(2009, 5, 4), 0.37], [Date.UTC(2009, 6, 2), 0.40], [Date.UTC(2009, 7, 1), 0.40], [Date.UTC(2009, 8, 5), 0.37], [Date.UTC(2009, 9, 2), 0.38], [Date.UTC(2009, 10, 2), 0.38], [Date.UTC(2009, 11, 2), 0.43], [Date.UTC(2010, 0, 5), 0.39], [Date.UTC(2010, 1, 7), 0.38], [Date.UTC(2010, 2, 7), 0.56], [Date.UTC(2010, 3, 5), 0.35], [Date.UTC(2010, 4, 15), 0.41], [Date.UTC(2010, 6, 6), 0.35], [Date.UTC(2010, 6, 30), 0.35], [Date.UTC(2010, 8, 11), 0.46], [Date.UTC(2010, 9, 2), 0.46], [Date.UTC(2010, 10, 3), 0.48], [Date.UTC(2010, 11, 7), 0.43], [Date.UTC(2011, 0, 2), 0.46], [Date.UTC(2011, 1, 8), 0.58], [Date.UTC(2011, 2, 8), 0.35], [Date.UTC(2011, 3, 3), 0.39], [Date.UTC(2011, 4, 2), 0.50], [Date.UTC(2011, 5, 5), 0.39], [Date.UTC(2011, 5, 27), 0.39], [Date.UTC(2011, 6, 8), 0.35], [Date.UTC(2011, 7, 3), 0.39], [Date.UTC(2011, 8, 10), 0.37], [Date.UTC(2011, 9, 9), 0.38], [Date.UTC(2011, 10, 7), 0.44], [Date.UTC(2011, 11, 4), 0.48], [Date.UTC(2012, 0, 8), 0.43], [Date.UTC(2012, 1, 5), 0.52], [Date.UTC(2012, 2, 11), 0.49], [Date.UTC(2012, 3, 8), 0.40], [Date.UTC(2012, 4, 9), 0.41], [Date.UTC(2012, 5, 10), 0.45], [Date.UTC(2012, 6, 4), 0.45], [Date.UTC(2012, 7, 10), 0.44], [Date.UTC(2012, 8, 2), 0.43], [Date.UTC(2012, 9, 5), 0.42], [Date.UTC(2012, 10, 4), 0.44], [Date.UTC(2012, 11, 2), 0.44], [Date.UTC(2013, 0, 5), 0.46], [Date.UTC(2013, 1, 8), 0.46], [Date.UTC(2013, 2, 11), 0.45], [Date.UTC(2013, 3, 7), 0.41], [Date.UTC(2013, 4, 8), 0.42], [Date.UTC(2013, 5, 9), 0.41], [Date.UTC(2013, 6, 7), 0.41], [Date.UTC(2013, 6, 12), 0.41], [Date.UTC(2013, 7, 4), 0.41], [Date.UTC(2013, 8, 11), 0.54], [Date.UTC(2013, 9, 10), 0.47], [Date.UTC(2013, 10, 9), 0.48], [Date.UTC(2013, 11, 6), 0.39], [Date.UTC(2014, 0, 1), 0.41], [Date.UTC(2014, 1, 8), 0.36], [Date.UTC(2014, 2, 3), 0.36], [Date.UTC(2014, 3, 10), 0.35], [Date.UTC(2014, 4, 7), 0.42], [Date.UTC(2014, 5, 8), 0.37], [Date.UTC(2014, 6, 6), 0.38], [Date.UTC(2014, 7, 11), 0.43], [Date.UTC(2014, 8, 1), 0.41], [Date.UTC(2014, 9, 3), 0.39], [Date.UTC(2014, 10, 8), 0.55], [Date.UTC(2014, 11, 7), 0.54], [Date.UTC(2015, 0, 6), 0.27], [Date.UTC(2015, 1, 5), 0.54], [Date.UTC(2015, 2, 7), 0.61], [Date.UTC(2015, 3, 13), 0.60], [Date.UTC(2015, 4, 13), 0.62], [Date.UTC(2015, 5, 6), 0.58], [Date.UTC(2015, 6, 12), 0.77], [Date.UTC(2015, 7, 6), 0.85], [Date.UTC(2015, 8, 5), 0.89], [Date.UTC(2015, 9, 4), 0.84], [Date.UTC(2015, 10, 7), 0.83], [Date.UTC(2015, 11, 4), 0.82], [Date.UTC(2016, 0, 2), 0.85], [Date.UTC(2016, 1, 2), 0.67], [Date.UTC(2016, 2, 3), 0.79], [Date.UTC(2016, 3, 7), 0.76], [Date.UTC(2016, 4, 6), 0.70], [Date.UTC(2016, 5, 5), 0.96], [Date.UTC(2016, 6, 4), 0.94], [Date.UTC(2016, 7, 6), 0.75], [Date.UTC(2016, 8, 8), 0.68], [Date.UTC(2016, 9, 7), 0.74], [Date.UTC(2016, 10, 5), 0.74], [Date.UTC(2016, 11, 4), 0.75], [Date.UTC(2017, 0, 7), 0.74], [Date.UTC(2017, 1, 8), 0.83], [Date.UTC(2017, 2, 7), 0.74], [Date.UTC(2017, 3, 9), 0.80], [Date.UTC(2017, 4, 6), 0.76], [Date.UTC(2017, 5, 3), 0.78], [Date.UTC(2017, 6, 7), 0.86], [Date.UTC(2017, 7, 2), 0.67], [Date.UTC(2017, 8, 6), 0.88], [Date.UTC(2017, 9, 5), 1.00], [Date.UTC(2017, 10, 12), 0.67], [Date.UTC(2017, 11, 9), 0.66], [Date.UTC(2018, 0, 3), 0.43], [Date.UTC(2018, 1, 8), 0.48], [Date.UTC(2018, 2, 7), 0.46], [Date.UTC(2018, 3, 1), 0.39], [Date.UTC(2018, 4, 6), 0.42], [Date.UTC(2018, 5, 10), 0.32], [Date.UTC(2018, 6, 7), 0.37], [Date.UTC(2018, 7, 1), 0.40], [Date.UTC(2018, 8, 3), 0.42], [Date.UTC(2018, 9, 5), 0.37], [Date.UTC(2018, 10, 8), 0.38], [Date.UTC(2018, 11, 2), 0.48], [Date.UTC(2019, 0, 4), 0.44], [Date.UTC(2019, 1, 6), 0.51], [Date.UTC(2019, 2, 2), 0.47], [Date.UTC(2019, 3, 7), 0.56], [Date.UTC(2019, 4, 4), 0.52], [Date.UTC(2019, 5, 9), 0.48], [Date.UTC(2019, 6, 6), 0.38], [Date.UTC(2019, 7, 5), 0.36], [Date.UTC(2019, 8, 9), 0.36], [Date.UTC(2019, 9, 5), 0.44], [Date.UTC(2019, 10, 3), 0.39], [Date.UTC(2019, 11, 6), 0.39], [Date.UTC(2020, 0, 5), 0.31], [Date.UTC(2020, 1, 4), 0.23], [Date.UTC(2020, 2, 4), 0.29], [Date.UTC(2020, 3, 2), 0.33], [Date.UTC(2020, 4, 2), 0.32], [Date.UTC(2020, 5, 1), 0.27], [Date.UTC(2020, 6, 4), 0.22], [Date.UTC(2020, 7, 2), 0.31], [Date.UTC(2020, 8, 6), 0.36], [Date.UTC(2020, 9, 4), 0.38], [Date.UTC(2020, 10, 3), 0.41], [Date.UTC(2020, 11, 3), 0.45], [Date.UTC(2021, 0, 2), 0.46], [Date.UTC(2021, 1, 6), 0.63], [Date.UTC(2021, 2, 4), 0.83], [Date.UTC(2021, 3, 4), 0.91], [Date.UTC(2021, 4, 2), 0.83], [Date.UTC(2021, 5, 5), 1.07], [Date.UTC(2021, 6, 4), 1.12], [Date.UTC(2021, 7, 3), 1.14], [Date.UTC(2021, 8, 11), 1.01], [Date.UTC(2021, 9, 6), 1.08], [Date.UTC(2021, 10, 6), 1.19], [Date.UTC(2021, 11, 5), 1.04], [Date.UTC(2022, 0, 1), 0.77], [Date.UTC(2022, 1, 2), 0.58], [Date.UTC(2022, 2, 2), 0.39], [Date.UTC(2022, 3, 5), 0.35], [Date.UTC(2022, 4, 3), 0.38], [Date.UTC(2022, 5, 4), 0.55], [Date.UTC(2022, 6, 2), 0.76], [Date.UTC(2022, 7, 2), 0.80], [Date.UTC(2022, 8, 1), 1.03], [Date.UTC(2022, 9, 1), 0.79], [Date.UTC(2022, 10, 1), 0.57], [Date.UTC(2022, 11, 2), 0.43], [Date.UTC(2022, 11, 29), 0.45], [Date.UTC(2023, 1, 1), 0.58], [Date.UTC(2023, 2, 2), 0.79], [Date.UTC(2023, 3, 1), 0.59], [Date.UTC(2023, 4, 2), 0.78], [Date.UTC(2023, 5, 2), 0.99], [Date.UTC(2023, 6, 2), 1.25], [Date.UTC(2023, 7, 4), 1.03], [Date.UTC(2023, 8, 2), 1.28], [Date.UTC(2023, 9, 4), 1.02], [Date.UTC(2023, 10, 2), 1.30], [Date.UTC(2023, 11, 4), 1.07], [Date.UTC(2024, 0, 2), 1.09], [Date.UTC(2024, 1, 2), 1.40], [Date.UTC(2024, 2, 1), 1.22], [Date.UTC(2024, 3, 3), 1.47], [Date.UTC(2024, 4, 1), 1.24]]}
    ]

观察这个数据中的name和data没有引号,还存在Date.UTC这样没有接触过的格式,所以这个数据并不是Python的数据类型,为了可以利用里面的数据,我们将上面数据放在一个字符串里,再对非python类型的字符进行系列替换,将之转为一个可以转Python数据类型的字符串,再利用eval()函数将这个字符串转为python的数据类型,就可以利用于面的数据进行分析和绘制曲线了。

txt = """[
    	{name : 'Python',data : [[Date.UTC(2001, 5, 30), 1.25], [Date.UTC(2001, 6, 30), 1.13], [Date.UTC(2001, 7, 30), 1.20], [Date.UTC(2001, 8, 28), 1.17], [Date.UTC(2001, 9, 26), 1.28], [Date.UTC(2001, 10, 28), 1.23], [Date.UTC(2001, 11, 31), 1.04], [Date.UTC(2002, 0, 30), 1.02], [Date.UTC(2002, 1, 27), 0.99], [Date.UTC(2002, 2, 29), 0.99], [Date.UTC(2002, 3, 29), 1.07], [Date.UTC(2002, 4, 29), 1.06], [Date.UTC(2002, 5, 29), 1.13], [Date.UTC(2002, 6, 31), 1.08], [Date.UTC(2002, 7, 29), 1.22], [Date.UTC(2002, 8, 29), 1.08], [Date.UTC(2002, 9, 30), 1.19], [Date.UTC(2002, 10, 29), 1.00], [Date.UTC(2002, 11, 31), 1.00], [Date.UTC(2003, 0, 31), 1.03], [Date.UTC(2003, 1, 28), 0.97], [Date.UTC(2003, 2, 31), 0.99], [Date.UTC(2003, 3, 30), 1.01], [Date.UTC(2003, 4, 30), 1.16], [Date.UTC(2003, 5, 30), 1.28], [Date.UTC(2003, 6, 31), 1.30], [Date.UTC(2003, 7, 31), 1.42], [Date.UTC(2003, 8, 30), 1.49], [Date.UTC(2003, 9, 31), 1.77], [Date.UTC(2003, 10, 30), 1.10], [Date.UTC(2003, 11, 31), 1.13], [Date.UTC(2004, 0, 31), 1.01], [Date.UTC(2004, 1, 29), 1.02], [Date.UTC(2004, 2, 31), 1.01], [Date.UTC(2004, 3, 30), 4.57], [Date.UTC(2004, 4, 30), 6.58], [Date.UTC(2004, 5, 30), 4.96], [Date.UTC(2004, 6, 31), 4.70], [Date.UTC(2004, 7, 30), 5.60], [Date.UTC(2004, 8, 30), 4.44], [Date.UTC(2004, 9, 31), 5.20], [Date.UTC(2004, 10, 30), 3.03], [Date.UTC(2004, 11, 31), 2.84], [Date.UTC(2005, 0, 31), 2.51], [Date.UTC(2005, 1, 28), 2.42], [Date.UTC(2005, 2, 31), 2.70], [Date.UTC(2005, 3, 30), 2.48], [Date.UTC(2005, 4, 31), 2.80], [Date.UTC(2005, 5, 30), 2.52], [Date.UTC(2005, 6, 31), 2.88], [Date.UTC(2005, 7, 31), 3.03], [Date.UTC(2005, 8, 30), 2.88], [Date.UTC(2005, 11, 3), 2.68], [Date.UTC(2006, 0, 4), 2.60], [Date.UTC(2006, 1, 2), 2.67], [Date.UTC(2006, 2, 1), 3.09], [Date.UTC(2006, 3, 2), 2.76], [Date.UTC(2006, 4, 1), 3.04], [Date.UTC(2006, 5, 1), 3.46], [Date.UTC(2006, 6, 2), 3.02], [Date.UTC(2006, 7, 2), 3.07], [Date.UTC(2006, 8, 2), 3.14], [Date.UTC(2006, 9, 1), 3.47], [Date.UTC(2006, 10, 2), 3.64], [Date.UTC(2006, 11, 1), 3.76], [Date.UTC(2007, 0, 2), 3.50], [Date.UTC(2007, 1, 3), 3.57], [Date.UTC(2007, 2, 3), 3.90], [Date.UTC(2007, 3, 1), 3.81], [Date.UTC(2007, 4, 5), 3.78], [Date.UTC(2007, 5, 2), 3.16], [Date.UTC(2007, 6, 2), 3.02], [Date.UTC(2007, 7, 5), 2.75], [Date.UTC(2007, 8, 2), 3.03], [Date.UTC(2007, 9, 4), 3.43], [Date.UTC(2007, 10, 4), 4.23], [Date.UTC(2007, 11, 3), 4.70], [Date.UTC(2008, 0, 3), 5.54], [Date.UTC(2008, 1, 7), 4.76], [Date.UTC(2008, 5, 1), 4.90], [Date.UTC(2008, 6, 2), 4.97], [Date.UTC(2008, 7, 3), 4.98], [Date.UTC(2008, 8, 3), 5.01], [Date.UTC(2008, 9, 6), 4.56], [Date.UTC(2008, 10, 2), 5.14], [Date.UTC(2008, 11, 3), 4.17], [Date.UTC(2009, 0, 2), 4.73], [Date.UTC(2009, 1, 1), 4.57], [Date.UTC(2009, 2, 5), 5.18], [Date.UTC(2009, 3, 7), 6.08], [Date.UTC(2009, 4, 1), 5.55], [Date.UTC(2009, 5, 4), 4.76], [Date.UTC(2009, 6, 2), 4.43], [Date.UTC(2009, 7, 1), 4.49], [Date.UTC(2009, 8, 5), 3.93], [Date.UTC(2009, 9, 2), 3.90], [Date.UTC(2009, 10, 2), 4.67], [Date.UTC(2009, 11, 2), 5.19], [Date.UTC(2010, 0, 5), 4.45], [Date.UTC(2010, 1, 7), 4.31], [Date.UTC(2010, 2, 7), 4.23], [Date.UTC(2010, 3, 5), 4.21], [Date.UTC(2010, 4, 15), 4.10], [Date.UTC(2010, 6, 6), 4.22], [Date.UTC(2010, 6, 30), 4.22], [Date.UTC(2010, 8, 11), 4.58], [Date.UTC(2010, 9, 2), 4.86], [Date.UTC(2010, 10, 3), 5.68], [Date.UTC(2010, 11, 7), 6.48], [Date.UTC(2011, 0, 2), 6.26], [Date.UTC(2011, 1, 8), 7.04], [Date.UTC(2011, 2, 8), 5.74], [Date.UTC(2011, 3, 3), 4.93], [Date.UTC(2011, 4, 2), 4.58], [Date.UTC(2011, 5, 5), 3.90], [Date.UTC(2011, 5, 27), 3.90], [Date.UTC(2011, 6, 8), 3.58], [Date.UTC(2011, 7, 3), 3.41], [Date.UTC(2011, 8, 10), 4.00], [Date.UTC(2011, 9, 9), 3.94], [Date.UTC(2011, 10, 7), 3.62], [Date.UTC(2011, 11, 4), 3.49], [Date.UTC(2012, 0, 8), 3.21], [Date.UTC(2012, 1, 5), 3.15], [Date.UTC(2012, 2, 11), 3.29], [Date.UTC(2012, 3, 8), 3.66], [Date.UTC(2012, 4, 9), 3.82], [Date.UTC(2012, 5, 10), 3.85], [Date.UTC(2012, 6, 4), 4.00], [Date.UTC(2012, 7, 10), 3.88], [Date.UTC(2012, 8, 2), 3.86], [Date.UTC(2012, 9, 5), 3.90], [Date.UTC(2012, 10, 4), 4.06], [Date.UTC(2012, 11, 2), 3.85], [Date.UTC(2013, 0, 5), 4.17], [Date.UTC(2013, 1, 8), 4.95], [Date.UTC(2013, 2, 11), 4.39], [Date.UTC(2013, 3, 7), 4.44], [Date.UTC(2013, 4, 8), 4.32], [Date.UTC(2013, 5, 9), 4.18], [Date.UTC(2013, 6, 7), 4.03], [Date.UTC(2013, 6, 12), 4.03], [Date.UTC(2013, 7, 4), 3.60], [Date.UTC(2013, 8, 11), 3.17], [Date.UTC(2013, 9, 10), 3.11], [Date.UTC(2013, 10, 9), 3.11], [Date.UTC(2013, 11, 6), 2.21], [Date.UTC(2014, 0, 1), 2.37], [Date.UTC(2014, 1, 8), 2.16], [Date.UTC(2014, 2, 3), 2.02], [Date.UTC(2014, 3, 10), 1.99], [Date.UTC(2014, 4, 7), 3.06], [Date.UTC(2014, 5, 8), 2.71], [Date.UTC(2014, 6, 6), 2.66], [Date.UTC(2014, 7, 11), 3.12], [Date.UTC(2014, 8, 1), 2.78], [Date.UTC(2014, 9, 3), 2.33], [Date.UTC(2014, 10, 8), 2.59], [Date.UTC(2014, 11, 7), 2.29], [Date.UTC(2015, 0, 6), 2.61], [Date.UTC(2015, 1, 5), 2.88], [Date.UTC(2015, 2, 7), 2.61], [Date.UTC(2015, 3, 13), 2.69], [Date.UTC(2015, 4, 13), 3.72], [Date.UTC(2015, 5, 6), 4.00], [Date.UTC(2015, 6, 12), 4.26], [Date.UTC(2015, 7, 6), 4.07], [Date.UTC(2015, 8, 5), 3.66], [Date.UTC(2015, 9, 4), 4.51], [Date.UTC(2015, 10, 7), 3.77], [Date.UTC(2015, 11, 4), 4.43], [Date.UTC(2016, 0, 2), 3.85], [Date.UTC(2016, 1, 2), 4.18], [Date.UTC(2016, 2, 3), 4.26], [Date.UTC(2016, 3, 7), 3.33], [Date.UTC(2016, 4, 6), 3.79], [Date.UTC(2016, 5, 5), 3.90], [Date.UTC(2016, 6, 4), 4.17], [Date.UTC(2016, 7, 6), 4.40], [Date.UTC(2016, 8, 8), 4.30], [Date.UTC(2016, 9, 7), 3.77], [Date.UTC(2016, 10, 5), 3.57], [Date.UTC(2016, 11, 4), 4.24], [Date.UTC(2017, 0, 7), 3.46], [Date.UTC(2017, 1, 8), 4.04], [Date.UTC(2017, 2, 7), 3.92], [Date.UTC(2017, 3, 9), 3.46], [Date.UTC(2017, 4, 6), 3.55], [Date.UTC(2017, 5, 3), 4.33], [Date.UTC(2017, 6, 7), 3.54], [Date.UTC(2017, 7, 2), 3.69], [Date.UTC(2017, 8, 6), 2.98], [Date.UTC(2017, 9, 5), 3.80], [Date.UTC(2017, 10, 12), 4.48], [Date.UTC(2017, 11, 9), 3.78], [Date.UTC(2018, 0, 3), 4.68], [Date.UTC(2018, 1, 8), 5.17], [Date.UTC(2018, 2, 7), 5.87], [Date.UTC(2018, 3, 1), 5.80], [Date.UTC(2018, 4, 6), 5.19], [Date.UTC(2018, 5, 10), 5.76], [Date.UTC(2018, 6, 7), 6.36], [Date.UTC(2018, 7, 1), 6.99], [Date.UTC(2018, 8, 3), 7.65], [Date.UTC(2018, 9, 5), 7.16], [Date.UTC(2018, 10, 8), 7.68], [Date.UTC(2018, 11, 2), 8.38], [Date.UTC(2019, 0, 4), 8.29], [Date.UTC(2019, 1, 6), 7.57], [Date.UTC(2019, 2, 2), 8.26], [Date.UTC(2019, 3, 7), 8.17], [Date.UTC(2019, 4, 4), 7.83], [Date.UTC(2019, 5, 9), 8.53], [Date.UTC(2019, 6, 6), 9.26], [Date.UTC(2019, 7, 5), 10.02], [Date.UTC(2019, 8, 9), 9.87], [Date.UTC(2019, 9, 5), 9.09], [Date.UTC(2019, 10, 3), 9.84], [Date.UTC(2019, 11, 6), 10.31], [Date.UTC(2020, 0, 5), 9.70], [Date.UTC(2020, 1, 4), 9.35], [Date.UTC(2020, 2, 4), 10.11], [Date.UTC(2020, 3, 2), 9.31], [Date.UTC(2020, 4, 2), 9.12], [Date.UTC(2020, 5, 1), 8.36], [Date.UTC(2020, 6, 4), 9.09], [Date.UTC(2020, 7, 2), 9.69], [Date.UTC(2020, 8, 6), 10.47], [Date.UTC(2020, 9, 4), 11.28], [Date.UTC(2020, 10, 3), 12.12], [Date.UTC(2020, 11, 3), 12.21], [Date.UTC(2021, 0, 2), 11.72], [Date.UTC(2021, 1, 6), 10.86], [Date.UTC(2021, 2, 4), 10.31], [Date.UTC(2021, 3, 4), 11.03], [Date.UTC(2021, 4, 2), 11.87], [Date.UTC(2021, 5, 5), 11.84], [Date.UTC(2021, 6, 4), 10.96], [Date.UTC(2021, 7, 3), 11.86], [Date.UTC(2021, 8, 11), 11.67], [Date.UTC(2021, 9, 6), 11.27], [Date.UTC(2021, 10, 6), 11.77], [Date.UTC(2021, 11, 5), 12.90], [Date.UTC(2022, 0, 1), 13.58], [Date.UTC(2022, 1, 2), 15.33], [Date.UTC(2022, 2, 2), 14.26], [Date.UTC(2022, 3, 5), 13.92], [Date.UTC(2022, 4, 3), 12.74], [Date.UTC(2022, 5, 4), 12.20], [Date.UTC(2022, 6, 2), 13.44], [Date.UTC(2022, 7, 2), 15.63], [Date.UTC(2022, 8, 1), 15.74], [Date.UTC(2022, 9, 1), 17.08], [Date.UTC(2022, 10, 1), 17.18], [Date.UTC(2022, 11, 2), 16.66], [Date.UTC(2022, 11, 29), 16.36], [Date.UTC(2023, 1, 1), 15.49], [Date.UTC(2023, 2, 2), 14.83], [Date.UTC(2023, 3, 1), 14.51], [Date.UTC(2023, 4, 2), 13.45], [Date.UTC(2023, 5, 2), 12.46], [Date.UTC(2023, 6, 2), 13.42], [Date.UTC(2023, 7, 4), 13.33], [Date.UTC(2023, 8, 2), 14.16], [Date.UTC(2023, 9, 4), 14.82], [Date.UTC(2023, 10, 2), 14.16], [Date.UTC(2023, 11, 4), 13.86], [Date.UTC(2024, 0, 2), 13.97], [Date.UTC(2024, 1, 2), 15.16], [Date.UTC(2024, 2, 1), 15.63], [Date.UTC(2024, 3, 3), 16.41], [Date.UTC(2024, 4, 1), 16.33]]}, {name : 'C',data : [[Date.UTC(2001, 5, 30), 20.24], [Date.UTC(2001, 6, 30), 20.77], [Date.UTC(2001, 7, 30), 20.75], [Date.UTC(2001, 8, 28), 20.77], [Date.UTC(2001, 9, 26), 19.75], [Date.UTC(2001, 10, 28), 19.21], [Date.UTC(2001, 11, 31), 20.14], [Date.UTC(2002, 0, 30), 18.83], [Date.UTC(2002, 1, 27), 19.89], [Date.UTC(2002, 2, 29), 19.85], [Date.UTC(2002, 3, 29), 19.82], [Date.UTC(2002, 4, 29), 19.99], [Date.UTC(2002, 5, 29), 19.57], [Date.UTC(2002, 6, 31), 19.25], [Date.UTC(2002, 7, 29), 18.16], [Date.UTC(2002, 8, 29), 18.70], [Date.UTC(2002, 9, 30), 18.73], [Date.UTC(2002, 10, 29), 17.50], [Date.UTC(2002, 11, 31), 17.26], [Date.UTC(2003, 0, 31), 18.25], [Date.UTC(2003, 1, 28), 18.54], [Date.UTC(2003, 2, 31), 17.21], [Date.UTC(2003, 3, 30), 18.02], [Date.UTC(2003, 4, 30), 18.50], [Date.UTC(2003, 5, 30), 18.52], [Date.UTC(2003, 6, 31), 17.97], [Date.UTC(2003, 7, 31), 17.78], [Date.UTC(2003, 8, 30), 18.31], [Date.UTC(2003, 9, 31), 17.00], [Date.UTC(2003, 10, 30), 18.47], [Date.UTC(2003, 11, 31), 18.60], [Date.UTC(2004, 0, 31), 18.20], [Date.UTC(2004, 1, 29), 18.93], [Date.UTC(2004, 2, 31), 17.75], [Date.UTC(2004, 3, 30), 17.95], [Date.UTC(2004, 4, 30), 18.29], [Date.UTC(2004, 5, 30), 17.14], [Date.UTC(2004, 6, 31), 16.33], [Date.UTC(2004, 7, 30), 17.12], [Date.UTC(2004, 8, 30), 18.17], [Date.UTC(2004, 9, 31), 17.99], [Date.UTC(2004, 10, 30), 19.70], [Date.UTC(2004, 11, 31), 20.71], [Date.UTC(2005, 0, 31), 19.82], [Date.UTC(2005, 1, 28), 19.47], [Date.UTC(2005, 2, 31), 18.63], [Date.UTC(2005, 3, 30), 18.52], [Date.UTC(2005, 4, 31), 19.37], [Date.UTC(2005, 5, 30), 19.85], [Date.UTC(2005, 6, 31), 19.47], [Date.UTC(2005, 7, 31), 19.16], [Date.UTC(2005, 8, 30), 18.77], [Date.UTC(2005, 11, 3), 19.63], [Date.UTC(2006, 0, 4), 19.01], [Date.UTC(2006, 1, 2), 18.33], [Date.UTC(2006, 2, 1), 17.79], [Date.UTC(2006, 3, 2), 17.69], [Date.UTC(2006, 4, 1), 17.69], [Date.UTC(2006, 5, 1), 18.25], [Date.UTC(2006, 6, 2), 17.83], [Date.UTC(2006, 7, 2), 17.43], [Date.UTC(2006, 8, 2), 18.06], [Date.UTC(2006, 9, 1), 17.66], [Date.UTC(2006, 10, 2), 17.20], [Date.UTC(2006, 11, 1), 16.62], [Date.UTC(2007, 0, 2), 15.81], [Date.UTC(2007, 1, 3), 16.10], [Date.UTC(2007, 2, 3), 15.63], [Date.UTC(2007, 3, 1), 14.94], [Date.UTC(2007, 4, 5), 15.15], [Date.UTC(2007, 5, 2), 15.97], [Date.UTC(2007, 6, 2), 16.36], [Date.UTC(2007, 7, 5), 15.70], [Date.UTC(2007, 8, 2), 14.91], [Date.UTC(2007, 9, 4), 14.59], [Date.UTC(2007, 10, 4), 13.97], [Date.UTC(2007, 11, 3), 13.17], [Date.UTC(2008, 0, 3), 13.92], [Date.UTC(2008, 1, 7), 14.86], [Date.UTC(2008, 5, 1), 15.51], [Date.UTC(2008, 6, 2), 15.95], [Date.UTC(2008, 7, 3), 16.18], [Date.UTC(2008, 8, 3), 15.38], [Date.UTC(2008, 9, 6), 15.57], [Date.UTC(2008, 10, 2), 15.28], [Date.UTC(2008, 11, 3), 15.02], [Date.UTC(2009, 0, 2), 15.93], [Date.UTC(2009, 1, 1), 15.84], [Date.UTC(2009, 2, 5), 15.86], [Date.UTC(2009, 3, 7), 15.47], [Date.UTC(2009, 4, 1), 16.13], [Date.UTC(2009, 5, 4), 16.78], [Date.UTC(2009, 6, 2), 17.32], [Date.UTC(2009, 7, 1), 17.22], [Date.UTC(2009, 8, 5), 16.86], [Date.UTC(2009, 9, 2), 16.84], [Date.UTC(2009, 10, 2), 17.32], [Date.UTC(2009, 11, 2), 16.28], [Date.UTC(2010, 0, 5), 16.22], [Date.UTC(2010, 1, 7), 16.60], [Date.UTC(2010, 2, 7), 17.28], [Date.UTC(2010, 3, 5), 18.06], [Date.UTC(2010, 4, 15), 18.19], [Date.UTC(2010, 6, 6), 18.48], [Date.UTC(2010, 6, 30), 17.87], [Date.UTC(2010, 8, 11), 17.15], [Date.UTC(2010, 9, 2), 17.18], [Date.UTC(2010, 10, 3), 16.72], [Date.UTC(2010, 11, 7), 16.08], [Date.UTC(2011, 0, 2), 15.82], [Date.UTC(2011, 1, 8), 14.99], [Date.UTC(2011, 2, 8), 15.26], [Date.UTC(2011, 3, 3), 16.16], [Date.UTC(2011, 4, 2), 16.17], [Date.UTC(2011, 5, 5), 16.28], [Date.UTC(2011, 5, 27), 16.28], [Date.UTC(2011, 6, 8), 17.28], [Date.UTC(2011, 7, 3), 17.39], [Date.UTC(2011, 8, 10), 18.00], [Date.UTC(2011, 9, 9), 17.71], [Date.UTC(2011, 10, 7), 17.32], [Date.UTC(2011, 11, 4), 17.06], [Date.UTC(2012, 0, 8), 16.97], [Date.UTC(2012, 1, 5), 16.52], [Date.UTC(2012, 2, 11), 17.09], [Date.UTC(2012, 3, 8), 17.55], [Date.UTC(2012, 4, 9), 17.35], [Date.UTC(2012, 5, 10), 17.72], [Date.UTC(2012, 6, 4), 18.33], [Date.UTC(2012, 7, 10), 18.94], [Date.UTC(2012, 8, 2), 19.30], [Date.UTC(2012, 9, 5), 19.82], [Date.UTC(2012, 10, 4), 19.22], [Date.UTC(2012, 11, 2), 18.70], [Date.UTC(2013, 0, 5), 17.85], [Date.UTC(2013, 1, 8), 17.08], [Date.UTC(2013, 2, 11), 17.14], [Date.UTC(2013, 3, 7), 17.86], [Date.UTC(2013, 4, 8), 18.73], [Date.UTC(2013, 5, 9), 17.81], [Date.UTC(2013, 6, 7), 17.63], [Date.UTC(2013, 6, 12), 17.63], [Date.UTC(2013, 7, 4), 15.97], [Date.UTC(2013, 8, 11), 16.98], [Date.UTC(2013, 9, 10), 17.25], [Date.UTC(2013, 10, 9), 18.16], [Date.UTC(2013, 11, 6), 17.89], [Date.UTC(2014, 0, 1), 17.94], [Date.UTC(2014, 1, 8), 18.33], [Date.UTC(2014, 2, 3), 17.53], [Date.UTC(2014, 3, 10), 17.63], [Date.UTC(2014, 4, 7), 16.93], [Date.UTC(2014, 5, 8), 16.19], [Date.UTC(2014, 6, 6), 17.14], [Date.UTC(2014, 7, 11), 16.40], [Date.UTC(2014, 8, 1), 16.72], [Date.UTC(2014, 9, 3), 17.66], [Date.UTC(2014, 10, 8), 17.47], [Date.UTC(2014, 11, 7), 17.59], [Date.UTC(2015, 0, 6), 16.70], [Date.UTC(2015, 1, 5), 16.49], [Date.UTC(2015, 2, 7), 16.64], [Date.UTC(2015, 3, 13), 15.75], [Date.UTC(2015, 4, 13), 16.85], [Date.UTC(2015, 5, 6), 16.79], [Date.UTC(2015, 6, 12), 16.15], [Date.UTC(2015, 7, 6), 14.73], [Date.UTC(2015, 8, 5), 15.62], [Date.UTC(2015, 9, 4), 16.19], [Date.UTC(2015, 10, 7), 17.15], [Date.UTC(2015, 11, 4), 16.46], [Date.UTC(2016, 0, 2), 16.04], [Date.UTC(2016, 1, 2), 15.59], [Date.UTC(2016, 2, 3), 14.60], [Date.UTC(2016, 3, 7), 13.91], [Date.UTC(2016, 4, 6), 13.22], [Date.UTC(2016, 5, 5), 12.38], [Date.UTC(2016, 6, 4), 12.24], [Date.UTC(2016, 7, 6), 11.30], [Date.UTC(2016, 8, 8), 10.95], [Date.UTC(2016, 9, 7), 9.84], [Date.UTC(2016, 10, 5), 9.20], [Date.UTC(2016, 11, 4), 8.73], [Date.UTC(2017, 0, 7), 9.35], [Date.UTC(2017, 1, 8), 8.44], [Date.UTC(2017, 2, 7), 7.74], [Date.UTC(2017, 3, 9), 6.97], [Date.UTC(2017, 4, 6), 7.00], [Date.UTC(2017, 5, 3), 6.85], [Date.UTC(2017, 6, 7), 7.32], [Date.UTC(2017, 7, 2), 6.48], [Date.UTC(2017, 8, 6), 7.38], [Date.UTC(2017, 9, 5), 8.37], [Date.UTC(2017, 10, 12), 9.29], [Date.UTC(2017, 11, 9), 10.16], [Date.UTC(2018, 0, 3), 11.04], [Date.UTC(2018, 1, 8), 11.86], [Date.UTC(2018, 2, 7), 12.76], [Date.UTC(2018, 3, 1), 13.59], [Date.UTC(2018, 4, 6), 14.00], [Date.UTC(2018, 5, 10), 14.94], [Date.UTC(2018, 6, 7), 14.66], [Date.UTC(2018, 7, 1), 14.97], [Date.UTC(2018, 8, 3), 15.45], [Date.UTC(2018, 9, 5), 15.38], [Date.UTC(2018, 10, 8), 14.40], [Date.UTC(2018, 11, 2), 14.28], [Date.UTC(2019, 0, 4), 13.34], [Date.UTC(2019, 1, 6), 12.42], [Date.UTC(2019, 2, 2), 13.31], [Date.UTC(2019, 3, 7), 14.08], [Date.UTC(2019, 4, 4), 14.24], [Date.UTC(2019, 5, 9), 13.30], [Date.UTC(2019, 6, 6), 14.21], [Date.UTC(2019, 7, 5), 15.15], [Date.UTC(2019, 8, 9), 15.21], [Date.UTC(2019, 9, 5), 16.18], [Date.UTC(2019, 10, 3), 16.04], [Date.UTC(2019, 11, 6), 16.09], [Date.UTC(2020, 0, 5), 15.77], [Date.UTC(2020, 1, 4), 16.77], [Date.UTC(2020, 2, 4), 16.33], [Date.UTC(2020, 3, 2), 16.72], [Date.UTC(2020, 4, 2), 17.07], [Date.UTC(2020, 5, 1), 17.19], [Date.UTC(2020, 6, 4), 16.45], [Date.UTC(2020, 7, 2), 16.98], [Date.UTC(2020, 8, 6), 15.95], [Date.UTC(2020, 9, 4), 16.95], [Date.UTC(2020, 10, 3), 16.21], [Date.UTC(2020, 11, 3), 16.48], [Date.UTC(2021, 0, 2), 17.38], [Date.UTC(2021, 1, 6), 16.34], [Date.UTC(2021, 2, 4), 15.33], [Date.UTC(2021, 3, 4), 14.32], [Date.UTC(2021, 4, 2), 13.38], [Date.UTC(2021, 5, 5), 12.54], [Date.UTC(2021, 6, 4), 11.63], [Date.UTC(2021, 7, 3), 12.57], [Date.UTC(2021, 8, 11), 11.83], [Date.UTC(2021, 9, 6), 11.16], [Date.UTC(2021, 10, 6), 10.72], [Date.UTC(2021, 11, 5), 11.80], [Date.UTC(2022, 0, 1), 12.44], [Date.UTC(2022, 1, 2), 14.08], [Date.UTC(2022, 2, 2), 13.06], [Date.UTC(2022, 3, 5), 12.71], [Date.UTC(2022, 4, 3), 11.59], [Date.UTC(2022, 5, 4), 11.91], [Date.UTC(2022, 6, 2), 13.13], [Date.UTC(2022, 7, 2), 14.76], [Date.UTC(2022, 8, 1), 13.96], [Date.UTC(2022, 9, 1), 15.21], [Date.UTC(2022, 10, 1), 15.08], [Date.UTC(2022, 11, 2), 16.56], [Date.UTC(2022, 11, 29), 16.26], [Date.UTC(2023, 1, 1), 15.39], [Date.UTC(2023, 2, 2), 14.73], [Date.UTC(2023, 3, 1), 14.41], [Date.UTC(2023, 4, 2), 13.35], [Date.UTC(2023, 5, 2), 12.37], [Date.UTC(2023, 6, 2), 11.56], [Date.UTC(2023, 7, 4), 11.41], [Date.UTC(2023, 8, 2), 11.27], [Date.UTC(2023, 9, 4), 12.08], [Date.UTC(2023, 10, 2), 11.77], [Date.UTC(2023, 11, 4), 11.44], [Date.UTC(2024, 0, 2), 11.44], [Date.UTC(2024, 1, 2), 10.97], [Date.UTC(2024, 2, 1), 11.17], [Date.UTC(2024, 3, 3), 10.21], [Date.UTC(2024, 4, 1), 9.98]]}, {name : 'C++',data : [[Date.UTC(2001, 5, 30), 14.20], [Date.UTC(2001, 6, 30), 16.11], [Date.UTC(2001, 7, 30), 16.12], [Date.UTC(2001, 8, 28), 15.85], [Date.UTC(2001, 9, 26), 16.10], [Date.UTC(2001, 10, 28), 15.67], [Date.UTC(2001, 11, 31), 14.96], [Date.UTC(2002, 0, 30), 15.18], [Date.UTC(2002, 1, 27), 15.54], [Date.UTC(2002, 2, 29), 15.91], [Date.UTC(2002, 3, 29), 15.37], [Date.UTC(2002, 4, 29), 14.86], [Date.UTC(2002, 5, 29), 14.18], [Date.UTC(2002, 6, 31), 14.94], [Date.UTC(2002, 7, 29), 14.77], [Date.UTC(2002, 8, 29), 15.90], [Date.UTC(2002, 9, 30), 15.03], [Date.UTC(2002, 10, 29), 13.64], [Date.UTC(2002, 11, 31), 13.19], [Date.UTC(2003, 0, 31), 14.63], [Date.UTC(2003, 1, 28), 15.53], [Date.UTC(2003, 2, 31), 14.57], [Date.UTC(2003, 3, 30), 15.80], [Date.UTC(2003, 4, 30), 15.58], [Date.UTC(2003, 5, 30), 16.72], [Date.UTC(2003, 6, 31), 16.58], [Date.UTC(2003, 7, 31), 17.53], [Date.UTC(2003, 8, 30), 16.17], [Date.UTC(2003, 9, 31), 16.31], [Date.UTC(2003, 10, 30), 17.42], [Date.UTC(2003, 11, 31), 16.08], [Date.UTC(2004, 0, 31), 15.71], [Date.UTC(2004, 1, 29), 14.50], [Date.UTC(2004, 2, 31), 15.99], [Date.UTC(2004, 3, 30), 12.27], [Date.UTC(2004, 4, 30), 12.55], [Date.UTC(2004, 5, 30), 13.44], [Date.UTC(2004, 6, 31), 15.31], [Date.UTC(2004, 7, 30), 14.92], [Date.UTC(2004, 8, 30), 15.02], [Date.UTC(2004, 9, 31), 13.86], [Date.UTC(2004, 10, 30), 11.91], [Date.UTC(2004, 11, 31), 11.93], [Date.UTC(2005, 0, 31), 11.34], [Date.UTC(2005, 1, 28), 11.63], [Date.UTC(2005, 2, 31), 10.19], [Date.UTC(2005, 3, 30), 9.90], [Date.UTC(2005, 4, 31), 9.72], [Date.UTC(2005, 5, 30), 11.06], [Date.UTC(2005, 6, 31), 10.51], [Date.UTC(2005, 7, 31), 11.17], [Date.UTC(2005, 8, 30), 11.82], [Date.UTC(2005, 11, 3), 11.03], [Date.UTC(2006, 0, 4), 11.46], [Date.UTC(2006, 1, 2), 11.30], [Date.UTC(2006, 2, 1), 11.16], [Date.UTC(2006, 3, 2), 10.90], [Date.UTC(2006, 4, 1), 10.94], [Date.UTC(2006, 5, 1), 10.67], [Date.UTC(2006, 6, 2), 9.78], [Date.UTC(2006, 7, 2), 10.25], [Date.UTC(2006, 8, 2), 10.75], [Date.UTC(2006, 9, 1), 11.06], [Date.UTC(2006, 10, 2), 11.05], [Date.UTC(2006, 11, 1), 10.41], [Date.UTC(2007, 0, 2), 10.42], [Date.UTC(2007, 1, 3), 10.77], [Date.UTC(2007, 2, 3), 11.11], [Date.UTC(2007, 3, 1), 10.72], [Date.UTC(2007, 4, 5), 10.11], [Date.UTC(2007, 5, 2), 11.12], [Date.UTC(2007, 6, 2), 10.50], [Date.UTC(2007, 7, 5), 10.11], [Date.UTC(2007, 8, 2), 9.94], [Date.UTC(2007, 9, 4), 9.58], [Date.UTC(2007, 10, 4), 8.75], [Date.UTC(2007, 11, 3), 7.87], [Date.UTC(2008, 0, 3), 8.73], [Date.UTC(2008, 1, 7), 9.27], [Date.UTC(2008, 5, 1), 10.81], [Date.UTC(2008, 6, 2), 10.69], [Date.UTC(2008, 7, 3), 10.06], [Date.UTC(2008, 8, 3), 10.72], [Date.UTC(2008, 9, 6), 10.95], [Date.UTC(2008, 10, 2), 10.36], [Date.UTC(2008, 11, 3), 10.10], [Date.UTC(2009, 0, 2), 10.12], [Date.UTC(2009, 1, 1), 9.63], [Date.UTC(2009, 2, 5), 10.36], [Date.UTC(2009, 3, 7), 10.74], [Date.UTC(2009, 4, 1), 11.07], [Date.UTC(2009, 5, 4), 10.59], [Date.UTC(2009, 6, 2), 10.42], [Date.UTC(2009, 7, 1), 10.50], [Date.UTC(2009, 8, 5), 9.99], [Date.UTC(2009, 9, 2), 9.88], [Date.UTC(2009, 10, 2), 10.00], [Date.UTC(2009, 11, 2), 9.18], [Date.UTC(2010, 0, 5), 9.71], [Date.UTC(2010, 1, 7), 9.45], [Date.UTC(2010, 2, 7), 9.61], [Date.UTC(2010, 3, 5), 9.71], [Date.UTC(2010, 4, 15), 10.38], [Date.UTC(2010, 6, 6), 10.47], [Date.UTC(2010, 6, 30), 9.66], [Date.UTC(2010, 8, 11), 9.81], [Date.UTC(2010, 9, 2), 9.80], [Date.UTC(2010, 10, 3), 9.50], [Date.UTC(2010, 11, 7), 9.01], [Date.UTC(2011, 0, 2), 8.78], [Date.UTC(2011, 1, 8), 8.19], [Date.UTC(2011, 2, 8), 8.75], [Date.UTC(2011, 3, 3), 9.23], [Date.UTC(2011, 4, 2), 9.15], [Date.UTC(2011, 5, 5), 9.83], [Date.UTC(2011, 5, 27), 9.83], [Date.UTC(2011, 6, 8), 9.02], [Date.UTC(2011, 7, 3), 8.43], [Date.UTC(2011, 8, 10), 8.85], [Date.UTC(2011, 9, 9), 9.07], [Date.UTC(2011, 10, 7), 8.08], [Date.UTC(2011, 11, 4), 8.25], [Date.UTC(2012, 0, 8), 8.05], [Date.UTC(2012, 1, 5), 7.85], [Date.UTC(2012, 2, 11), 8.05], [Date.UTC(2012, 3, 8), 8.90], [Date.UTC(2012, 4, 9), 9.82], [Date.UTC(2012, 5, 10), 9.36], [Date.UTC(2012, 6, 4), 9.12], [Date.UTC(2012, 7, 10), 9.33], [Date.UTC(2012, 8, 2), 9.15], [Date.UTC(2012, 9, 5), 9.26], [Date.UTC(2012, 10, 4), 9.70], [Date.UTC(2012, 11, 2), 9.20], [Date.UTC(2013, 0, 5), 9.14], [Date.UTC(2013, 1, 8), 8.76], [Date.UTC(2013, 2, 11), 9.11], [Date.UTC(2013, 3, 7), 9.71], [Date.UTC(2013, 4, 8), 9.20], [Date.UTC(2013, 5, 9), 8.82], [Date.UTC(2013, 6, 7), 8.75], [Date.UTC(2013, 6, 12), 8.75], [Date.UTC(2013, 7, 4), 9.37], [Date.UTC(2013, 8, 11), 8.66], [Date.UTC(2013, 9, 10), 8.66], [Date.UTC(2013, 10, 9), 8.37], [Date.UTC(2013, 11, 6), 8.27], [Date.UTC(2014, 0, 1), 7.56], [Date.UTC(2014, 1, 8), 6.89], [Date.UTC(2014, 2, 3), 6.31], [Date.UTC(2014, 3, 10), 6.14], [Date.UTC(2014, 4, 7), 5.99], [Date.UTC(2014, 5, 8), 6.43], [Date.UTC(2014, 6, 6), 5.52], [Date.UTC(2014, 7, 11), 4.70], [Date.UTC(2014, 8, 1), 4.67], [Date.UTC(2014, 9, 3), 4.87], [Date.UTC(2014, 10, 8), 6.10], [Date.UTC(2014, 11, 7), 6.10], [Date.UTC(2015, 0, 6), 6.70], [Date.UTC(2015, 1, 5), 6.61], [Date.UTC(2015, 2, 7), 6.64], [Date.UTC(2015, 3, 13), 6.96], [Date.UTC(2015, 4, 13), 7.87], [Date.UTC(2015, 5, 6), 7.76], [Date.UTC(2015, 6, 12), 8.64], [Date.UTC(2015, 7, 6), 7.74], [Date.UTC(2015, 8, 5), 6.78], [Date.UTC(2015, 9, 4), 5.75], [Date.UTC(2015, 10, 7), 6.20], [Date.UTC(2015, 11, 4), 5.94], [Date.UTC(2016, 0, 2), 6.91], [Date.UTC(2016, 1, 2), 6.91], [Date.UTC(2016, 2, 3), 6.72], [Date.UTC(2016, 3, 7), 5.92], [Date.UTC(2016, 4, 6), 6.70], [Date.UTC(2016, 5, 5), 6.20], [Date.UTC(2016, 6, 4), 6.31], [Date.UTC(2016, 7, 6), 5.80], [Date.UTC(2016, 8, 8), 6.66], [Date.UTC(2016, 9, 7), 5.80], [Date.UTC(2016, 10, 5), 5.41], [Date.UTC(2016, 11, 4), 5.34], [Date.UTC(2017, 0, 7), 6.30], [Date.UTC(2017, 1, 8), 5.43], [Date.UTC(2017, 2, 7), 5.18], [Date.UTC(2017, 3, 9), 4.55], [Date.UTC(2017, 4, 6), 4.75], [Date.UTC(2017, 5, 3), 5.72], [Date.UTC(2017, 6, 7), 5.58], [Date.UTC(2017, 7, 2), 5.55], [Date.UTC(2017, 8, 6), 5.56], [Date.UTC(2017, 9, 5), 5.01], [Date.UTC(2017, 10, 12), 5.34], [Date.UTC(2017, 11, 9), 4.72], [Date.UTC(2018, 0, 3), 5.60], [Date.UTC(2018, 1, 8), 5.73], [Date.UTC(2018, 2, 7), 6.45], [Date.UTC(2018, 3, 1), 7.22], [Date.UTC(2018, 4, 6), 7.67], [Date.UTC(2018, 5, 10), 8.34], [Date.UTC(2018, 6, 7), 7.62], [Date.UTC(2018, 7, 1), 7.47], [Date.UTC(2018, 8, 3), 7.39], [Date.UTC(2018, 9, 5), 7.59], [Date.UTC(2018, 10, 8), 8.28], [Date.UTC(2018, 11, 2), 7.56], [Date.UTC(2019, 0, 4), 8.16], [Date.UTC(2019, 1, 6), 7.44], [Date.UTC(2019, 2, 2), 8.13], [Date.UTC(2019, 3, 7), 8.84], [Date.UTC(2019, 4, 4), 8.10], [Date.UTC(2019, 5, 9), 7.38], [Date.UTC(2019, 6, 6), 6.70], [Date.UTC(2019, 7, 5), 6.06], [Date.UTC(2019, 8, 9), 5.64], [Date.UTC(2019, 9, 5), 6.23], [Date.UTC(2019, 10, 3), 5.60], [Date.UTC(2019, 11, 6), 6.20], [Date.UTC(2020, 0, 5), 5.57], [Date.UTC(2020, 1, 4), 6.16], [Date.UTC(2020, 2, 4), 6.79], [Date.UTC(2020, 3, 2), 6.78], [Date.UTC(2020, 4, 2), 6.13], [Date.UTC(2020, 5, 1), 5.95], [Date.UTC(2020, 6, 4), 6.21], [Date.UTC(2020, 7, 2), 6.84], [Date.UTC(2020, 8, 6), 7.11], [Date.UTC(2020, 9, 4), 6.94], [Date.UTC(2020, 10, 3), 7.60], [Date.UTC(2020, 11, 3), 6.91], [Date.UTC(2021, 0, 2), 7.56], [Date.UTC(2021, 1, 6), 6.88], [Date.UTC(2021, 2, 4), 6.52], [Date.UTC(2021, 3, 4), 7.14], [Date.UTC(2021, 4, 2), 7.81], [Date.UTC(2021, 5, 5), 7.36], [Date.UTC(2021, 6, 4), 8.02], [Date.UTC(2021, 7, 3), 7.36], [Date.UTC(2021, 8, 11), 7.13], [Date.UTC(2021, 9, 6), 7.50], [Date.UTC(2021, 10, 6), 8.28], [Date.UTC(2021, 11, 5), 7.73], [Date.UTC(2022, 0, 1), 8.29], [Date.UTC(2022, 1, 2), 8.01], [Date.UTC(2022, 2, 2), 8.66], [Date.UTC(2022, 3, 5), 8.28], [Date.UTC(2022, 4, 3), 8.83], [Date.UTC(2022, 5, 4), 9.63], [Date.UTC(2022, 6, 2), 10.00], [Date.UTC(2022, 7, 2), 10.14], [Date.UTC(2022, 8, 1), 9.76], [Date.UTC(2022, 9, 1), 9.92], [Date.UTC(2022, 10, 1), 10.75], [Date.UTC(2022, 11, 2), 11.94], [Date.UTC(2022, 11, 29), 12.91], [Date.UTC(2023, 1, 1), 13.94], [Date.UTC(2023, 2, 2), 13.29], [Date.UTC(2023, 3, 1), 12.96], [Date.UTC(2023, 4, 2), 11.96], [Date.UTC(2023, 5, 2), 11.36], [Date.UTC(2023, 6, 2), 10.80], [Date.UTC(2023, 7, 4), 10.63], [Date.UTC(2023, 8, 2), 10.65], [Date.UTC(2023, 9, 4), 10.67], [Date.UTC(2023, 10, 2), 10.36], [Date.UTC(2023, 11, 4), 10.01], [Date.UTC(2024, 0, 2), 9.96], [Date.UTC(2024, 1, 2), 10.53], [Date.UTC(2024, 2, 1), 10.70], [Date.UTC(2024, 3, 3), 9.76], [Date.UTC(2024, 4, 1), 9.53]]}, {name : 'Java',data : [[Date.UTC(2001, 5, 30), 26.49], [Date.UTC(2001, 6, 30), 25.03], [Date.UTC(2001, 7, 30), 24.66], [Date.UTC(2001, 8, 28), 24.82], [Date.UTC(2001, 9, 26), 25.68], [Date.UTC(2001, 10, 28), 24.37], [Date.UTC(2001, 11, 31), 24.20], [Date.UTC(2002, 0, 30), 24.06], [Date.UTC(2002, 1, 27), 24.01], [Date.UTC(2002, 2, 29), 24.41], [Date.UTC(2002, 3, 29), 25.05], [Date.UTC(2002, 4, 29), 25.19], [Date.UTC(2002, 5, 29), 24.20], [Date.UTC(2002, 6, 31), 24.53], [Date.UTC(2002, 7, 29), 22.89], [Date.UTC(2002, 8, 29), 24.48], [Date.UTC(2002, 9, 30), 24.20], [Date.UTC(2002, 10, 29), 24.12], [Date.UTC(2002, 11, 31), 24.23], [Date.UTC(2003, 0, 31), 24.79], [Date.UTC(2003, 1, 28), 24.78], [Date.UTC(2003, 2, 31), 24.60], [Date.UTC(2003, 3, 30), 24.66], [Date.UTC(2003, 4, 30), 23.11], [Date.UTC(2003, 5, 30), 22.34], [Date.UTC(2003, 6, 31), 23.21], [Date.UTC(2003, 7, 31), 22.24], [Date.UTC(2003, 8, 30), 21.90], [Date.UTC(2003, 9, 31), 23.08], [Date.UTC(2003, 10, 30), 25.01], [Date.UTC(2003, 11, 31), 23.57], [Date.UTC(2004, 0, 31), 22.56], [Date.UTC(2004, 1, 29), 23.17], [Date.UTC(2004, 2, 31), 24.24], [Date.UTC(2004, 3, 30), 18.69], [Date.UTC(2004, 4, 30), 17.54], [Date.UTC(2004, 5, 30), 17.05], [Date.UTC(2004, 6, 31), 17.00], [Date.UTC(2004, 7, 30), 15.90], [Date.UTC(2004, 8, 30), 17.05], [Date.UTC(2004, 9, 31), 14.80], [Date.UTC(2004, 10, 30), 16.33], [Date.UTC(2004, 11, 31), 17.48], [Date.UTC(2005, 0, 31), 18.34], [Date.UTC(2005, 1, 28), 18.87], [Date.UTC(2005, 2, 31), 16.98], [Date.UTC(2005, 3, 30), 17.40], [Date.UTC(2005, 4, 31), 18.57], [Date.UTC(2005, 5, 30), 19.66], [Date.UTC(2005, 6, 31), 21.21], [Date.UTC(2005, 7, 31), 22.44], [Date.UTC(2005, 8, 30), 21.87], [Date.UTC(2005, 11, 3), 22.13], [Date.UTC(2006, 0, 4), 22.25], [Date.UTC(2006, 1, 2), 22.43], [Date.UTC(2006, 2, 1), 21.89], [Date.UTC(2006, 3, 2), 21.28], [Date.UTC(2006, 4, 1), 21.32], [Date.UTC(2006, 5, 1), 21.13], [Date.UTC(2006, 6, 2), 21.85], [Date.UTC(2006, 7, 2), 22.38], [Date.UTC(2006, 8, 2), 21.53], [Date.UTC(2006, 9, 1), 21.17], [Date.UTC(2006, 10, 2), 20.40], [Date.UTC(2006, 11, 1), 19.91], [Date.UTC(2007, 0, 2), 19.16], [Date.UTC(2007, 1, 3), 18.98], [Date.UTC(2007, 2, 3), 18.04], [Date.UTC(2007, 3, 1), 18.36], [Date.UTC(2007, 4, 5), 19.14], [Date.UTC(2007, 5, 2), 20.03], [Date.UTC(2007, 6, 2), 21.01], [Date.UTC(2007, 7, 5), 21.77], [Date.UTC(2007, 8, 2), 21.70], [Date.UTC(2007, 9, 4), 21.62], [Date.UTC(2007, 10, 4), 20.54], [Date.UTC(2007, 11, 3), 20.05], [Date.UTC(2008, 0, 3), 20.85], [Date.UTC(2008, 1, 7), 21.48], [Date.UTC(2008, 5, 1), 20.89], [Date.UTC(2008, 6, 2), 21.34], [Date.UTC(2008, 7, 3), 21.57], [Date.UTC(2008, 8, 3), 20.71], [Date.UTC(2008, 9, 6), 20.95], [Date.UTC(2008, 10, 2), 20.30], [Date.UTC(2008, 11, 3), 17.92], [Date.UTC(2009, 0, 2), 19.02], [Date.UTC(2009, 1, 1), 19.40], [Date.UTC(2009, 2, 5), 19.80], [Date.UTC(2009, 3, 7), 19.34], [Date.UTC(2009, 4, 1), 19.54], [Date.UTC(2009, 5, 4), 20.15], [Date.UTC(2009, 6, 2), 20.45], [Date.UTC(2009, 7, 1), 19.53], [Date.UTC(2009, 8, 5), 19.38], [Date.UTC(2009, 9, 2), 18.65], [Date.UTC(2009, 10, 2), 18.37], [Date.UTC(2009, 11, 2), 17.06], [Date.UTC(2010, 0, 5), 17.48], [Date.UTC(2010, 1, 7), 17.35], [Date.UTC(2010, 2, 7), 17.51], [Date.UTC(2010, 3, 5), 18.05], [Date.UTC(2010, 4, 15), 17.96], [Date.UTC(2010, 6, 6), 18.67], [Date.UTC(2010, 6, 30), 17.99], [Date.UTC(2010, 8, 11), 17.92], [Date.UTC(2010, 9, 2), 18.17], [Date.UTC(2010, 10, 3), 18.51], [Date.UTC(2010, 11, 7), 18.00], [Date.UTC(2011, 0, 2), 17.77], [Date.UTC(2011, 1, 8), 18.48], [Date.UTC(2011, 2, 8), 19.71], [Date.UTC(2011, 3, 3), 19.04], [Date.UTC(2011, 4, 2), 18.16], [Date.UTC(2011, 5, 5), 18.58], [Date.UTC(2011, 5, 27), 18.58], [Date.UTC(2011, 6, 8), 19.25], [Date.UTC(2011, 7, 3), 19.41], [Date.UTC(2011, 8, 10), 18.76], [Date.UTC(2011, 9, 9), 17.91], [Date.UTC(2011, 10, 7), 17.87], [Date.UTC(2011, 11, 4), 17.56], [Date.UTC(2012, 0, 8), 17.47], [Date.UTC(2012, 1, 5), 17.05], [Date.UTC(2012, 2, 11), 17.11], [Date.UTC(2012, 3, 8), 17.03], [Date.UTC(2012, 4, 9), 16.60], [Date.UTC(2012, 5, 10), 16.26], [Date.UTC(2012, 6, 4), 16.09], [Date.UTC(2012, 7, 10), 16.35], [Date.UTC(2012, 8, 2), 16.27], [Date.UTC(2012, 9, 5), 17.19], [Date.UTC(2012, 10, 4), 17.46], [Date.UTC(2012, 11, 2), 17.57], [Date.UTC(2013, 0, 5), 17.42], [Date.UTC(2013, 1, 8), 18.39], [Date.UTC(2013, 2, 11), 18.16], [Date.UTC(2013, 3, 7), 17.68], [Date.UTC(2013, 4, 8), 16.91], [Date.UTC(2013, 5, 9), 16.66], [Date.UTC(2013, 6, 7), 15.91], [Date.UTC(2013, 6, 12), 15.91], [Date.UTC(2013, 7, 4), 15.98], [Date.UTC(2013, 8, 11), 16.15], [Date.UTC(2013, 9, 10), 16.11], [Date.UTC(2013, 10, 9), 16.52], [Date.UTC(2013, 11, 6), 17.31], [Date.UTC(2014, 0, 1), 16.52], [Date.UTC(2014, 1, 8), 17.32], [Date.UTC(2014, 2, 3), 16.41], [Date.UTC(2014, 3, 10), 17.35], [Date.UTC(2014, 4, 7), 16.91], [Date.UTC(2014, 5, 8), 16.11], [Date.UTC(2014, 6, 6), 15.69], [Date.UTC(2014, 7, 11), 14.98], [Date.UTC(2014, 8, 1), 14.14], [Date.UTC(2014, 9, 3), 13.51], [Date.UTC(2014, 10, 8), 14.39], [Date.UTC(2014, 11, 7), 14.96], [Date.UTC(2015, 0, 6), 15.53], [Date.UTC(2015, 1, 5), 15.34], [Date.UTC(2015, 2, 7), 15.58], [Date.UTC(2015, 3, 13), 16.04], [Date.UTC(2015, 4, 13), 16.87], [Date.UTC(2015, 5, 6), 17.82], [Date.UTC(2015, 6, 12), 17.73], [Date.UTC(2015, 7, 6), 19.27], [Date.UTC(2015, 8, 5), 19.56], [Date.UTC(2015, 9, 4), 19.54], [Date.UTC(2015, 10, 7), 20.40], [Date.UTC(2015, 11, 4), 20.97], [Date.UTC(2016, 0, 2), 21.47], [Date.UTC(2016, 1, 2), 21.14], [Date.UTC(2016, 2, 3), 20.53], [Date.UTC(2016, 3, 7), 20.85], [Date.UTC(2016, 4, 6), 20.96], [Date.UTC(2016, 5, 5), 20.79], [Date.UTC(2016, 6, 4), 19.80], [Date.UTC(2016, 7, 6), 19.01], [Date.UTC(2016, 8, 8), 18.24], [Date.UTC(2016, 9, 7), 18.80], [Date.UTC(2016, 10, 5), 18.75], [Date.UTC(2016, 11, 4), 17.86], [Date.UTC(2017, 0, 7), 17.28], [Date.UTC(2017, 1, 8), 16.68], [Date.UTC(2017, 2, 7), 16.38], [Date.UTC(2017, 3, 9), 15.57], [Date.UTC(2017, 4, 6), 14.64], [Date.UTC(2017, 5, 3), 14.49], [Date.UTC(2017, 6, 7), 13.77], [Date.UTC(2017, 7, 2), 12.96], [Date.UTC(2017, 8, 6), 12.69], [Date.UTC(2017, 9, 5), 12.43], [Date.UTC(2017, 10, 12), 13.23], [Date.UTC(2017, 11, 9), 13.27], [Date.UTC(2018, 0, 3), 14.22], [Date.UTC(2018, 1, 8), 14.99], [Date.UTC(2018, 2, 7), 14.94], [Date.UTC(2018, 3, 1), 15.78], [Date.UTC(2018, 4, 6), 16.38], [Date.UTC(2018, 5, 10), 15.37], [Date.UTC(2018, 6, 7), 16.14], [Date.UTC(2018, 7, 1), 16.88], [Date.UTC(2018, 8, 3), 17.44], [Date.UTC(2018, 9, 5), 17.80], [Date.UTC(2018, 10, 8), 16.75], [Date.UTC(2018, 11, 2), 15.93], [Date.UTC(2019, 0, 4), 16.90], [Date.UTC(2019, 1, 6), 15.88], [Date.UTC(2019, 2, 2), 14.88], [Date.UTC(2019, 3, 7), 15.04], [Date.UTC(2019, 4, 4), 16.00], [Date.UTC(2019, 5, 9), 15.00], [Date.UTC(2019, 6, 6), 15.06], [Date.UTC(2019, 7, 5), 16.03], [Date.UTC(2019, 8, 9), 16.66], [Date.UTC(2019, 9, 5), 16.88], [Date.UTC(2019, 10, 3), 16.25], [Date.UTC(2019, 11, 6), 17.25], [Date.UTC(2020, 0, 5), 16.90], [Date.UTC(2020, 1, 4), 17.36], [Date.UTC(2020, 2, 4), 17.78], [Date.UTC(2020, 3, 2), 16.73], [Date.UTC(2020, 4, 2), 16.28], [Date.UTC(2020, 5, 1), 16.10], [Date.UTC(2020, 6, 4), 15.10], [Date.UTC(2020, 7, 2), 14.43], [Date.UTC(2020, 8, 6), 13.48], [Date.UTC(2020, 9, 4), 12.56], [Date.UTC(2020, 10, 3), 11.68], [Date.UTC(2020, 11, 3), 12.53], [Date.UTC(2021, 0, 2), 11.96], [Date.UTC(2021, 1, 6), 11.29], [Date.UTC(2021, 2, 4), 10.45], [Date.UTC(2021, 3, 4), 11.23], [Date.UTC(2021, 4, 2), 11.74], [Date.UTC(2021, 5, 5), 11.54], [Date.UTC(2021, 6, 4), 11.20], [Date.UTC(2021, 7, 3), 10.43], [Date.UTC(2021, 8, 11), 11.12], [Date.UTC(2021, 9, 6), 10.46], [Date.UTC(2021, 10, 6), 10.72], [Date.UTC(2021, 11, 5), 10.12], [Date.UTC(2022, 0, 1), 10.66], [Date.UTC(2022, 1, 2), 12.13], [Date.UTC(2022, 2, 2), 11.19], [Date.UTC(2022, 3, 5), 10.82], [Date.UTC(2022, 4, 3), 10.99], [Date.UTC(2022, 5, 4), 10.47], [Date.UTC(2022, 6, 2), 11.59], [Date.UTC(2022, 7, 2), 12.46], [Date.UTC(2022, 8, 1), 11.72], [Date.UTC(2022, 9, 1), 12.84], [Date.UTC(2022, 10, 1), 11.98], [Date.UTC(2022, 11, 2), 11.82], [Date.UTC(2022, 11, 29), 12.21], [Date.UTC(2023, 1, 1), 13.21], [Date.UTC(2023, 2, 2), 13.56], [Date.UTC(2023, 3, 1), 13.23], [Date.UTC(2023, 4, 2), 12.22], [Date.UTC(2023, 5, 2), 11.28], [Date.UTC(2023, 6, 2), 10.50], [Date.UTC(2023, 7, 4), 10.33], [Date.UTC(2023, 8, 2), 9.49], [Date.UTC(2023, 9, 4), 8.92], [Date.UTC(2023, 10, 2), 8.35], [Date.UTC(2023, 11, 4), 7.99], [Date.UTC(2024, 0, 2), 7.87], [Date.UTC(2024, 1, 2), 8.88], [Date.UTC(2024, 2, 1), 8.95], [Date.UTC(2024, 3, 3), 8.94], [Date.UTC(2024, 4, 1), 8.69]]}, {name : 'C#',data : [[Date.UTC(2001, 5, 30), 0.38], [Date.UTC(2001, 6, 30), 0.43], [Date.UTC(2001, 7, 30), 0.38], [Date.UTC(2001, 8, 28), 0.39], [Date.UTC(2001, 9, 26), 0.42], [Date.UTC(2001, 10, 28), 0.76], [Date.UTC(2001, 11, 31), 0.59], [Date.UTC(2002, 0, 30), 0.62], [Date.UTC(2002, 1, 27), 0.74], [Date.UTC(2002, 2, 29), 0.74], [Date.UTC(2002, 3, 29), 1.18], [Date.UTC(2002, 4, 29), 1.16], [Date.UTC(2002, 5, 29), 1.46], [Date.UTC(2002, 6, 31), 1.36], [Date.UTC(2002, 7, 29), 1.46], [Date.UTC(2002, 8, 29), 1.65], [Date.UTC(2002, 9, 30), 1.78], [Date.UTC(2002, 10, 29), 2.38], [Date.UTC(2002, 11, 31), 2.45], [Date.UTC(2003, 0, 31), 1.99], [Date.UTC(2003, 1, 28), 1.98], [Date.UTC(2003, 2, 31), 2.38], [Date.UTC(2003, 3, 30), 1.88], [Date.UTC(2003, 4, 30), 1.94], [Date.UTC(2003, 5, 30), 1.78], [Date.UTC(2003, 6, 31), 2.00], [Date.UTC(2003, 7, 31), 2.06], [Date.UTC(2003, 8, 30), 1.94], [Date.UTC(2003, 9, 31), 1.90], [Date.UTC(2003, 10, 30), 1.71], [Date.UTC(2003, 11, 31), 1.80], [Date.UTC(2004, 0, 31), 2.18], [Date.UTC(2004, 1, 29), 2.24], [Date.UTC(2004, 2, 31), 2.14], [Date.UTC(2004, 3, 30), 1.88], [Date.UTC(2004, 4, 30), 1.65], [Date.UTC(2004, 5, 30), 1.67], [Date.UTC(2004, 6, 31), 1.63], [Date.UTC(2004, 7, 30), 1.63], [Date.UTC(2004, 8, 30), 1.64], [Date.UTC(2004, 9, 31), 1.50], [Date.UTC(2004, 10, 30), 1.95], [Date.UTC(2004, 11, 31), 2.20], [Date.UTC(2005, 0, 31), 2.36], [Date.UTC(2005, 1, 28), 2.53], [Date.UTC(2005, 2, 31), 2.82], [Date.UTC(2005, 3, 30), 2.77], [Date.UTC(2005, 4, 31), 2.78], [Date.UTC(2005, 5, 30), 3.14], [Date.UTC(2005, 6, 31), 3.48], [Date.UTC(2005, 7, 31), 3.29], [Date.UTC(2005, 8, 30), 3.46], [Date.UTC(2005, 11, 3), 3.31], [Date.UTC(2006, 0, 4), 3.55], [Date.UTC(2006, 1, 2), 3.97], [Date.UTC(2006, 2, 1), 3.15], [Date.UTC(2006, 3, 2), 3.95], [Date.UTC(2006, 4, 1), 3.27], [Date.UTC(2006, 5, 1), 3.24], [Date.UTC(2006, 6, 2), 3.40], [Date.UTC(2006, 7, 2), 2.68], [Date.UTC(2006, 8, 2), 2.99], [Date.UTC(2006, 9, 1), 3.06], [Date.UTC(2006, 10, 2), 3.02], [Date.UTC(2006, 11, 1), 3.17], [Date.UTC(2007, 0, 2), 3.52], [Date.UTC(2007, 1, 3), 3.19], [Date.UTC(2007, 2, 3), 3.37], [Date.UTC(2007, 3, 1), 3.55], [Date.UTC(2007, 4, 5), 3.66], [Date.UTC(2007, 5, 2), 3.48], [Date.UTC(2007, 6, 2), 3.71], [Date.UTC(2007, 7, 5), 3.99], [Date.UTC(2007, 8, 2), 3.58], [Date.UTC(2007, 9, 4), 3.74], [Date.UTC(2007, 10, 4), 3.92], [Date.UTC(2007, 11, 3), 3.99], [Date.UTC(2008, 0, 3), 4.86], [Date.UTC(2008, 1, 7), 4.51], [Date.UTC(2008, 5, 1), 4.06], [Date.UTC(2008, 6, 2), 4.00], [Date.UTC(2008, 7, 3), 3.70], [Date.UTC(2008, 8, 3), 4.33], [Date.UTC(2008, 9, 6), 3.77], [Date.UTC(2008, 10, 2), 4.03], [Date.UTC(2008, 11, 3), 4.58], [Date.UTC(2009, 0, 2), 5.61], [Date.UTC(2009, 1, 1), 5.06], [Date.UTC(2009, 2, 5), 4.32], [Date.UTC(2009, 3, 7), 4.06], [Date.UTC(2009, 4, 1), 4.27], [Date.UTC(2009, 5, 4), 4.54], [Date.UTC(2009, 6, 2), 4.54], [Date.UTC(2009, 7, 1), 4.44], [Date.UTC(2009, 8, 5), 4.19], [Date.UTC(2009, 9, 2), 4.42], [Date.UTC(2009, 10, 2), 5.35], [Date.UTC(2009, 11, 2), 6.26], [Date.UTC(2010, 0, 5), 5.77], [Date.UTC(2010, 1, 7), 5.01], [Date.UTC(2010, 2, 7), 4.26], [Date.UTC(2010, 3, 5), 4.43], [Date.UTC(2010, 4, 15), 4.78], [Date.UTC(2010, 6, 6), 5.73], [Date.UTC(2010, 6, 30), 4.99], [Date.UTC(2010, 8, 11), 5.02], [Date.UTC(2010, 9, 2), 4.96], [Date.UTC(2010, 10, 3), 5.71], [Date.UTC(2010, 11, 7), 6.69], [Date.UTC(2011, 0, 2), 6.23], [Date.UTC(2011, 1, 8), 6.81], [Date.UTC(2011, 2, 8), 7.21], [Date.UTC(2011, 3, 3), 7.19], [Date.UTC(2011, 4, 2), 7.54], [Date.UTC(2011, 5, 5), 6.84], [Date.UTC(2011, 5, 27), 6.84], [Date.UTC(2011, 6, 8), 6.22], [Date.UTC(2011, 7, 3), 6.04], [Date.UTC(2011, 8, 10), 6.82], [Date.UTC(2011, 9, 9), 6.72], [Date.UTC(2011, 10, 7), 7.32], [Date.UTC(2011, 11, 4), 8.21], [Date.UTC(2012, 0, 8), 8.76], [Date.UTC(2012, 1, 5), 8.65], [Date.UTC(2012, 2, 11), 8.24], [Date.UTC(2012, 3, 8), 7.35], [Date.UTC(2012, 4, 9), 6.82], [Date.UTC(2012, 5, 10), 7.03], [Date.UTC(2012, 6, 4), 6.67], [Date.UTC(2012, 7, 10), 6.59], [Date.UTC(2012, 8, 2), 6.60], [Date.UTC(2012, 9, 5), 6.53], [Date.UTC(2012, 10, 4), 5.59], [Date.UTC(2012, 11, 2), 5.55], [Date.UTC(2013, 0, 5), 6.20], [Date.UTC(2013, 1, 8), 6.68], [Date.UTC(2013, 2, 11), 6.60], [Date.UTC(2013, 3, 7), 6.15], [Date.UTC(2013, 4, 8), 6.12], [Date.UTC(2013, 5, 9), 5.78], [Date.UTC(2013, 6, 7), 6.21], [Date.UTC(2013, 6, 12), 6.21], [Date.UTC(2013, 7, 4), 6.12], [Date.UTC(2013, 8, 11), 5.56], [Date.UTC(2013, 9, 10), 5.72], [Date.UTC(2013, 10, 9), 6.02], [Date.UTC(2013, 11, 6), 5.62], [Date.UTC(2014, 0, 1), 5.85], [Date.UTC(2014, 1, 8), 6.45], [Date.UTC(2014, 2, 3), 5.57], [Date.UTC(2014, 3, 10), 4.82], [Date.UTC(2014, 4, 7), 3.75], [Date.UTC(2014, 5, 8), 3.94], [Date.UTC(2014, 6, 6), 4.05], [Date.UTC(2014, 7, 11), 3.41], [Date.UTC(2014, 8, 1), 4.35], [Date.UTC(2014, 9, 3), 4.75], [Date.UTC(2014, 10, 8), 4.98], [Date.UTC(2014, 11, 7), 4.33], [Date.UTC(2015, 0, 6), 5.05], [Date.UTC(2015, 1, 5), 5.74], [Date.UTC(2015, 2, 7), 4.92], [Date.UTC(2015, 3, 13), 4.95], [Date.UTC(2015, 4, 13), 5.26], [Date.UTC(2015, 5, 6), 5.06], [Date.UTC(2015, 6, 12), 5.65], [Date.UTC(2015, 7, 6), 4.84], [Date.UTC(2015, 8, 5), 4.91], [Date.UTC(2015, 9, 4), 4.82], [Date.UTC(2015, 10, 7), 4.32], [Date.UTC(2015, 11, 4), 4.11], [Date.UTC(2016, 0, 2), 4.71], [Date.UTC(2016, 1, 2), 4.40], [Date.UTC(2016, 2, 3), 4.27], [Date.UTC(2016, 3, 7), 3.80], [Date.UTC(2016, 4, 6), 4.48], [Date.UTC(2016, 5, 5), 3.79], [Date.UTC(2016, 6, 4), 3.92], [Date.UTC(2016, 7, 6), 4.91], [Date.UTC(2016, 8, 8), 5.49], [Date.UTC(2016, 9, 7), 4.37], [Date.UTC(2016, 10, 5), 3.66], [Date.UTC(2016, 11, 4), 3.17], [Date.UTC(2017, 0, 7), 4.04], [Date.UTC(2017, 1, 8), 4.90], [Date.UTC(2017, 2, 7), 4.41], [Date.UTC(2017, 3, 9), 3.58], [Date.UTC(2017, 4, 6), 3.46], [Date.UTC(2017, 5, 3), 3.53], [Date.UTC(2017, 6, 7), 3.52], [Date.UTC(2017, 7, 2), 4.20], [Date.UTC(2017, 8, 6), 4.78], [Date.UTC(2017, 9, 5), 3.86], [Date.UTC(2017, 10, 12), 3.01], [Date.UTC(2017, 11, 9), 2.82], [Date.UTC(2018, 0, 3), 3.75], [Date.UTC(2018, 1, 8), 4.45], [Date.UTC(2018, 2, 7), 5.07], [Date.UTC(2018, 3, 1), 5.27], [Date.UTC(2018, 4, 6), 4.40], [Date.UTC(2018, 5, 10), 4.31], [Date.UTC(2018, 6, 7), 3.79], [Date.UTC(2018, 7, 1), 3.54], [Date.UTC(2018, 8, 3), 3.30], [Date.UTC(2018, 9, 5), 3.49], [Date.UTC(2018, 10, 8), 3.95], [Date.UTC(2018, 11, 2), 3.45], [Date.UTC(2019, 0, 4), 3.28], [Date.UTC(2019, 1, 6), 2.85], [Date.UTC(2019, 2, 2), 3.27], [Date.UTC(2019, 3, 7), 3.52], [Date.UTC(2019, 4, 4), 3.98], [Date.UTC(2019, 5, 9), 4.48], [Date.UTC(2019, 6, 6), 4.36], [Date.UTC(2019, 7, 5), 3.84], [Date.UTC(2019, 8, 9), 3.40], [Date.UTC(2019, 9, 5), 3.86], [Date.UTC(2019, 10, 3), 4.32], [Date.UTC(2019, 11, 6), 4.80], [Date.UTC(2020, 0, 5), 5.35], [Date.UTC(2020, 1, 4), 5.93], [Date.UTC(2020, 2, 4), 5.32], [Date.UTC(2020, 3, 2), 4.74], [Date.UTC(2020, 4, 2), 4.29], [Date.UTC(2020, 5, 1), 4.73], [Date.UTC(2020, 6, 4), 5.25], [Date.UTC(2020, 7, 2), 4.68], [Date.UTC(2020, 8, 6), 4.58], [Date.UTC(2020, 9, 4), 4.16], [Date.UTC(2020, 10, 3), 4.67], [Date.UTC(2020, 11, 3), 4.20], [Date.UTC(2021, 0, 2), 3.95], [Date.UTC(2021, 1, 6), 4.44], [Date.UTC(2021, 2, 4), 4.97], [Date.UTC(2021, 3, 4), 4.91], [Date.UTC(2021, 4, 2), 4.41], [Date.UTC(2021, 5, 5), 4.33], [Date.UTC(2021, 6, 4), 4.84], [Date.UTC(2021, 7, 3), 5.14], [Date.UTC(2021, 8, 11), 5.78], [Date.UTC(2021, 9, 6), 5.26], [Date.UTC(2021, 10, 6), 6.06], [Date.UTC(2021, 11, 5), 6.40], [Date.UTC(2022, 0, 1), 5.68], [Date.UTC(2022, 1, 2), 5.37], [Date.UTC(2022, 2, 2), 5.92], [Date.UTC(2022, 3, 5), 6.82], [Date.UTC(2022, 4, 3), 6.39], [Date.UTC(2022, 5, 4), 6.12], [Date.UTC(2022, 6, 2), 5.65], [Date.UTC(2022, 7, 2), 5.41], [Date.UTC(2022, 8, 1), 4.88], [Date.UTC(2022, 9, 1), 4.42], [Date.UTC(2022, 10, 1), 4.25], [Date.UTC(2022, 11, 2), 4.92], [Date.UTC(2022, 11, 29), 5.73], [Date.UTC(2023, 1, 1), 6.38], [Date.UTC(2023, 2, 2), 7.17], [Date.UTC(2023, 3, 1), 8.21], [Date.UTC(2023, 4, 2), 7.43], [Date.UTC(2023, 5, 2), 6.71], [Date.UTC(2023, 6, 2), 6.87], [Date.UTC(2023, 7, 4), 7.04], [Date.UTC(2023, 8, 2), 7.31], [Date.UTC(2023, 9, 4), 7.71], [Date.UTC(2023, 10, 2), 7.65], [Date.UTC(2023, 11, 4), 7.30], [Date.UTC(2024, 0, 2), 7.16], [Date.UTC(2024, 1, 2), 7.53], [Date.UTC(2024, 2, 1), 7.54], [Date.UTC(2024, 3, 3), 6.77], [Date.UTC(2024, 4, 1), 6.49]]}, {name : 'JavaScript',data : [[Date.UTC(2001, 5, 30), 1.55], [Date.UTC(2001, 6, 30), 1.72], [Date.UTC(2001, 7, 30), 1.66], [Date.UTC(2001, 8, 28), 1.63], [Date.UTC(2001, 9, 26), 1.51], [Date.UTC(2001, 10, 28), 1.47], [Date.UTC(2001, 11, 31), 1.46], [Date.UTC(2002, 0, 30), 2.73], [Date.UTC(2002, 1, 27), 1.48], [Date.UTC(2002, 2, 29), 1.47], [Date.UTC(2002, 3, 29), 1.37], [Date.UTC(2002, 4, 29), 1.36], [Date.UTC(2002, 5, 29), 1.43], [Date.UTC(2002, 6, 31), 1.15], [Date.UTC(2002, 7, 29), 2.02], [Date.UTC(2002, 8, 29), 1.91], [Date.UTC(2002, 9, 30), 1.98], [Date.UTC(2002, 10, 29), 2.49], [Date.UTC(2002, 11, 31), 2.42], [Date.UTC(2003, 0, 31), 2.92], [Date.UTC(2003, 1, 28), 2.81], [Date.UTC(2003, 2, 31), 2.63], [Date.UTC(2003, 3, 30), 3.26], [Date.UTC(2003, 4, 30), 1.72], [Date.UTC(2003, 5, 30), 1.69], [Date.UTC(2003, 6, 31), 1.79], [Date.UTC(2003, 7, 31), 1.90], [Date.UTC(2003, 8, 30), 1.66], [Date.UTC(2003, 9, 31), 1.92], [Date.UTC(2003, 10, 30), 1.74], [Date.UTC(2003, 11, 31), 1.74], [Date.UTC(2004, 0, 31), 2.14], [Date.UTC(2004, 1, 29), 2.06], [Date.UTC(2004, 2, 31), 1.78], [Date.UTC(2004, 3, 30), 1.78], [Date.UTC(2004, 4, 30), 1.45], [Date.UTC(2004, 5, 30), 1.61], [Date.UTC(2004, 6, 31), 1.68], [Date.UTC(2004, 7, 30), 1.51], [Date.UTC(2004, 8, 30), 1.27], [Date.UTC(2004, 9, 31), 1.20], [Date.UTC(2004, 10, 30), 1.59], [Date.UTC(2004, 11, 31), 1.70], [Date.UTC(2005, 0, 31), 1.78], [Date.UTC(2005, 1, 28), 1.65], [Date.UTC(2005, 2, 31), 1.64], [Date.UTC(2005, 3, 30), 1.44], [Date.UTC(2005, 4, 31), 1.39], [Date.UTC(2005, 5, 30), 1.78], [Date.UTC(2005, 6, 31), 1.92], [Date.UTC(2005, 7, 31), 1.77], [Date.UTC(2005, 8, 30), 2.04], [Date.UTC(2005, 11, 3), 1.84], [Date.UTC(2006, 0, 4), 1.54], [Date.UTC(2006, 1, 2), 1.51], [Date.UTC(2006, 2, 1), 1.73], [Date.UTC(2006, 3, 2), 1.57], [Date.UTC(2006, 4, 1), 2.19], [Date.UTC(2006, 5, 1), 1.46], [Date.UTC(2006, 6, 2), 2.11], [Date.UTC(2006, 7, 2), 2.02], [Date.UTC(2006, 8, 2), 2.44], [Date.UTC(2006, 9, 1), 2.20], [Date.UTC(2006, 10, 2), 2.31], [Date.UTC(2006, 11, 1), 2.56], [Date.UTC(2007, 0, 2), 2.84], [Date.UTC(2007, 1, 3), 2.98], [Date.UTC(2007, 2, 3), 3.49], [Date.UTC(2007, 3, 1), 3.14], [Date.UTC(2007, 4, 5), 3.07], [Date.UTC(2007, 5, 2), 2.62], [Date.UTC(2007, 6, 2), 2.51], [Date.UTC(2007, 7, 5), 2.58], [Date.UTC(2007, 8, 2), 2.72], [Date.UTC(2007, 9, 4), 2.68], [Date.UTC(2007, 10, 4), 2.93], [Date.UTC(2007, 11, 3), 2.73], [Date.UTC(2008, 0, 3), 3.20], [Date.UTC(2008, 1, 7), 2.33], [Date.UTC(2008, 5, 1), 2.93], [Date.UTC(2008, 6, 2), 2.76], [Date.UTC(2008, 7, 3), 2.89], [Date.UTC(2008, 8, 3), 3.13], [Date.UTC(2008, 9, 6), 2.67], [Date.UTC(2008, 10, 2), 2.93], [Date.UTC(2008, 11, 3), 2.97], [Date.UTC(2009, 0, 2), 3.36], [Date.UTC(2009, 1, 1), 3.54], [Date.UTC(2009, 2, 5), 3.61], [Date.UTC(2009, 3, 7), 3.68], [Date.UTC(2009, 4, 1), 3.55], [Date.UTC(2009, 5, 4), 4.02], [Date.UTC(2009, 6, 2), 3.51], [Date.UTC(2009, 7, 1), 2.81], [Date.UTC(2009, 8, 5), 3.00], [Date.UTC(2009, 9, 2), 3.03], [Date.UTC(2009, 10, 2), 2.92], [Date.UTC(2009, 11, 2), 3.51], [Date.UTC(2010, 0, 5), 2.71], [Date.UTC(2010, 1, 7), 2.64], [Date.UTC(2010, 2, 7), 2.65], [Date.UTC(2010, 3, 5), 2.47], [Date.UTC(2010, 4, 15), 2.08], [Date.UTC(2010, 6, 6), 2.43], [Date.UTC(2010, 6, 30), 2.40], [Date.UTC(2010, 8, 11), 1.66], [Date.UTC(2010, 9, 2), 1.66], [Date.UTC(2010, 10, 3), 1.66], [Date.UTC(2010, 11, 7), 1.51], [Date.UTC(2011, 0, 2), 1.59], [Date.UTC(2011, 1, 8), 2.56], [Date.UTC(2011, 2, 8), 1.87], [Date.UTC(2011, 3, 3), 1.51], [Date.UTC(2011, 4, 2), 1.39], [Date.UTC(2011, 5, 5), 1.50], [Date.UTC(2011, 5, 27), 1.50], [Date.UTC(2011, 6, 8), 2.24], [Date.UTC(2011, 7, 3), 1.56], [Date.UTC(2011, 8, 10), 1.47], [Date.UTC(2011, 9, 9), 2.19], [Date.UTC(2011, 10, 7), 2.56], [Date.UTC(2011, 11, 4), 2.20], [Date.UTC(2012, 0, 8), 2.32], [Date.UTC(2012, 1, 5), 2.46], [Date.UTC(2012, 2, 11), 3.39], [Date.UTC(2012, 3, 8), 2.88], [Date.UTC(2012, 4, 9), 2.13], [Date.UTC(2012, 5, 10), 1.47], [Date.UTC(2012, 6, 4), 1.45], [Date.UTC(2012, 7, 10), 1.37], [Date.UTC(2012, 8, 2), 1.33], [Date.UTC(2012, 9, 5), 1.26], [Date.UTC(2012, 10, 4), 1.28], [Date.UTC(2012, 11, 2), 1.32], [Date.UTC(2013, 0, 5), 1.98], [Date.UTC(2013, 1, 8), 1.42], [Date.UTC(2013, 2, 11), 1.37], [Date.UTC(2013, 3, 7), 1.51], [Date.UTC(2013, 4, 8), 1.54], [Date.UTC(2013, 5, 9), 1.65], [Date.UTC(2013, 6, 7), 1.84], [Date.UTC(2013, 6, 12), 1.84], [Date.UTC(2013, 7, 4), 2.09], [Date.UTC(2013, 8, 11), 2.01], [Date.UTC(2013, 9, 10), 2.04], [Date.UTC(2013, 10, 9), 2.05], [Date.UTC(2013, 11, 6), 1.85], [Date.UTC(2014, 0, 1), 1.58], [Date.UTC(2014, 1, 8), 1.93], [Date.UTC(2014, 2, 3), 1.90], [Date.UTC(2014, 3, 10), 1.75], [Date.UTC(2014, 4, 7), 1.79], [Date.UTC(2014, 5, 8), 2.00], [Date.UTC(2014, 6, 6), 1.81], [Date.UTC(2014, 7, 11), 2.17], [Date.UTC(2014, 8, 1), 2.45], [Date.UTC(2014, 9, 3), 1.77], [Date.UTC(2014, 10, 8), 2.09], [Date.UTC(2014, 11, 7), 2.43], [Date.UTC(2015, 0, 6), 3.27], [Date.UTC(2015, 1, 5), 3.51], [Date.UTC(2015, 2, 7), 3.63], [Date.UTC(2015, 3, 13), 3.30], [Date.UTC(2015, 4, 13), 3.13], [Date.UTC(2015, 5, 6), 2.30], [Date.UTC(2015, 6, 12), 2.19], [Date.UTC(2015, 7, 6), 2.16], [Date.UTC(2015, 8, 5), 2.34], [Date.UTC(2015, 9, 4), 2.29], [Date.UTC(2015, 10, 7), 2.47], [Date.UTC(2015, 11, 4), 2.36], [Date.UTC(2016, 0, 2), 2.57], [Date.UTC(2016, 1, 2), 2.20], [Date.UTC(2016, 2, 3), 2.33], [Date.UTC(2016, 3, 7), 2.57], [Date.UTC(2016, 4, 6), 2.34], [Date.UTC(2016, 5, 5), 2.58], [Date.UTC(2016, 6, 4), 2.64], [Date.UTC(2016, 7, 6), 2.71], [Date.UTC(2016, 8, 8), 2.93], [Date.UTC(2016, 9, 7), 2.75], [Date.UTC(2016, 10, 5), 2.71], [Date.UTC(2016, 11, 4), 2.86], [Date.UTC(2017, 0, 7), 2.85], [Date.UTC(2017, 1, 8), 2.87], [Date.UTC(2017, 2, 7), 2.67], [Date.UTC(2017, 3, 9), 2.85], [Date.UTC(2017, 4, 6), 3.07], [Date.UTC(2017, 5, 3), 3.02], [Date.UTC(2017, 6, 7), 2.61], [Date.UTC(2017, 7, 2), 2.10], [Date.UTC(2017, 8, 6), 2.02], [Date.UTC(2017, 9, 5), 3.01], [Date.UTC(2017, 10, 12), 2.97], [Date.UTC(2017, 11, 9), 2.47], [Date.UTC(2018, 0, 3), 3.47], [Date.UTC(2018, 1, 8), 3.16], [Date.UTC(2018, 2, 7), 3.92], [Date.UTC(2018, 3, 1), 3.49], [Date.UTC(2018, 4, 6), 2.92], [Date.UTC(2018, 5, 10), 2.50], [Date.UTC(2018, 6, 7), 2.83], [Date.UTC(2018, 7, 1), 2.41], [Date.UTC(2018, 8, 3), 2.13], [Date.UTC(2018, 9, 5), 2.28], [Date.UTC(2018, 10, 8), 2.66], [Date.UTC(2018, 11, 2), 3.06], [Date.UTC(2019, 0, 4), 3.30], [Date.UTC(2019, 1, 6), 2.85], [Date.UTC(2019, 2, 2), 2.43], [Date.UTC(2019, 3, 7), 2.51], [Date.UTC(2019, 4, 4), 2.69], [Date.UTC(2019, 5, 9), 2.72], [Date.UTC(2019, 6, 6), 2.30], [Date.UTC(2019, 7, 5), 2.26], [Date.UTC(2019, 8, 9), 2.13], [Date.UTC(2019, 9, 5), 2.08], [Date.UTC(2019, 10, 3), 1.93], [Date.UTC(2019, 11, 6), 2.09], [Date.UTC(2020, 0, 5), 2.45], [Date.UTC(2020, 1, 4), 2.06], [Date.UTC(2020, 2, 4), 2.05], [Date.UTC(2020, 3, 2), 2.38], [Date.UTC(2020, 4, 2), 2.68], [Date.UTC(2020, 5, 1), 2.27], [Date.UTC(2020, 6, 4), 2.48], [Date.UTC(2020, 7, 2), 2.87], [Date.UTC(2020, 8, 6), 2.54], [Date.UTC(2020, 9, 4), 2.14], [Date.UTC(2020, 10, 3), 2.03], [Date.UTC(2020, 11, 3), 2.35], [Date.UTC(2021, 0, 2), 2.20], [Date.UTC(2021, 1, 6), 2.27], [Date.UTC(2021, 2, 4), 2.11], [Date.UTC(2021, 3, 4), 2.44], [Date.UTC(2021, 4, 2), 2.45], [Date.UTC(2021, 5, 5), 2.33], [Date.UTC(2021, 6, 4), 2.71], [Date.UTC(2021, 7, 3), 2.95], [Date.UTC(2021, 8, 11), 2.55], [Date.UTC(2021, 9, 6), 2.19], [Date.UTC(2021, 10, 6), 2.66], [Date.UTC(2021, 11, 5), 2.30], [Date.UTC(2022, 0, 1), 2.09], [Date.UTC(2022, 1, 2), 1.83], [Date.UTC(2022, 2, 2), 2.09], [Date.UTC(2022, 3, 5), 2.41], [Date.UTC(2022, 4, 3), 2.12], [Date.UTC(2022, 5, 4), 2.09], [Date.UTC(2022, 6, 2), 1.78], [Date.UTC(2022, 7, 2), 2.40], [Date.UTC(2022, 8, 1), 2.82], [Date.UTC(2022, 9, 1), 2.74], [Date.UTC(2022, 10, 1), 2.74], [Date.UTC(2022, 11, 2), 3.19], [Date.UTC(2022, 11, 29), 2.87], [Date.UTC(2023, 1, 1), 2.52], [Date.UTC(2023, 2, 2), 2.17], [Date.UTC(2023, 3, 1), 2.10], [Date.UTC(2023, 4, 2), 2.44], [Date.UTC(2023, 5, 2), 2.82], [Date.UTC(2023, 6, 2), 3.11], [Date.UTC(2023, 7, 4), 3.29], [Date.UTC(2023, 8, 2), 3.30], [Date.UTC(2023, 9, 4), 2.91], [Date.UTC(2023, 10, 2), 3.21], [Date.UTC(2023, 11, 4), 2.90], [Date.UTC(2024, 0, 2), 2.77], [Date.UTC(2024, 1, 2), 3.17], [Date.UTC(2024, 2, 1), 3.38], [Date.UTC(2024, 3, 3), 2.89], [Date.UTC(2024, 4, 1), 3.01]]}, {name : 'Visual Basic',data : [[Date.UTC(2010, 8, 11), 0.33], [Date.UTC(2010, 9, 2), 0.33], [Date.UTC(2010, 10, 3), 0.32], [Date.UTC(2010, 11, 7), 0.26], [Date.UTC(2011, 0, 2), 0.26], [Date.UTC(2011, 1, 8), 0.59], [Date.UTC(2011, 2, 8), 0.56], [Date.UTC(2011, 3, 3), 0.34], [Date.UTC(2011, 4, 2), 0.48], [Date.UTC(2011, 5, 5), 0.43], [Date.UTC(2011, 5, 27), 0.43], [Date.UTC(2011, 6, 8), 0.48], [Date.UTC(2011, 7, 3), 0.46], [Date.UTC(2011, 8, 10), 0.31], [Date.UTC(2011, 9, 9), 0.48], [Date.UTC(2011, 10, 7), 0.53], [Date.UTC(2011, 11, 4), 0.36], [Date.UTC(2012, 0, 8), 0.48], [Date.UTC(2012, 1, 5), 0.80], [Date.UTC(2012, 2, 11), 0.78], [Date.UTC(2012, 3, 8), 0.98], [Date.UTC(2012, 4, 9), 1.27], [Date.UTC(2012, 5, 10), 1.22], [Date.UTC(2012, 6, 4), 0.92], [Date.UTC(2012, 7, 10), 0.88], [Date.UTC(2012, 8, 2), 0.84], [Date.UTC(2012, 9, 5), 0.60], [Date.UTC(2012, 10, 4), 0.77], [Date.UTC(2012, 11, 2), 0.89], [Date.UTC(2013, 0, 5), 1.04], [Date.UTC(2013, 1, 8), 1.01], [Date.UTC(2013, 2, 11), 0.89], [Date.UTC(2013, 3, 7), 1.10], [Date.UTC(2013, 4, 8), 1.13], [Date.UTC(2013, 5, 9), 1.07], [Date.UTC(2013, 6, 7), 1.25], [Date.UTC(2013, 6, 12), 1.25], [Date.UTC(2013, 7, 4), 1.32], [Date.UTC(2013, 8, 11), 1.84], [Date.UTC(2013, 9, 10), 1.93], [Date.UTC(2013, 10, 9), 1.97], [Date.UTC(2013, 11, 6), 1.69], [Date.UTC(2014, 0, 1), 1.56], [Date.UTC(2014, 1, 8), 1.80], [Date.UTC(2014, 2, 3), 1.86], [Date.UTC(2014, 3, 10), 1.75], [Date.UTC(2014, 4, 7), 1.26], [Date.UTC(2014, 5, 8), 1.91], [Date.UTC(2014, 6, 6), 1.49], [Date.UTC(2014, 7, 11), 2.01], [Date.UTC(2014, 8, 1), 1.27], [Date.UTC(2014, 9, 3), 1.56], [Date.UTC(2014, 10, 8), 1.66], [Date.UTC(2014, 11, 7), 1.80], [Date.UTC(2015, 0, 6), 1.07], [Date.UTC(2015, 1, 5), 1.72], [Date.UTC(2015, 2, 7), 1.95], [Date.UTC(2015, 3, 13), 2.20], [Date.UTC(2015, 4, 13), 1.89], [Date.UTC(2015, 5, 6), 1.84], [Date.UTC(2015, 6, 12), 1.95], [Date.UTC(2015, 7, 6), 1.78], [Date.UTC(2015, 8, 5), 1.53], [Date.UTC(2015, 9, 4), 1.51], [Date.UTC(2015, 10, 7), 1.68], [Date.UTC(2015, 11, 4), 1.65], [Date.UTC(2016, 0, 2), 1.68], [Date.UTC(2016, 1, 2), 1.86], [Date.UTC(2016, 2, 3), 1.67], [Date.UTC(2016, 3, 7), 1.61], [Date.UTC(2016, 4, 6), 1.83], [Date.UTC(2016, 5, 5), 2.25], [Date.UTC(2016, 6, 4), 2.01], [Date.UTC(2016, 7, 6), 2.05], [Date.UTC(2016, 8, 8), 1.76], [Date.UTC(2016, 9, 7), 1.99], [Date.UTC(2016, 10, 5), 1.92], [Date.UTC(2016, 11, 4), 1.97], [Date.UTC(2017, 0, 7), 1.91], [Date.UTC(2017, 1, 8), 1.88], [Date.UTC(2017, 2, 7), 2.01], [Date.UTC(2017, 3, 9), 2.06], [Date.UTC(2017, 4, 6), 2.35], [Date.UTC(2017, 5, 3), 2.01], [Date.UTC(2017, 6, 7), 2.10], [Date.UTC(2017, 7, 2), 1.81], [Date.UTC(2017, 8, 6), 1.75], [Date.UTC(2017, 9, 5), 1.42], [Date.UTC(2017, 10, 12), 1.49], [Date.UTC(2017, 11, 9), 1.35], [Date.UTC(2018, 0, 3), 2.31], [Date.UTC(2018, 1, 8), 2.18], [Date.UTC(2018, 2, 7), 1.74], [Date.UTC(2018, 3, 1), 1.80], [Date.UTC(2018, 4, 6), 0.91], [Date.UTC(2018, 5, 10), 1.15], [Date.UTC(2018, 6, 7), 0.89], [Date.UTC(2018, 7, 1), 0.92], [Date.UTC(2018, 8, 3), 0.68], [Date.UTC(2018, 9, 5), 0.65], [Date.UTC(2018, 10, 8), 0.85], [Date.UTC(2018, 11, 2), 0.98], [Date.UTC(2019, 0, 4), 1.03], [Date.UTC(2019, 1, 6), 0.99], [Date.UTC(2019, 2, 2), 0.95], [Date.UTC(2019, 3, 7), 1.06], [Date.UTC(2019, 4, 4), 1.32], [Date.UTC(2019, 5, 9), 1.07], [Date.UTC(2019, 6, 6), 1.01], [Date.UTC(2019, 7, 5), 1.02], [Date.UTC(2019, 8, 9), 1.08], [Date.UTC(2019, 9, 5), 1.23], [Date.UTC(2019, 10, 3), 0.96], [Date.UTC(2019, 11, 6), 0.93], [Date.UTC(2020, 0, 5), 0.83], [Date.UTC(2020, 1, 4), 0.60], [Date.UTC(2020, 2, 4), 0.77], [Date.UTC(2020, 3, 2), 4.72], [Date.UTC(2020, 4, 2), 4.18], [Date.UTC(2020, 5, 1), 4.69], [Date.UTC(2020, 6, 4), 5.23], [Date.UTC(2020, 7, 2), 4.66], [Date.UTC(2020, 8, 6), 4.12], [Date.UTC(2020, 9, 4), 3.97], [Date.UTC(2020, 10, 3), 4.01], [Date.UTC(2020, 11, 3), 3.92], [Date.UTC(2021, 0, 2), 3.84], [Date.UTC(2021, 1, 6), 4.33], [Date.UTC(2021, 2, 4), 4.85], [Date.UTC(2021, 3, 4), 4.55], [Date.UTC(2021, 4, 2), 4.02], [Date.UTC(2021, 5, 5), 4.01], [Date.UTC(2021, 6, 4), 4.50], [Date.UTC(2021, 7, 3), 4.67], [Date.UTC(2021, 8, 11), 4.62], [Date.UTC(2021, 9, 6), 5.24], [Date.UTC(2021, 10, 6), 5.72], [Date.UTC(2021, 11, 5), 5.40], [Date.UTC(2022, 0, 1), 4.74], [Date.UTC(2022, 1, 2), 5.23], [Date.UTC(2022, 2, 2), 5.77], [Date.UTC(2022, 3, 5), 5.40], [Date.UTC(2022, 4, 3), 5.86], [Date.UTC(2022, 5, 4), 5.42], [Date.UTC(2022, 6, 2), 4.97], [Date.UTC(2022, 7, 2), 4.90], [Date.UTC(2022, 8, 1), 4.39], [Date.UTC(2022, 9, 1), 3.95], [Date.UTC(2022, 10, 1), 4.11], [Date.UTC(2022, 11, 2), 3.94], [Date.UTC(2022, 11, 29), 4.64], [Date.UTC(2023, 1, 1), 4.14], [Date.UTC(2023, 2, 2), 4.75], [Date.UTC(2023, 3, 1), 4.40], [Date.UTC(2023, 4, 2), 3.84], [Date.UTC(2023, 5, 2), 3.34], [Date.UTC(2023, 6, 2), 2.90], [Date.UTC(2023, 7, 4), 2.63], [Date.UTC(2023, 8, 2), 2.22], [Date.UTC(2023, 9, 4), 2.13], [Date.UTC(2023, 10, 2), 2.10], [Date.UTC(2023, 11, 4), 1.82], [Date.UTC(2024, 0, 2), 1.60], [Date.UTC(2024, 1, 2), 1.52], [Date.UTC(2024, 2, 1), 1.42], [Date.UTC(2024, 3, 3), 1.70], [Date.UTC(2024, 4, 1), 2.01]]}, {name : 'Go',data : [[Date.UTC(2010, 0, 5), 1.25], [Date.UTC(2010, 1, 7), 1.78], [Date.UTC(2010, 2, 7), 0.92], [Date.UTC(2010, 3, 5), 0.71], [Date.UTC(2010, 4, 15), 0.64], [Date.UTC(2010, 6, 6), 0.49], [Date.UTC(2010, 6, 30), 0.60], [Date.UTC(2010, 8, 11), 0.73], [Date.UTC(2010, 9, 2), 0.63], [Date.UTC(2010, 10, 3), 0.55], [Date.UTC(2010, 11, 7), 0.59], [Date.UTC(2011, 0, 2), 0.59], [Date.UTC(2011, 1, 8), 0.71], [Date.UTC(2011, 2, 8), 0.96], [Date.UTC(2011, 3, 3), 0.56], [Date.UTC(2011, 4, 2), 0.49], [Date.UTC(2011, 5, 5), 0.42], [Date.UTC(2011, 5, 27), 0.42], [Date.UTC(2011, 6, 8), 0.37], [Date.UTC(2011, 7, 3), 0.48], [Date.UTC(2011, 8, 10), 0.36], [Date.UTC(2011, 9, 9), 0.37], [Date.UTC(2011, 10, 7), 0.36], [Date.UTC(2011, 11, 4), 0.39], [Date.UTC(2012, 0, 8), 0.47], [Date.UTC(2012, 1, 5), 0.28], [Date.UTC(2012, 2, 11), 0.09], [Date.UTC(2012, 3, 8), 0.10], [Date.UTC(2012, 4, 9), 0.10], [Date.UTC(2012, 5, 10), 0.11], [Date.UTC(2012, 6, 4), 0.11], [Date.UTC(2012, 7, 10), 0.12], [Date.UTC(2012, 8, 2), 0.11], [Date.UTC(2012, 9, 5), 0.11], [Date.UTC(2012, 10, 4), 0.11], [Date.UTC(2012, 11, 2), 0.11], [Date.UTC(2013, 0, 5), 0.12], [Date.UTC(2013, 1, 8), 0.11], [Date.UTC(2013, 2, 11), 0.12], [Date.UTC(2013, 3, 7), 0.11], [Date.UTC(2013, 4, 8), 0.11], [Date.UTC(2013, 5, 9), 0.11], [Date.UTC(2013, 6, 7), 0.22], [Date.UTC(2013, 6, 12), 0.22], [Date.UTC(2013, 7, 4), 0.51], [Date.UTC(2013, 8, 11), 0.22], [Date.UTC(2013, 9, 10), 0.19], [Date.UTC(2013, 10, 9), 0.21], [Date.UTC(2013, 11, 6), 0.26], [Date.UTC(2014, 0, 1), 0.32], [Date.UTC(2014, 1, 8), 0.32], [Date.UTC(2014, 2, 3), 0.29], [Date.UTC(2014, 3, 10), 0.32], [Date.UTC(2014, 4, 7), 0.42], [Date.UTC(2014, 5, 8), 0.42], [Date.UTC(2014, 6, 6), 0.40], [Date.UTC(2014, 7, 11), 0.37], [Date.UTC(2014, 8, 1), 0.40], [Date.UTC(2014, 9, 3), 0.33], [Date.UTC(2014, 10, 8), 0.33], [Date.UTC(2014, 11, 7), 0.26], [Date.UTC(2015, 0, 6), 0.10], [Date.UTC(2015, 1, 5), 0.30], [Date.UTC(2015, 2, 7), 0.26], [Date.UTC(2015, 3, 13), 0.30], [Date.UTC(2015, 4, 13), 0.03], [Date.UTC(2015, 5, 6), 0.06], [Date.UTC(2015, 6, 12), 0.06], [Date.UTC(2015, 7, 6), 0.08], [Date.UTC(2015, 8, 5), 0.25], [Date.UTC(2015, 9, 4), 0.14], [Date.UTC(2015, 10, 7), 0.20], [Date.UTC(2015, 11, 4), 0.19], [Date.UTC(2016, 0, 2), 0.16], [Date.UTC(2016, 1, 2), 0.29], [Date.UTC(2016, 2, 3), 0.20], [Date.UTC(2016, 3, 7), 0.24], [Date.UTC(2016, 4, 6), 0.25], [Date.UTC(2016, 5, 5), 0.21], [Date.UTC(2016, 6, 4), 0.16], [Date.UTC(2016, 7, 6), 1.27], [Date.UTC(2016, 8, 8), 1.62], [Date.UTC(2016, 9, 7), 1.81], [Date.UTC(2016, 10, 5), 2.00], [Date.UTC(2016, 11, 4), 1.94], [Date.UTC(2017, 0, 7), 2.33], [Date.UTC(2017, 1, 8), 2.10], [Date.UTC(2017, 2, 7), 1.98], [Date.UTC(2017, 3, 9), 1.97], [Date.UTC(2017, 4, 6), 2.08], [Date.UTC(2017, 5, 3), 2.04], [Date.UTC(2017, 6, 7), 2.36], [Date.UTC(2017, 7, 2), 1.65], [Date.UTC(2017, 8, 6), 1.57], [Date.UTC(2017, 9, 5), 1.36], [Date.UTC(2017, 10, 12), 1.57], [Date.UTC(2017, 11, 9), 1.39], [Date.UTC(2018, 0, 3), 1.57], [Date.UTC(2018, 1, 8), 1.42], [Date.UTC(2018, 2, 7), 1.44], [Date.UTC(2018, 3, 1), 1.18], [Date.UTC(2018, 4, 6), 0.97], [Date.UTC(2018, 5, 10), 0.88], [Date.UTC(2018, 6, 7), 0.97], [Date.UTC(2018, 7, 1), 1.00], [Date.UTC(2018, 8, 3), 1.08], [Date.UTC(2018, 9, 5), 1.25], [Date.UTC(2018, 10, 8), 1.50], [Date.UTC(2018, 11, 2), 1.19], [Date.UTC(2019, 0, 4), 1.12], [Date.UTC(2019, 1, 6), 0.96], [Date.UTC(2019, 2, 2), 1.02], [Date.UTC(2019, 3, 7), 1.01], [Date.UTC(2019, 4, 4), 1.11], [Date.UTC(2019, 5, 9), 1.26], [Date.UTC(2019, 6, 6), 1.02], [Date.UTC(2019, 7, 5), 0.97], [Date.UTC(2019, 8, 9), 1.22], [Date.UTC(2019, 9, 5), 1.10], [Date.UTC(2019, 10, 3), 0.85], [Date.UTC(2019, 11, 6), 1.00], [Date.UTC(2020, 0, 5), 0.90], [Date.UTC(2020, 1, 4), 1.13], [Date.UTC(2020, 2, 4), 1.28], [Date.UTC(2020, 3, 2), 1.36], [Date.UTC(2020, 4, 2), 1.27], [Date.UTC(2020, 5, 1), 1.02], [Date.UTC(2020, 6, 4), 1.21], [Date.UTC(2020, 7, 2), 1.43], [Date.UTC(2020, 8, 6), 1.46], [Date.UTC(2020, 9, 4), 1.16], [Date.UTC(2020, 10, 3), 1.36], [Date.UTC(2020, 11, 3), 1.14], [Date.UTC(2021, 0, 2), 1.41], [Date.UTC(2021, 1, 6), 1.28], [Date.UTC(2021, 2, 4), 1.31], [Date.UTC(2021, 3, 4), 1.22], [Date.UTC(2021, 4, 2), 1.22], [Date.UTC(2021, 5, 5), 0.95], [Date.UTC(2021, 6, 4), 1.17], [Date.UTC(2021, 7, 3), 0.90], [Date.UTC(2021, 8, 11), 1.13], [Date.UTC(2021, 9, 6), 1.28], [Date.UTC(2021, 10, 6), 1.21], [Date.UTC(2021, 11, 5), 0.95], [Date.UTC(2022, 0, 1), 1.04], [Date.UTC(2022, 1, 2), 1.23], [Date.UTC(2022, 2, 2), 0.98], [Date.UTC(2022, 3, 5), 1.09], [Date.UTC(2022, 4, 3), 1.11], [Date.UTC(2022, 5, 4), 1.02], [Date.UTC(2022, 6, 2), 1.14], [Date.UTC(2022, 7, 2), 0.96], [Date.UTC(2022, 8, 1), 1.16], [Date.UTC(2022, 9, 1), 1.27], [Date.UTC(2022, 10, 1), 1.15], [Date.UTC(2022, 11, 2), 1.15], [Date.UTC(2022, 11, 29), 1.14], [Date.UTC(2023, 1, 1), 1.11], [Date.UTC(2023, 2, 2), 1.24], [Date.UTC(2023, 3, 1), 1.28], [Date.UTC(2023, 4, 2), 0.99], [Date.UTC(2023, 5, 2), 1.00], [Date.UTC(2023, 6, 2), 1.07], [Date.UTC(2023, 7, 4), 1.16], [Date.UTC(2023, 8, 2), 1.19], [Date.UTC(2023, 9, 4), 1.37], [Date.UTC(2023, 10, 2), 1.19], [Date.UTC(2023, 11, 4), 1.03], [Date.UTC(2024, 0, 2), 1.38], [Date.UTC(2024, 1, 2), 1.73], [Date.UTC(2024, 2, 1), 1.56], [Date.UTC(2024, 3, 3), 1.85], [Date.UTC(2024, 4, 1), 1.60]]}, {name : 'SQL',data : [[Date.UTC(2001, 5, 30), 2.96], [Date.UTC(2001, 6, 30), 2.77], [Date.UTC(2001, 7, 30), 2.38], [Date.UTC(2001, 8, 28), 2.36], [Date.UTC(2001, 9, 26), 2.24], [Date.UTC(2001, 10, 28), 1.84], [Date.UTC(2001, 11, 31), 1.87], [Date.UTC(2002, 0, 30), 1.94], [Date.UTC(2002, 1, 27), 2.09], [Date.UTC(2002, 2, 29), 2.06], [Date.UTC(2002, 3, 29), 2.33], [Date.UTC(2002, 4, 29), 2.36], [Date.UTC(2002, 5, 29), 2.53], [Date.UTC(2002, 6, 31), 2.66], [Date.UTC(2002, 7, 29), 2.65], [Date.UTC(2002, 8, 29), 2.54], [Date.UTC(2002, 9, 30), 2.64], [Date.UTC(2002, 10, 29), 2.38], [Date.UTC(2002, 11, 31), 2.52], [Date.UTC(2003, 0, 31), 2.56], [Date.UTC(2003, 1, 28), 2.51], [Date.UTC(2003, 2, 31), 2.56], [Date.UTC(2003, 3, 30), 2.65], [Date.UTC(2003, 4, 30), 3.12], [Date.UTC(2003, 5, 30), 3.04], [Date.UTC(2003, 6, 31), 2.99], [Date.UTC(2003, 7, 31), 3.24], [Date.UTC(2003, 8, 30), 3.72], [Date.UTC(2003, 9, 31), 3.70], [Date.UTC(2003, 10, 30), 2.93], [Date.UTC(2003, 11, 31), 3.10], [Date.UTC(2004, 0, 31), 3.51], [Date.UTC(2004, 1, 29), 3.10], [Date.UTC(2004, 2, 31), 2.97], [Date.UTC(2004, 3, 30), 2.44], [Date.UTC(2018, 1, 8), 2.36], [Date.UTC(2018, 2, 7), 2.69], [Date.UTC(2018, 3, 1), 2.65], [Date.UTC(2018, 4, 6), 1.99], [Date.UTC(2018, 5, 10), 2.34], [Date.UTC(2018, 6, 7), 2.33], [Date.UTC(2018, 7, 1), 2.32], [Date.UTC(2018, 8, 3), 2.06], [Date.UTC(2018, 9, 5), 2.04], [Date.UTC(2018, 10, 8), 1.84], [Date.UTC(2018, 11, 2), 2.18], [Date.UTC(2019, 0, 4), 2.28], [Date.UTC(2019, 1, 6), 1.90], [Date.UTC(2019, 2, 2), 1.93], [Date.UTC(2019, 3, 7), 2.27], [Date.UTC(2019, 4, 4), 2.56], [Date.UTC(2019, 5, 9), 2.22], [Date.UTC(2019, 6, 6), 1.98], [Date.UTC(2019, 7, 5), 1.63], [Date.UTC(2019, 8, 9), 1.94], [Date.UTC(2019, 9, 5), 1.93], [Date.UTC(2019, 10, 3), 1.69], [Date.UTC(2019, 11, 6), 1.84], [Date.UTC(2020, 0, 5), 1.50], [Date.UTC(2020, 1, 4), 1.53], [Date.UTC(2020, 2, 4), 1.83], [Date.UTC(2020, 3, 2), 2.17], [Date.UTC(2020, 4, 2), 2.09], [Date.UTC(2020, 5, 1), 1.73], [Date.UTC(2020, 6, 4), 1.40], [Date.UTC(2020, 7, 2), 1.46], [Date.UTC(2020, 8, 6), 1.76], [Date.UTC(2020, 9, 4), 1.57], [Date.UTC(2020, 10, 3), 1.54], [Date.UTC(2020, 11, 3), 1.53], [Date.UTC(2021, 0, 2), 1.61], [Date.UTC(2021, 1, 6), 1.72], [Date.UTC(2021, 2, 4), 1.87], [Date.UTC(2021, 3, 4), 1.83], [Date.UTC(2021, 4, 2), 1.71], [Date.UTC(2021, 5, 5), 1.88], [Date.UTC(2021, 6, 4), 1.53], [Date.UTC(2021, 7, 3), 1.47], [Date.UTC(2021, 8, 11), 1.80], [Date.UTC(2021, 9, 6), 2.17], [Date.UTC(2021, 10, 6), 2.11], [Date.UTC(2021, 11, 5), 1.79], [Date.UTC(2022, 0, 1), 1.80], [Date.UTC(2022, 1, 2), 1.55], [Date.UTC(2022, 2, 2), 1.85], [Date.UTC(2022, 3, 5), 2.28], [Date.UTC(2022, 4, 3), 1.87], [Date.UTC(2022, 5, 4), 1.94], [Date.UTC(2022, 6, 2), 1.64], [Date.UTC(2022, 7, 2), 1.67], [Date.UTC(2022, 8, 1), 2.01], [Date.UTC(2022, 9, 1), 1.78], [Date.UTC(2022, 10, 1), 1.82], [Date.UTC(2022, 11, 2), 2.22], [Date.UTC(2022, 11, 29), 2.50], [Date.UTC(2023, 1, 1), 2.12], [Date.UTC(2023, 2, 2), 1.95], [Date.UTC(2023, 3, 1), 1.68], [Date.UTC(2023, 4, 2), 1.48], [Date.UTC(2023, 5, 2), 1.47], [Date.UTC(2023, 6, 2), 1.48], [Date.UTC(2023, 7, 4), 1.53], [Date.UTC(2023, 8, 2), 1.44], [Date.UTC(2023, 9, 4), 1.78], [Date.UTC(2023, 10, 2), 1.88], [Date.UTC(2023, 11, 4), 1.61], [Date.UTC(2024, 0, 2), 1.46], [Date.UTC(2024, 1, 2), 1.82], [Date.UTC(2024, 2, 1), 1.92], [Date.UTC(2024, 3, 3), 1.61], [Date.UTC(2024, 4, 1), 1.44]]}, {name : 'Fortran',data : [[Date.UTC(2001, 5, 30), 1.41], [Date.UTC(2001, 6, 30), 1.31], [Date.UTC(2001, 7, 30), 1.46], [Date.UTC(2001, 8, 28), 1.40], [Date.UTC(2001, 9, 26), 1.32], [Date.UTC(2001, 10, 28), 1.29], [Date.UTC(2001, 11, 31), 1.23], [Date.UTC(2002, 0, 30), 1.23], [Date.UTC(2002, 1, 27), 1.27], [Date.UTC(2002, 2, 29), 1.27], [Date.UTC(2002, 3, 29), 1.28], [Date.UTC(2002, 4, 29), 1.26], [Date.UTC(2002, 5, 29), 1.28], [Date.UTC(2002, 6, 31), 1.05], [Date.UTC(2002, 7, 29), 1.16], [Date.UTC(2002, 8, 29), 1.14], [Date.UTC(2002, 9, 30), 1.19], [Date.UTC(2002, 10, 29), 1.22], [Date.UTC(2002, 11, 31), 1.24], [Date.UTC(2003, 0, 31), 1.14], [Date.UTC(2003, 1, 28), 1.07], [Date.UTC(2003, 2, 31), 0.96], [Date.UTC(2003, 3, 30), 0.87], [Date.UTC(2003, 4, 30), 0.91], [Date.UTC(2003, 5, 30), 0.94], [Date.UTC(2003, 6, 31), 0.87], [Date.UTC(2003, 7, 31), 0.83], [Date.UTC(2003, 8, 30), 0.73], [Date.UTC(2003, 9, 31), 0.78], [Date.UTC(2003, 10, 30), 0.56], [Date.UTC(2003, 11, 31), 0.54], [Date.UTC(2004, 0, 31), 0.48], [Date.UTC(2004, 1, 29), 0.50], [Date.UTC(2004, 2, 31), 0.51], [Date.UTC(2004, 3, 30), 0.38], [Date.UTC(2004, 4, 30), 0.37], [Date.UTC(2004, 5, 30), 0.34], [Date.UTC(2004, 6, 31), 0.33], [Date.UTC(2004, 7, 30), 0.28], [Date.UTC(2004, 8, 30), 0.37], [Date.UTC(2004, 9, 31), 0.43], [Date.UTC(2004, 10, 30), 0.50], [Date.UTC(2004, 11, 31), 0.52], [Date.UTC(2005, 0, 31), 0.52], [Date.UTC(2005, 1, 28), 0.89], [Date.UTC(2005, 2, 31), 1.05], [Date.UTC(2005, 3, 30), 1.06], [Date.UTC(2005, 4, 31), 0.82], [Date.UTC(2005, 5, 30), 0.79], [Date.UTC(2005, 6, 31), 0.59], [Date.UTC(2005, 7, 31), 0.60], [Date.UTC(2005, 8, 30), 0.64], [Date.UTC(2005, 11, 3), 0.45], [Date.UTC(2006, 0, 4), 0.47], [Date.UTC(2006, 1, 2), 0.48], [Date.UTC(2006, 2, 1), 0.46], [Date.UTC(2006, 3, 2), 0.46], [Date.UTC(2006, 4, 1), 0.43], [Date.UTC(2006, 5, 1), 0.43], [Date.UTC(2006, 6, 2), 0.37], [Date.UTC(2006, 7, 2), 0.39], [Date.UTC(2006, 8, 2), 0.40], [Date.UTC(2006, 9, 1), 0.40], [Date.UTC(2006, 10, 2), 0.39], [Date.UTC(2006, 11, 1), 0.45], [Date.UTC(2007, 0, 2), 0.48], [Date.UTC(2007, 1, 3), 0.52], [Date.UTC(2007, 2, 3), 0.53], [Date.UTC(2007, 3, 1), 0.61], [Date.UTC(2007, 4, 5), 0.63], [Date.UTC(2007, 5, 2), 0.58], [Date.UTC(2007, 6, 2), 0.56], [Date.UTC(2007, 7, 5), 0.46], [Date.UTC(2007, 8, 2), 0.48], [Date.UTC(2007, 9, 4), 0.45], [Date.UTC(2007, 10, 4), 0.60], [Date.UTC(2007, 11, 3), 0.70], [Date.UTC(2008, 0, 3), 0.31], [Date.UTC(2008, 1, 7), 0.25], [Date.UTC(2008, 5, 1), 0.33], [Date.UTC(2008, 6, 2), 0.29], [Date.UTC(2008, 7, 3), 0.29], [Date.UTC(2008, 8, 3), 0.30], [Date.UTC(2008, 9, 6), 0.38], [Date.UTC(2008, 10, 2), 0.38], [Date.UTC(2008, 11, 3), 0.35], [Date.UTC(2009, 0, 2), 0.32], [Date.UTC(2009, 1, 1), 0.31], [Date.UTC(2009, 2, 5), 0.32], [Date.UTC(2009, 3, 7), 0.34], [Date.UTC(2009, 4, 1), 0.36], [Date.UTC(2009, 5, 4), 0.37], [Date.UTC(2009, 6, 2), 0.40], [Date.UTC(2009, 7, 1), 0.40], [Date.UTC(2009, 8, 5), 0.37], [Date.UTC(2009, 9, 2), 0.38], [Date.UTC(2009, 10, 2), 0.38], [Date.UTC(2009, 11, 2), 0.43], [Date.UTC(2010, 0, 5), 0.39], [Date.UTC(2010, 1, 7), 0.38], [Date.UTC(2010, 2, 7), 0.56], [Date.UTC(2010, 3, 5), 0.35], [Date.UTC(2010, 4, 15), 0.41], [Date.UTC(2010, 6, 6), 0.35], [Date.UTC(2010, 6, 30), 0.35], [Date.UTC(2010, 8, 11), 0.46], [Date.UTC(2010, 9, 2), 0.46], [Date.UTC(2010, 10, 3), 0.48], [Date.UTC(2010, 11, 7), 0.43], [Date.UTC(2011, 0, 2), 0.46], [Date.UTC(2011, 1, 8), 0.58], [Date.UTC(2011, 2, 8), 0.35], [Date.UTC(2011, 3, 3), 0.39], [Date.UTC(2011, 4, 2), 0.50], [Date.UTC(2011, 5, 5), 0.39], [Date.UTC(2011, 5, 27), 0.39], [Date.UTC(2011, 6, 8), 0.35], [Date.UTC(2011, 7, 3), 0.39], [Date.UTC(2011, 8, 10), 0.37], [Date.UTC(2011, 9, 9), 0.38], [Date.UTC(2011, 10, 7), 0.44], [Date.UTC(2011, 11, 4), 0.48], [Date.UTC(2012, 0, 8), 0.43], [Date.UTC(2012, 1, 5), 0.52], [Date.UTC(2012, 2, 11), 0.49], [Date.UTC(2012, 3, 8), 0.40], [Date.UTC(2012, 4, 9), 0.41], [Date.UTC(2012, 5, 10), 0.45], [Date.UTC(2012, 6, 4), 0.45], [Date.UTC(2012, 7, 10), 0.44], [Date.UTC(2012, 8, 2), 0.43], [Date.UTC(2012, 9, 5), 0.42], [Date.UTC(2012, 10, 4), 0.44], [Date.UTC(2012, 11, 2), 0.44], [Date.UTC(2013, 0, 5), 0.46], [Date.UTC(2013, 1, 8), 0.46], [Date.UTC(2013, 2, 11), 0.45], [Date.UTC(2013, 3, 7), 0.41], [Date.UTC(2013, 4, 8), 0.42], [Date.UTC(2013, 5, 9), 0.41], [Date.UTC(2013, 6, 7), 0.41], [Date.UTC(2013, 6, 12), 0.41], [Date.UTC(2013, 7, 4), 0.41], [Date.UTC(2013, 8, 11), 0.54], [Date.UTC(2013, 9, 10), 0.47], [Date.UTC(2013, 10, 9), 0.48], [Date.UTC(2013, 11, 6), 0.39], [Date.UTC(2014, 0, 1), 0.41], [Date.UTC(2014, 1, 8), 0.36], [Date.UTC(2014, 2, 3), 0.36], [Date.UTC(2014, 3, 10), 0.35], [Date.UTC(2014, 4, 7), 0.42], [Date.UTC(2014, 5, 8), 0.37], [Date.UTC(2014, 6, 6), 0.38], [Date.UTC(2014, 7, 11), 0.43], [Date.UTC(2014, 8, 1), 0.41], [Date.UTC(2014, 9, 3), 0.39], [Date.UTC(2014, 10, 8), 0.55], [Date.UTC(2014, 11, 7), 0.54], [Date.UTC(2015, 0, 6), 0.27], [Date.UTC(2015, 1, 5), 0.54], [Date.UTC(2015, 2, 7), 0.61], [Date.UTC(2015, 3, 13), 0.60], [Date.UTC(2015, 4, 13), 0.62], [Date.UTC(2015, 5, 6), 0.58], [Date.UTC(2015, 6, 12), 0.77], [Date.UTC(2015, 7, 6), 0.85], [Date.UTC(2015, 8, 5), 0.89], [Date.UTC(2015, 9, 4), 0.84], [Date.UTC(2015, 10, 7), 0.83], [Date.UTC(2015, 11, 4), 0.82], [Date.UTC(2016, 0, 2), 0.85], [Date.UTC(2016, 1, 2), 0.67], [Date.UTC(2016, 2, 3), 0.79], [Date.UTC(2016, 3, 7), 0.76], [Date.UTC(2016, 4, 6), 0.70], [Date.UTC(2016, 5, 5), 0.96], [Date.UTC(2016, 6, 4), 0.94], [Date.UTC(2016, 7, 6), 0.75], [Date.UTC(2016, 8, 8), 0.68], [Date.UTC(2016, 9, 7), 0.74], [Date.UTC(2016, 10, 5), 0.74], [Date.UTC(2016, 11, 4), 0.75], [Date.UTC(2017, 0, 7), 0.74], [Date.UTC(2017, 1, 8), 0.83], [Date.UTC(2017, 2, 7), 0.74], [Date.UTC(2017, 3, 9), 0.80], [Date.UTC(2017, 4, 6), 0.76], [Date.UTC(2017, 5, 3), 0.78], [Date.UTC(2017, 6, 7), 0.86], [Date.UTC(2017, 7, 2), 0.67], [Date.UTC(2017, 8, 6), 0.88], [Date.UTC(2017, 9, 5), 1.00], [Date.UTC(2017, 10, 12), 0.67], [Date.UTC(2017, 11, 9), 0.66], [Date.UTC(2018, 0, 3), 0.43], [Date.UTC(2018, 1, 8), 0.48], [Date.UTC(2018, 2, 7), 0.46], [Date.UTC(2018, 3, 1), 0.39], [Date.UTC(2018, 4, 6), 0.42], [Date.UTC(2018, 5, 10), 0.32], [Date.UTC(2018, 6, 7), 0.37], [Date.UTC(2018, 7, 1), 0.40], [Date.UTC(2018, 8, 3), 0.42], [Date.UTC(2018, 9, 5), 0.37], [Date.UTC(2018, 10, 8), 0.38], [Date.UTC(2018, 11, 2), 0.48], [Date.UTC(2019, 0, 4), 0.44], [Date.UTC(2019, 1, 6), 0.51], [Date.UTC(2019, 2, 2), 0.47], [Date.UTC(2019, 3, 7), 0.56], [Date.UTC(2019, 4, 4), 0.52], [Date.UTC(2019, 5, 9), 0.48], [Date.UTC(2019, 6, 6), 0.38], [Date.UTC(2019, 7, 5), 0.36], [Date.UTC(2019, 8, 9), 0.36], [Date.UTC(2019, 9, 5), 0.44], [Date.UTC(2019, 10, 3), 0.39], [Date.UTC(2019, 11, 6), 0.39], [Date.UTC(2020, 0, 5), 0.31], [Date.UTC(2020, 1, 4), 0.23], [Date.UTC(2020, 2, 4), 0.29], [Date.UTC(2020, 3, 2), 0.33], [Date.UTC(2020, 4, 2), 0.32], [Date.UTC(2020, 5, 1), 0.27], [Date.UTC(2020, 6, 4), 0.22], [Date.UTC(2020, 7, 2), 0.31], [Date.UTC(2020, 8, 6), 0.36], [Date.UTC(2020, 9, 4), 0.38], [Date.UTC(2020, 10, 3), 0.41], [Date.UTC(2020, 11, 3), 0.45], [Date.UTC(2021, 0, 2), 0.46], [Date.UTC(2021, 1, 6), 0.63], [Date.UTC(2021, 2, 4), 0.83], [Date.UTC(2021, 3, 4), 0.91], [Date.UTC(2021, 4, 2), 0.83], [Date.UTC(2021, 5, 5), 1.07], [Date.UTC(2021, 6, 4), 1.12], [Date.UTC(2021, 7, 3), 1.14], [Date.UTC(2021, 8, 11), 1.01], [Date.UTC(2021, 9, 6), 1.08], [Date.UTC(2021, 10, 6), 1.19], [Date.UTC(2021, 11, 5), 1.04], [Date.UTC(2022, 0, 1), 0.77], [Date.UTC(2022, 1, 2), 0.58], [Date.UTC(2022, 2, 2), 0.39], [Date.UTC(2022, 3, 5), 0.35], [Date.UTC(2022, 4, 3), 0.38], [Date.UTC(2022, 5, 4), 0.55], [Date.UTC(2022, 6, 2), 0.76], [Date.UTC(2022, 7, 2), 0.80], [Date.UTC(2022, 8, 1), 1.03], [Date.UTC(2022, 9, 1), 0.79], [Date.UTC(2022, 10, 1), 0.57], [Date.UTC(2022, 11, 2), 0.43], [Date.UTC(2022, 11, 29), 0.45], [Date.UTC(2023, 1, 1), 0.58], [Date.UTC(2023, 2, 2), 0.79], [Date.UTC(2023, 3, 1), 0.59], [Date.UTC(2023, 4, 2), 0.78], [Date.UTC(2023, 5, 2), 0.99], [Date.UTC(2023, 6, 2), 1.25], [Date.UTC(2023, 7, 4), 1.03], [Date.UTC(2023, 8, 2), 1.28], [Date.UTC(2023, 9, 4), 1.02], [Date.UTC(2023, 10, 2), 1.30], [Date.UTC(2023, 11, 4), 1.07], [Date.UTC(2024, 0, 2), 1.09], [Date.UTC(2024, 1, 2), 1.40], [Date.UTC(2024, 2, 1), 1.22], [Date.UTC(2024, 3, 3), 1.47], [Date.UTC(2024, 4, 1), 1.24]]}
    ]"""

# 将字符串中的一些字符替换掉,使之可转为python的数据类型
data_str = txt.replace('    	', '').replace('name : ','').replace(',data ','').replace('Date.UTC','')
data = eval(data_str)  # 字符串转python数据
print(data[0]['Python'][-10:])  # 列表索引到python数据字典,根据字典键获取其值进一步利用,这里仅输出查看后10个数据
 

实例 6.9 字符串加密

在一行中输入一个包括大小写字母和数字的字符串,编程将其中字母都转为大写,然后将大写字母用该字母后的第4个字母替换,其他字符原样输出,实现字符串加密。

1. 大写字母字符串 2. 大写字母前4个切下来拼接到后面 3. 输入一个字符串input() 4. 字母都转为大写upper() 5. 遍历字符串 5.1 如果当前字符包含在大写字母的字符串中(find(),得到当前字母在大写字母中的序号) a. 将大写字母用该字母后的第4个字母替换拼接(用变换了顺序的字符串中对应序号的字母替换) 5.2 否则 b. 其他字符原样拼接 6. 输出变换过的字符串
p = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'        # 原字符序列
s = 'EFGHIJKLMNOPQRSTUVWXYZABCD'        # 替换字符序列,s=p[4:]+p[:4]

plaincode = input().upper()             # 输入的明文字符串并将字母都转为大写
ciphertext = ''                         # 空字符串,存放加密字符串

for c in plaincode:                     # 遍历输入的明文字符串
    n = p.find(c)                       # 返回c在p中的位置序号,找不到时返回-1
    if n == -1:                         # 值为-1表示c在p中不存在,不是大写字母
        ciphertext = ciphertext + c     # 将原字符拼接到ciphertext上
    else:                               # c为大写字母,用序列s中对应位置的字母替换
        ciphertext = ciphertext + s[n]  # 替换的字符拼接到ciphertext
        
print(ciphertext)                       # 输出加密后的字符串

实例 6.10 成绩查询

文件6.7 score.txt中保存一些同学各门课的成绩,编写程序,输入一个同学的名字,输出该同学python课程成绩。

姓名,C语言,Java,Python,C# 罗明,95,96,85,63 朱佳,75,93,66,85 李思,86,76,96,93 郑君,88,98,76,90 王雪,99,96,91,88 李立,82,66,100,771.输入一个同学的名字(input()) 2.打开文件,创建文件对象(open()) 3. 遍历文件对象,每次循环得到一个字符串(for ... in...) 3.1 将得到的字符串切分为列表(split()) 3.2 如果“Python”在列表中存在 a. 获取字符串“Python”的位置序号n (index()或find()) 3.3 否则如果学生名字在列表中存在 a. 输出列表序号为n的元素
#打开当前路径下的文件,创建一个可遍历文件对象 f,文件的编码为 utf-8
stu_name =input()  # 输入要查询的学生姓名
with open('/data/bigfiles/3a898386-2be1-4d30-9721-624852a33686.txt', 'r', encoding='utf-8') as f:
    for line in f:                # 遍历创建的文件对象f,line为文件一行,字符串
        line_ls = line.split(',')  # 字符串切分为列表,根据逗号切分
        if 'Python' in line_ls:    # 如果“Python”在列表中存在
            n = line_ls.index('Python')  # 返回位置序号n
        elif stu_name in line_ls:    # 如果学生名在列表中存在,成员测试
            print(f'{line_ls[0]}的python成绩为{line_ls[n]}分')  # 输出序号为3的python成绩
 
 

字符串大小写转换

方法描述
str.capitalize()把字符串str的第一个字符大写
str.casefold()返回一个字符串的大小写折叠的复制,类似于lower(),但他移除在字符串中的所有差异。例如,德语的小写字母'ß'对应于"ss",由于他已经是小写,所以lower()将不做任何处理,但casefold()会将他转换为"ss"。
str.swapcase()翻转字符串str中的大小写字母。
str.title()返回“标题化”的字符串str,将所有单词都是以大写开始,其余字母均为小写(见 istitle())
text = 'Daily briefing: AI predicts the shape of nearly all known proteins'
print(text.title())       # 每个单词首字母大写
print(text.capitalize())  # 字符串首字母大写
print(text.lower())       # 字母转小写
print(text.upper())       # 字母转大写

字符串格式输出

方法描述
str.center(width[, fillchar])返回一个原字符串居中,并使用fillchar填充至长度 width 的新字符串,缺省用空格填充。
str.ljust(width)返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
str.zfill(width)返回长度为 width 的字符串,原字符串str右对齐,前面填充0
str.expandtabs(tabsize=8)把字符串str中的 tab 符号转为空格,tab 符号默认的空格数是 8。
str.format(*args, **kwargs)格式化字符串
str.format_map(mapping)与str.format(**mapping)类似,只是mapping是直接使用的,而不是复制到一个字典。
print('欢迎光临'.center(40,'*'))
print('P'+'2605'.zfill(12))  # 产生12位的字符串,不足12位时前面填充0,与字符串'P'拼接到一起

字符串搜索定位与替换

方法描述
str.lstrip([chars])删除字符串 str左边的指定字符,默认去除空白字符
str.rstrip([chars])删除字符串 str右边的指定字符,默认去除空白字符
str.maketrans(x[, y[, z]])maketrans()方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串,表示转换的目标。
str.translate(table[, deletechars])根据字符串 str给出的表转换字符串 str中的字符,要过滤掉的字符放到 deletechars参数中
str.rfind(sub[, start[, end]])类似于 find()函数,不过是从右边开始查找。
str.rindex(sub[, start[, end]])类似于 index(),不过是从右边开始。
str.rjust(width[, fillchar])返回一个原字符串右对齐,并使用fillchar填充至长度 width 的新字符串,fillchar缺省时用空格填充。
str.rpartition(sep)类似于 partition()函数,不过是从右边开始查找。
str.rsplit(sep=None, maxsplit=-1)通过sep指定分隔符对字符串进行分割并返回一个列表,默认分隔符为所有空白字符。类似于split()方法,只不过是从字符串右侧开始分割。如果指定maxsplit数量max,则最多切分为max次。

maketrans()方法和str.translate()方法结合,可以更方便的完成前面字符替换的操作:

import string

text = '''"This is great!" Hem said: "There's enough Cheese here to last us forever?" The little people felt happy and successful, and thought they were now secure.'''
symbol = string.punctuation      # '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
for c in symbol:                 # 遍历标点符号
    text = text.replace(c, ' ')  # 将标点符号替换为空格,重用名字text,下次循环替换新字符串中的符号
print(len(text.split()))         # 切分为列表后列表的长度就是原文中单词的数量
import string
text = '''"This is great!" Hem said: "There's enough Cheese here to last us forever?" The little people felt happy and successful, and thought they were now secure.'''
symbol = string.punctuation      # '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
text=text.translate(str.maketrans(symbol, ' '*len(symbol))) # 将标点符号替换为空格
print(len(text.split()))         # 切分为列表后列表的长度就是原文中单词的数量

实例 6.11 恺撒密码

在密码学中,恺撒密码是一种最简单且最广为人知的加密技术。他是一种替换加密的技术, 明文中的所有字母都在字母表上向后偏移3后被替换成密文。例如,所有的字母A将被替换成D,B变成E,以此类推。 输入一个字符串明文用恺撒密码对明文进行加密后输出。 可以发现,这是6.9的一个扩展,同时考虑到多种字符的变换,可用6.9的方法,下面给出一种用maketrans()和translate()方法字符映射转换方法实现的方案:

import string
plaintext = input('输入明文:')       # 输入要加密的明文字符串
lower = string.ascii_lowercase       # 小写字母,用常量可避免输入错误
upper = string.ascii_uppercase       # 大写字母
digit = string.digits                 # 数字
before = string.ascii_letters+digit        # 全部大小写字母+数字
after = lower[3:] + lower[:3] + upper[3:] + upper[:3]+digit[3:]+digit[:3]
table = ''.maketrans(before, after)  # 创建映射表
print(plaintext.translate(table))    # 输出加密后的密文字符串
print(f'加密后的文本是:{plaintext.translate(table)}')    # 格式化输出

字符串联合与分割

方法描述
str.partition(sep)从第一次出现sep的位置起,把字符串 str 分成一个3元素的元组(string_pre_str,str,string_post_str),如果字符串str中不包含sep则返回一个包含字符串本身的3元组,后面跟着两个空字符串。(string_pre_str , ' ', ' ')
str.splitlines([keepends])按照行('\r', '\r\n', '\n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

字符串条件判断

方法描述
str.isalnum()如果字符串str至少有一个字符,并且所有字符都是字母或数字,则返回 True,否则返回 False。
str.isdigit()如果字符串str只包含Unicode数字、半角数字或全角数字,则返回 True,否则返回 False。
str.isnumeric()如果字符串str中只包含Unicode数字、半角数字、全角数字、罗马数字、汉字数字、以及①⒂⒔等类似数字,则返回True,否则返回 False。
str.isdecimal()如果字符串str只包含十进制Unicode数字、半角数字或全角数字则返回 True,否则返回 False。
str.isalpha()如果字符串str至少有一个字符,并且所有字符都是字母则返回 True,否则返回 False。
str.isidentifier()检测字符串是否是字母开头。
str.islower()如果字符串str中包含至少一个区分大小写的字符,并且所有这些字符都是小写,则返回 True,否则返回 False。
str.isprintable()如果字符串str是空串或其中的所有字符都是可打印的,返回True,否则False。
str.isspace()如果字符串str中只包含空格、制表符(\t)回车(\r)换行(\n)等空白字符,则返回 True,否则返回 False。
str.istitle()如果字符串str是标题化的则返回 True,否则返回 False。
str.isupper()如果字符串str中包含至少一个区分大小写的字符,并且所有这些字符都是大写,则返回 True,否则返回 False。
str.startswith(prefix[, start[, end]])检查字符串str是否是以 prefix 开头,是则返回 True,否则返回 False。如果start 和 end 指定值,则在指定范围内检查。
str.endswith(suffix[, start[, end]])检查字符串str是否以 suffix 结束,是则返回 True,否则返回 False。如果start 和 end 指定值,则在指定范围内检查。

实例 6.12 分类统计字符

用户输入一个字符串,分别统计其中小写字母、大写字母、数字、空格和其他字符的个数,并在一行内输出小写字母、大写字母、各类表示的数字、空格和其他字符的个数。

text = input()  # 输入一个字符串
upper, lower, digit, white, other = 0, 0, 0, 0, 0  # 初始化变量

for c in text:
    if c.islower():
        lower = lower + 1
    elif c.isupper():
        upper = upper + 1
    elif c.isnumeric():  # 此方法包括中文数字等多种类型的数字表示
        digit = digit + 1
    elif c == ' ':       # 此处不可用isspace(),该方法判定结果包括空格、制表符(\t)和回车(\r)换行(\n)等空白字符
        white = white + 1
    else:
        other = other + 1
        
print(f'小写字母{lower}个')
print(f'大写字母{upper}个')
print(f'各类数字{digit}个')
print(f'空白字符{white}个')
print(f'其他字符{other}个')
# The Japanese attack on Pearl Harbor 1941. 一九四一年十二月七日清晨,日本海军袭击珍珠港。

字符串编码

方法描述
bytes.decode(encoding="utf-8", errors="strict")以 encoding 指定的编码格式解码为字节串对象,bytes为字符串,出错触发ValueError的异常。
str.encode(encoding="utf-8", errors="strict")以 encoding 指定的编码格式编码字符串str为字节串对象,出错触发ValueError的异常。

 

5.12 字符串格式化

<模板字符串>.format(<逗号分隔的参数>)

format()方法中<模板字符串>的大括号中除了包括参数序号,还可以包括格式控制信息。此时,位置的内部样式如下:

格式字符串包含有以花括号 {} 括起来的“替换字段”。
不在花括号之内的内容被视为字面文本,会不加修改地复制到输出中。
如果你需要在字面文本中包含花括号字符,可以通过重复来转义: {{ and }}。

替换字段的语法如下:

replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}" field_name ::= arg_name ("." attribute_name | "[" element_index "]")* arg_name ::= [identifier | digit+] attribute_name ::= identifier element_index ::= digit+ | index_string index_string ::= <any source character except "]"> + conversion ::= "r" | "s" | "a" format_spec ::= <described in the next section>

string --- 常见的字符串操作 — Python 3.13.2 文档

{<参数序号>: <格式控制标记>}

其中,<格式控制标记>用来控制参数显示时的格式,包括: <填充><对齐><宽度>,<.精度><类型>6 个字段,format格式控制标记如表5.10所示。

整数:填充对齐宽度,.精度类别









左对齐:<
右对齐:>
居中: ^
=



数字
千位
分隔符
浮点数
小数位数
或字符串
最大输出长度
c Unicode 字符
d 十进制
b/o/x 二/八/十六进制
e/E 浮点数指数形式
f/F 浮点数标准形式
% 百分比输出,并保留两位小数

format_spec ::= [[fill]align][sign]["z"]["#"]["0"][width][grouping_option]["." precision][type] fill ::= <any charact > align ::= "<" | ">" | "=" | ^" sign ::= "+" | "-" " " width ::i git+ grouping_option ::= " | "," precision = digit+ type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X " | "%"

<填充>:指<宽度>内除了参数外的字符采用什么方式表示,默认采用空格,可以通过<填充>更换。
<对齐>:指参数在<宽度>内输出时的对齐方式,分别使用<、> 和 ^ 三个符号表示左对齐、右对齐和居中对齐。使用"="时,强制将填充放在符号(如果有)之后、数字之前。这用于打印格式为 "+000000120 "的字段。该对齐选项仅对数字类型有效。当 "0 "紧接在字段宽度之前时,它将成为数字的默认对齐方式。

<宽度>:指当前位置的设定输出字符宽度,如果该位置对应的format()参数长度比<宽度>设定值大,则使用参数实际长度输出。如果该值的实际位数小于指定宽度,则位数将被默认以空格字符补充。

各种对齐选项的含义如下:

'<':强制字段在可用空间内左对齐(这是大多数对象的默认值)。
'>':强制字段在可用空间内右对齐(这是数字的默认值)。
'=':强制在符号(如果有)之后数码之前放置填充。 这被用于以 '+000000120' 形式打印字段。 这个对齐选项仅对数字类型有效。 这是当 '0' 紧接在字段宽度之前时的默认选项。
'^':强制字段在可用空间内居中。最小字段宽度,

s = '123456789'
for i in range(1, 10):
    print('{:->9}'.format(s[:i]))  # 字符串切片,得到前i个字符,右对齐输出,“-”填充
s = '123456789'
for i in range(1, 10):
    print('{:+^17}'.format(s[:i] + s[:i - 1][::-1]))  # 字符串切片,得到前i个字符,居中对齐输出,“+”填充
# <,>(逗号):<格式控制标记>中逗号用于显示数字的千位分隔符

print('{:,}'.format(123456789))  # 输出 123,456,789

<.精度>:表示两个含义,由小数点(.)开头,用于浮点数和字符串,整数时不可用。
对于用“f”和“F”格式化的浮点数,精度表示小数点后保留的数字位数,末尾为0的浮点数保持末尾的0的输出。

print('{:.8f}'.format(3141.59265300979)) # 3141.59265301
print('{:.8F}'.format(3141.59265300079)) # 3141.59265300
print('{:.6f}'.format(314.150000358979)) # 314.150000

对于用“g”和“G”浮点数,精度表示小数点前面和后面保留的数字位数,且会舍去输出数据末尾的零。

print('{:.8g}'.format(314.159265358979))  # 314.15927
print('{:.8G}'.format(314.150000358979))  # 314.15
print('{:.8}'.format('3141.59265300079')) # 3141.592

对于字符串,精度表示输出的最大长度。

print('{:.4}'.format('1.23456789'))  # 1.23,算上小数点为4个字符

可结合宽度控制输出格式:

print('{:*^12.4}'.format('1.23456789'))  # ****1.23****,占位12字符,字符串取4个字符

精度的数字前没有点时,表示输出的最小占位宽度,输出字符大于宽度时,按实际位数输出。

print('{:>4}'.format('1'))          # 1,占4个字符宽度,右对齐
print('{:.>4}'.format('1'))          # 1,占4个字符宽度,右对齐,为方便查看,用点做填充字符
print('{:4}'.format('1.23456789'))  # 1.23456789,超过宽度时按实际字符输出

<类型>:表示输出整数和浮点数类型的格式规则。
对于整数类型,输出格式包括6 种
对于浮点数类型,输出格式包括4 种
浮点数输出时尽量使用<.精度>表示小数部分的宽度,有助于更好控制输出格式。

符号功能
b输出整数的二进制方式;
c输出整数对应的 Unicode 字符;
d输出整数的十进制方式;
o输出整数的八进制方式;
x/X输出整数的小写/大写十六进制方式;
e/E输出浮点数对应的小写字母 e /大写字母 E的指数形式;
f/F输出浮点数的标准浮点形式,保留结果末尾的零;3.1500
g/G输出浮点数,末尾的零会从结果中被移除,3.15
%输出浮点数的百分形式
print('{:b}'.format(15))               # b表示将整数转为二进制,1111
print('{:>22,.3f}'.format(15703050635.0))# 22字符居右,千位分隔,3位小数
# 输出:    15,703,050,635.000
print("{}{:.2f}{:.4}".format("圆周率",3.1415926, '是无理数的一个典型例子'))
# .2f 表示浮点数截取2位小数;.4 表示将传入的字符串截取4个字符
# 输出:圆周率3.14是无理数
print('{:*<20}'.format('开始注释'))   # 宽20字符,居左,空位用*填充
# 输出:开始注释****************
print('{:*^20}'.format('这是注释'))   # 居中
# 输出:********这是注释********
print('{:^20}'.format('无填充字符'))  # 居中,无填充
# 输出:       无填充字符
print('{:*>20}'.format('注释结束'))   # 居右对齐
# 输出:****************注释结束

在计算机中,所有的数据在存储和运算时都要使用二进制数表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
计算机中存储的都是二进制以十进制整数、十六进制、八进制、二进制和字符形式输出ASCII码值在90-100之间的字符

width = 5
for num in range(90, 100):
    for kind in 'dxobc':
        print('{0:{width}{base}}'.format(num, base=kind, width=width), end=' ')
    print()
width = 5
for num in range(90, 100):
    for kind in 'dxobc':
        print('{0:{1}{2}}'.format(num, width, kind), end=' ')
    print()

format函数具有丰富的格式控制方法,可以方便、快速的进行各种格式的输出,一般建议使用format函数做输出格式控制。

自Python 3.6开始,又增加了一种格式化字符串字面值(Formatted string literals)方法,也称为f-strings。这种方法是带有'f' 或'F' 前缀的字符串字面值。字符串可包含替换字段,即以{} 标识的变量或表达式,格式化字符串字面值实际上是会在运行时被求值的表达式。

width = 5
for num in range(90, 100):
    for kind in 'dxobc':
        print(f'{num:{width}{kind}}', end=' ')
    print()

由于历史的原因,同时考虑到其他语言程序员的习惯,Python 中目前仍保留了%格式符的用法,下面用几个例子了解一下%格式符的语法。

符号功能
%c格式化字符及其ASCII码
%s格式化字符串
%d格式化整数
%u格式化无符号整型
%o格式化无符号八进制数
%x或 %X格式化无符号十六进制数
%f 或 %F格式化浮点数字,可指定小数点后的精度
%e或 %E用科学记数法格式化浮点数
%g或 %G自动选择 %f 和 %e 两种格式中较短的格式输出,并且不输出数字后面没有意义的零
%p用十六进制数格式化变量的地址
%当字符串中存在格式化标志时,需要用 %%表示一个百分号
print('Hi, %s, you have $%d.' % ('Michael', 1000000))

格式化操作符辅助指令

符号功能
*定义宽度或者小数点精度
-用做左对齐
+在正数前面显示加号( + )
<sp >在正数前面显示空格
\#在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')
0显示的数字前面填充“0”而不是默认的空格
%“%%”输出一个单一的“%”
(var)映射变量(字典参数)
m.nm是显示的最小总宽度,n是小数点后的位数
print('--------%(p).2f' % {'p': 1.23456})  # 保留2位有小数
print('--------%(p)f' % {'p': 1.23456})    # 默认精度,保留小数点后6位

%c 65转unicode值对应字符A;
%o 整数15转成对应的8进制数17;
%x 整数15转成对应的16进制数f

print('***%c***%o***%x' % (65, 15, 15))

5.13 转义字符

反斜杠(\)是一个特殊字符,在字符串中表示转义。
该字符与后面相邻的一个字符共同组成了一个特定的含义。
在格式化输出字符串时,可以用转义字符实现一些特殊的格式控制。

描述示例
\n换行n:newline,用于行末,表示输出时到当前位置本行结束,后面字符在新的一行输出
\r回车r:return,回车,Mac os下表示换下一行
\t水平制表符功能与键盘上tab键相同,光标水平移动若干个字符,一般3个字符,也有解析成4或6个字符
\(在行尾时)续行符为避免一行太长,排版时在前一行末尾加“\”,解释器会将下一行内容接在前行末尾。
\\反斜杠符号用于在字符串中输出一个反斜杠“\”
\'单引号用于在字符串中输出一个单引号
\"双引号用于在字符串中输出一个双引号
\b退格(Backspace)使光标回退一格,清除前面一个字符
print('\t静夜思\n\t 李白\n床前明月光,疑是地上霜。\n举头望明月,低头思故乡。\n')
print('  静夜思\n   李白\n床前明月光,\n疑是地上霜。\n举头望明月,\n低头思故乡。\n')

5.14 random模块及其应用

Python中使用random模块产生各种分布的伪随机数。
使用随机数函数时,直接导入random模块即可,方法如下:

import random

随机数生成器(种子)

“种子”是这个算法开始计算的第一个值。
如果随机数种子一样,那么后续所有“随机”结果和顺序也都是完全一致的。
Python语言不设置随机数种子时,解释器会使用系统时间作为种子,使每次生成的随机数不同。
当希望得到的随机数据可预测,可以设置用相同的种子,使后续产生的随机数相同。

random.seed(a=None, version=2) # 随机数种子

seed 必须是下列类型之一:
NoneType、int、float、str、bytes或bytearray。

import random
# 不指定随机数种子时,每次产生的序列是不同的。
for i in range(5):
	print(random.randint(1, 100), end=' ')
print()
for i in range(5):
	print(random.randint(1, 100), end=' ')
print()
import random
# 用相同的随机数种子可以得到相同的序列
random.seed(10)  # 用整数10做种子
for i in range(5):
	print(random.randint(1, 100), end=' ')
print()

random.seed(10)  # 用整数10做种子
for i in range(5):
	print(random.randint(1, 100), end=' ')
函数描述与示例
random.seed()初始化随机数生成器,缺省时用系统时间做种子。seed 必须是下列类型之一: NoneType、int、float、str、bytes或bytearray。
random.randint(a, b)产生[a,b]之间(包括b)的一个随机整数
random.random()产生[0.0,1.0)之间的一个随机浮点数
random.uniform(a, b)产生[a, b]之间的一个随机浮点数
random.choice(seq)从非空序列seq中随机产生一个元素,当序列为空时,触发索引异常
random.choices(population, weights=None, *, cum_weights=None, k=1)population中选择替换,返回大小为 k 的元素列表。k个元素可以重复
random.shuffle(x[,random])将可变序列x顺序打乱
random.sample(population, k)从列表、元组、字符串、集合、range对象等分布式序列中随机选取k个元素,不重复取, 以列表形式返回。

random模块的sample和choices函数都可以实现随机抽样:
sample实现无放回抽样,这意味着抽样取出的元素是不重复的;
choices实现有放回抽样,这意味着可能会重复选中某些元素。

这两个函数的第一个参数代表抽样的总体,而参数k代表样本容量,需要说明的是choices函数的参数k是一个命名关键字参数,在传参时必须指定参数名。

import random
import string

ALL_CHARS = string.digits + string.ascii_letters
 
def generate_code(*, code_len=4):
    """
    生成指定长度的验证码
    :param code_len: 验证码的长度(默认4个字符)
    :return: 由大小写英文字母和数字构成的随机验证码字符串
    """
    return ''.join(random.choices(ALL_CHARS, k=code_len))  # k是默认值参数,使用时需要用k=表示

# 调用函数,生成默认长度的验证码
for i in range(5):
    print(generate_code())

print('字符串中可能存在重复字符')  # 例如:gEeGrg,SgVjgS

# 调用函数,生成指定长度的验证码
for i in range(5):
    print(generate_code(code_len=6))
import random
import string

ALL_CHARS = string.digits + string.ascii_letters
 
def generate_code(*, code_len=4):
    """
    生成指定长度的验证码
    :param code_len: 验证码的长度(默认4个字符)
    :return: 由大小写英文字母和数字构成的随机验证码字符串,无重复字符
    """
    return ''.join(random.sample(ALL_CHARS, code_len)) # k是位置参数,使用时直接传入数值

# 调用函数,生成默认长度的验证码
for i in range(5):
    print(generate_code())

print()
# 调用函数,生成指定长度的验证码
for i in range(5):
    print(generate_code(code_len=6))

模拟双色球随机选号

import random

RED_BALLS = [i for i in range(1, 34)]  # 从1到33中随机选取6个数字作为红色球的号码
BLUE_BALLS = [i for i in range(1, 17)]  # 从1到16中随机选取1个数字作为蓝色球的号码

def choose():
    """
    生成一组随机号码
    :return: 保存随机号码的列表
    """
    selected_balls = random.sample(RED_BALLS, 6)  # 从RED_BALLS中随机选取6个元素
    selected_balls.sort()  # 对列表中的元素进行排序
    selected_balls.append(random.choice(BLUE_BALLS))  # 从BLUE_BALLS中随机选取1个元素并追加到列表中
    return selected_balls  # 返回生成的随机号码

def display(balls):
    """
    格式输出一组号码
    :param balls: 保存随机号码的列表
    """
    for ball in balls[:-1]:
        print(f'\033[031m{ball:0>2d}\033[0m', end=' ')
    print(f'\033[034m{balls[-1]:0>2d}\033[0m')

n = int(input('生成几注号码: '))
for i in range(n):
    display(choose())

用于字节数据的函数

random.randbytes(n) # 生成 n 个随机字节

import random

s = random.randbytes(6)
print(s)  # b'bT\xc9@\xaf\xd8'

生成随机整数函数

random.randint(a, b) # 产生[a,b]之间(包括b)的一个随机整数

import random

print(random.randint(0, 128))  # 随机产生一个0-128之间的整数

random.randrange(stop) # 从[0-stop) (不含stop)中随机产生一个整数random.randrange(start, stop[, step]) # 从[start-stop),步长为step的序列里随机产生一个整数 相当于 choice(range(start, stop, step)) ,但实际上并没有构建一个 range 对象。

实例 随机产生一个身份证顺序号

身份证号码第十五位到第十七位为顺序码,是县级公安机关所辖派出所的分配码,每个派出所分配码为10个连续号码,例如“000-009”或“060-069”,其中奇数为男性分配码,偶数为女性分配码。随机产生一个身份证顺序号。

1. 先用random.randrange(100)产生一个两位整数,不足2位时前面要补0 2. 根据性别产生一个奇数或一个偶数。 偶数可以用random.randrange(0, 10, 2) 来产生,奇数可以用random.randrange(1, 10, 2) 来产生 3. 将两个整数拼接为一个字符串

import random

order = random.randrange(100)               # 2位整数
gender = random.randrange(0, 10, 2)         # 偶数
print(f'{(str(order) + str(gender)):>03}')  # 060,不足2位补0
print(f'{order:02}{gender}')                # 060,不足2位补0

random.getrandbits(k) # 返回具有 k 个随机比特位的非负 Python 整数

实例 随机产生一个IP地址

IP地址是互联网上的每一个网络和每一台主机分配一个逻辑地址, 这是一个32位的二进制数,通常被分割为4个“8位二进制数”。 IP地址通常用“点分十进制”表示, 例:点分十进IP地址 100.4.5.6, 实际上是32位二进制数01100100.00000100.00000101.00000110 这样的数字正好可以用getrandbits(k) 函数产生。

import random
 
dot = '.'                      # 定义一个用于分隔符的变量
for i in range(4):
    n = random.getrandbits(8)  # 每次产生一个8个二进制位对应的整数
    if i == 3:
        dot = ''               # 若是最后一个数,分隔符修改为空字符串
    print(n, end=dot)  # 241.26.4.219
import random
 
dot = '.'                      # 定义一个用于分隔符的变量
for i in range(4):
    n = random.randint(0, 255)  # 每次产生一个0-255的整数
    if i == 3:
        dot = ''               # 若是最后一个数,分隔符修改为空字符串
    print(n, end=dot)  # 241.26.4.219

序列用函数

random.choice(seq) # 从非空序列seq中随机产生一个元素,当序列为空时,触发索引异常

import random

print(random.choice(['win', 'lose', 'draw']))  # 输出'draw'
pwd = ''
for i in range(8):
	pwd = pwd + random.choice('')  # 序列为空,IndexError: string index out of range
print(pwd)  

实例 产生数字密码

学校的教务系统每个学期都会随机产生一个8位数字的登分密码,编程实现。

# 随机产生8个数字组成一个密码
import random

pwd = ''                                      # 定义一个空字符串
for i in range(8):                           # 重复8次
	pwd = pwd + random.choice('0123456789')  # 每次随机产生一个数字字符,拼接到字符串上
print(pwd)  # 64295542

random.choices(population, weights=None, *, cum_weights=None, k=1)
从population中选择,返回大小为 k 的元素列表
既未指定 weight 也未指定 cum_weights ,则以相等的概率进行选择

import random

pwd = random.choices('0123456789', k=8)
print(pwd)           # ['5', '1', '9', '8', '6', '7', '2', '0']
print(''.join(pwd))  # 用join()拼接为一个字符串,51986720

random.shuffle(x[,random]) # 将可变序列x顺序打乱

import random

poker = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
print(poker)
random.shuffle(poker)  # 原地改变可变序列的顺序,函数无返回值
print(poker)

x必须为可变序列,如列表。 原地改变可变序列的顺序,函数无返回值

import random

poker = 'A23456789JQK'  # 字符串是不可变数据,不能用shuffle()
random.shuffle(poker)
print(poker)

random.sample(population, k, *, counts=None)

从列表、元组、字符串、集合、range对象等分布式序列中随机选取k个唯一元素,k不超过序列长度(k<=len(population)),用于无重复的随机抽样,以列表形式返回。
在将来,population 必须是一个序列。
set 的实例将不再被支持。 集合必须先转换为 list 或 tuple,最好是固定顺序以使抽样是可重现的。

import random

print(random.sample([10, 20, 30, 40, 50], k=4))  # 输出 [50, 10, 20, 30]
import random

pwd = random.sample('0123456789', k=8)  # 返回值为列表 ['9', '8', '6', '5', '3', '1', '7', '0']
print(pwd)
print(''.join(pwd))                     # 序列连接为一个字符串98653170
import random

digit = '0123456789'
pwd = random.sample('0123456789', k=len(digit))  # 打乱不可变序列,返回列表
print(pwd)             # ['9', '3', '1', '4', '0', '6', '5', '8', '2', '7']
print(''.join(pwd))    # 序列连接为一个字符串9314065827

重复的元素可以一个个地直接列出,或使用可选的仅限关键字形参 counts 来指定。

import random

pwd1 = random.sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)
pwd2 = random.sample(['red', 'blue'], counts=[4, 2], k=5)  # 'red'重复4次, 'blue'重复2次
print(pwd1)
print(pwd2)

如果样本大小大于总体大小,则引发 ValueError

import random

print(random.sample([10, 20, 30, 40, 50], k=6))  # 样本大小大于总体大小,引发 ValueError

实例 5.10 模拟校验验证码

用户在网络上注册或登录各平台时,经常需要输入验证码。这些验证码采取随机生成的方式产生,包含大小写字母和数字。用户输入验证码时,一般不区分大小写,请编写程序对用户的输入的验证码进行验证。 用户输入时不区分大小写,在验证前可以将用户输入的字符串和验证码中的大写字母都转为小写字母;或反过来,将所有小写字母转换为大写字母,再进行匹配验证。

import random                  # 导入随机数模块
import string                  # 导入字符串模块
 
# sample()方法从包含字母与数字的字符串中随机获取6个元素,返回列表
code = random.sample(string.ascii_letters+string.digits, 6)
print(code)                    # ['v', '8', 'G', 'Z', 'w', '7']
vcode = ''.join(code).upper()  # 列表code元素连接为字符串,字母转大写
print(vcode)                   # V8GZW7
check_code = input().upper()   # 将输入中的字母转为大写
if check_code == vcode:        # 将输入和产生的验证码进行比较
    print('验证码正确')
else:
    print('验证码错误,请重新输入')

实例 5.11 模拟微软序列号

微软产品一般都一个25位的、用于区分每份微软产品的产品序列号。产品序列号由五组被“-”分隔开,由字母数字混合编制的字符串组成,每组字符串是由五个字符串组成。例如: 3CVX3-BJWXM-6HCYX-QEK9R-CVG4R 每个字符是取自于以下24个字母及数字之中的一个: B C E F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9 采用这24个字符的原因是为了避免混淆相似的字母和数字,如I 和1,O 和0等,减少不必要的麻烦。

import random                          # 导入随机数模块
 
keySn = ''                            # 创建一个空字符串,容纳序列号
code = 'BCEFGHJKMPQRTVWXY2346789'      # 限定字符集合
for i in range(5):
    s = ''                             # 创建空字符串,容纳序列号一节
    for j in range(5):                 # 每次产生1个字符,5字符一组
        s = s + random.choice(code)    # 产生一个字符,拼接在字符串后
    if i == 0:                         # 判断是否为第一个字符串
        keySn = keySn + s              # 直接拼接在字符串keySn上
    else:
        keySn = keySn + '-' + s        # 用“-”拼接字符串
print(keySn)                          # EPMQW-RJFBR-T99EG-CT968-XE9PR
import random                      # 导入随机数模块
 
keySn = []                        # 创建一个空列表,用于容纳序列号
code = 'BCEFGHJKMPQRTVWXY2346789'  # 字符集合
for i in range(5):
    s = random.sample(code, 5)     # 从code中随机取5个字符
    keySn.append(''.join(s))       # 将5个字符连接为字符串附加到列表
print(keySn)          # ['WCMRQ', 'Y4MCR', 'BGPJ6', '3KPB9', '23RGQ']
print('-'.join(keySn))# 用‘-’将列表中的元素连接起来

算法1:蒙特卡洛模拟

蒙特卡罗法的基本思想是: 为了求解问题,首先建立一个概率模型或随机过程,使它的参数或数字特征等于问题的解:然后通过对模型或过程的观察或抽样试验来计算这些参数或数字特征,最后给出所求解的近似值。解的精确度用估计值的标准误差来表示。 蒙特卡罗法 的主要理论基础是概率统计理论,主要手段是随机抽样、统计试验。 用蒙特卡罗法求解实际问题的基本步骤为: (1)根据实际问题的特点.构造简单而又便于实现的概率统计模型.使所求的解恰好是所求问题的概率分布或数学期望; (2)给出模型中各种不同分布随机变量的抽样方法; (3)统计处理模拟结果,给出问题解的统计估计值和精度估计值。

示例5.12 蒙特卡洛法解百钱百鸡

import random

def monte_carlo_cock(num):
    answer = []
    for i in range(num):
        hen = random.randint(1, 20)
        cock = random.randint(1, 33)
        chicken = 100 - cock - hen
        if chicken % 3 == 0 and 5 * cock + 3 * hen + chicken // 3 == 100 and cock + hen + chicken == 100:
            group = [cock, hen, chicken]
            if group not in answer:
                answer.append(group)
    return answer


if __name__ == '__main__':
    result = monte_carlo_cock(5000)
    print(result)

示例5.13 赌徒博弈

如果赌博输赢的概率都是50%,为什么长久赌博的人多会倾家荡产? 设定: · 设定我们假设有 1000 个玩家,每人手里有 10000 元的筹码,可以用来赌博。 · 每一局游戏,玩家都可以抵押 500 元的筹码。输了,筹码不退还;赢了,筹码翻倍。 · 输赢的概率各占 50%。 · 所有玩家一共进行 100 局游戏。一旦任何玩家筹码为0,必须中途退出游戏。

# 利用以下代码分别测试每次押注500-3000时的输赢情况,会发现当玩的局数较多时,玩家总是输家。
import random

def gamble(dealer, player, bet, n):
    """接收庄家和玩家资本,每局赌资和赌局数量,返回100局后或有一方赌资输光时的资本数值"""
    for i in range(n):
        r = random.randint(0, 1)
        if r == 1:
            dealer = dealer + bet
            player = player - bet
        else:
            dealer = dealer - bet
            player = player + bet
        if dealer <= 0 or player <= 0:
            return dealer, player, i
    else:
        return dealer, player, n

if __name__ == '__main__':
    dealer, player = 1000000, 10000  # 庄家和玩家的资本
    n = 1000                          # 每个玩家赌1000局
    for bet in [500, 1000, 1500, 2000, 2500, 3000]:  # 每次赌资500
        result = []
        for i in range(1000):  # 共1000个玩家
            result.append(gamble(dealer, player, bet, n))
        print(f'每次押注{bet}元')
        print(f'剩余筹码最大值',max([x[1] for x in result]))
        print(f'剩余筹码最小值',min([x[1] for x in result]))
        print('余额大于等于本金的人数',len([x[1] for x in result if x[1] >= 10000]))  # 余额大于等于本金的人数
        print('余额小于等于0的人数',len([x[1] for x in result if x[1] <= 0]))  # 余额小于等于0的人数
        print()

示例5.14 随机出题的四则运算

import random

def calculator(n, maximum):
    """随机产生n道正整数四则运算的题目,用户输入计算结果,
    判断输入正确与否,并统计正确率。题目保证减法不出现负数."""
    correct = 0
    for i in range(n):                  # 循环n次,每次产生一个新问题
        b = random.randint(0, maximum)  # 随机产生一个maximum以内整数
        a = random.randint(b, maximum)   # 随机产生一个b到maximum以内整数,避免减法出现负数
        sign = random.choice('+-*/')     # 随机获取一个运算符号
        print(f'{a}{sign}{b}=', end='')  # 5+10=,格式化输出
        result = float(input())          # 用户输入计算结果,转浮点数
        if result == eval(f'{a}{sign}{b}'):  # eval()将字符串转表达式并计算
            print('恭喜你,回答正确')
            correct = correct + 1        # 统计回答正确的题目数量
        else:
            print('回答错误,你要加油哦!')
    print(f'答对{correct}题,正确率为{correct/n * 100}%')

if __name__ == '__main__':
    num = int(input('请输入出题数量:'))
    m = int(input('请输入参与计算的最大数字:'))
    calculator(num, m)
    
 
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值