Python3 自学笔记 C04 /2018/10/23/Python3%20%E8%87%AA%E5%AD%A6%E7%AC%94%E8%AE%B0C04/
Python3 自学笔记第四章【if语句】

- 3.1 一个简单的数列

给定一个汽车列表,将其中每一辆汽车的名称打印出来,要求打印 ‘bmw’ 时所有字母都要大写,其余名称只需要首字母大写:

1
2
3
4
5
6
cars = ['audi' , 'bmw' , 'subaru' , 'toyota']
for car in cars:
if car == 'bmw':
print(car.upper())
else:
print(car.title())

输出结果如下:

1
2
3
4
Audi
BMW
Subaru
Toyota

- 3.1.1 检查特定值是否包含在列表当中

要判断特定的值是否已包含在列表当中,可使用关键字 in

1
2
3
4
user_names = ['andia' , 'david' , 'liwa']
user = 'andia'
if user in user_names:
print(user.title() + "is in user_name.")

输出结果如下:

1
Andiais in user_name.

要判断特定的值是否不包含在列表当中,可使用关键字 not in

1
2
3
4
user_names = ['andia' , 'david' , 'liwa']
user = 'kivle'
if user not in user_names:
print(user.title() + "is not in user_name.")

输出结果如下:

1
Kivleis not in user_name.

- 3.2 if-else 语句

1
2
3
4
5
6
7
age = input("请输入你的年龄查看是否可以去网吧:")
if int(age) >= 18:
print("You are old enough to go to the net bar!")
print("You should go to net bar less,study more!")
else:
print("You are too young to go to the net bar!")
print("Wait until you are 18 to go to the net bar!")

分别输入19和15,输出结果如下:

1
2
3
请输入你的年龄查看是否可以去网吧:19
You are old enough to go to the net bar!
You should go to net bar less,study more!
1
2
3
请输入你的年龄查看是否可以去网吧:15
You are too young to go to the net bar!
Wait until you are 18 to go to the net bar!

- 3.3 if-elif-else 结构

1
2
3
4
5
6
7
8
age = 12
if age < 4:
price = 0
elif age < 18:
price = 5
else:
price = 10
print("Your admission cost is $" + str(price) + ".")

输出结果如下:

1
Your admission cost is $5.

- 3.3.1 使用多个 elif 代码块

1
2
3
4
5
6
7
8
9
10
age = 20
if age < 4:
price = 0
elif age < 18:
price = 5
elif age < 65:
price = 15
else:
price = 10
print("Your admission cost is $" + str(price) + ".")

输出结果如下:

1
Your admission cost is $15.

- 3.3.2 省略 else 代码块

Python并不要求 if-elif 结构后面必须有 else 代码块:

1
2
3
4
5
6
7
8
9
10
age = 20
if age < 4:
price = 0
elif age < 18:
price = 5
elif age < 65:
price = 15
elif age >= 65:
price = 10
print("Your admission cost is $" + str(price) + ".")

输出结果仍与3.3.1一样

- 3.4 测试多个条件

if-elif-else结构功能强大,但仅适用于只有一个条件满足的情况:遇到通过了的测试后,Python就会跳过余下的测试:

1
2
3
4
5
6
7
8
 names = ['Zhangshan' , 'Wanger']
if 'Zhangshan' in names:
print("Zhangshan is here!")
if 'Wanger' in names:
print("Wanger is here!")
if 'Xiaoming' in names:
print("Xiaoming is here!")
print("All the students are here!")

输出结果如下:

1
2
3
Zhangshan is here!
Wanger is here!
All the students are here!

相同的程序,如果使用 if-elif-else 结构,代码将不能正确运行:

1
2
3
4
5
6
7
8
names = ['Zhangshan' , 'Wanger']
if 'Zhangshan' in names:
print("Zhangshan is here!")
elif 'Wanger' in names:
print("Wanger is here!")
elif 'Xiaoming' in names:
print("Xiaoming is here!")
print("All the students are here!")

输出结果如下:

1
2
Zhangshan is here!
All the students are here!

总之,如果我们只想执行一个代码块,就使用 if-elif-else 结构;如果要运行多个代码块,就必须使用一系列独立的 if 语句!

- 3.5 使用 if 语句处理列表

- 3.5.1 检查特殊元素

对3.4例子改版,加入姓名 ‘Xiaoming’,当检索到Xiaoming时告诉他,他妈妈叫他回家吃饭

1
2
3
4
5
6
7
names = ['Zhangshan' , 'Wanger' , 'Xiaoming']
for name in names:
if name == 'Xiaoming':
print("Xiaoming,Your mother told you to go home for dinner!")
else:
print(name +"is here!")
print("All the students are here!")

输出结果如下:

1
2
3
4
Zhangshanis here!
Wangeris here!
Xiaoming,Your mother told you to go home for dinner!
All the students are here!

- 3.5.2 确定列表不是空的

在检索姓名前检查姓名是否为空,不为空则打印出所有姓名,为空则提示没有姓名:

1
2
3
4
5
6
7
names = []
if names:
for name in names:
print(name +" is here!")
print("All the students are here!")
else:
print("There is no students!")

输出结果如下:

1
There is no students!
在if语句中将列表名用在条件表达式中时,Python将在列表至少包含一个元素时返回Ture,并在列表为空时返回False

- 3.5.3 使用多个列表

两个列表names_1和names_2,要求输出既在names_2中又在names_1中的元素:

1
2
3
4
5
6
names_1 = ['Zhangshan' , 'Liyang'  , 'Wanger' , 'Tangyang' , 'Xiaoming']
names_2 = ['Liyang' , 'Zhangwei' , 'Tangyang']
for names in names_2:
if names in names_1:
print(names +" is here!")
print("All the students are here!")

输出结果如下:

1
2
3
Liyang is here!
Tangyang is here!
All the students are here!
]]>
Python if语句
Python3 自学笔记 C03 /2018/10/11/Python3%20%E8%87%AA%E5%AD%A6%E7%AC%94%E8%AE%B0C03/
Python3 自学笔记第三章【操作列表】

- 3.1遍历整个列表

使用 for 循环来遍历整个列表:

1
2
3
names = ['alice' , 'david' , 'liwei']
for name in names:
print(name)

输出结果如下:

1
2
3
alice
david
liwei

for循环让Python从列表names中取出一个名字,并将其储存在变量name中,最后 让Python打印前面储存到变量name中的名字,对于列表中的每个名字,Python都将 重复执行后两行代码,将列表names中的每个名字都打印出来

- 3.1.1在for循环中执行更多的操作

在for循环中,可对每个元素执行任何操作,下面对前面的示例进行扩展:

例一:

1
2
3
names = ['alice' , 'david' , 'liwei']
for name in names:
print(name.title() + ", that was a good man!")

输出结果如下:

1
2
3
Alice, that was a good man!
David, that was a good man!
Liwei, that was a good man!

例二:

1
2
3
4
5
names = ['alice' , 'david' , 'liwei']
for name in names:
print(name.title() + ", that was a good man!")
print("I can't wait to see you again," + name.title() + ".\n")
print("Nice to meet you!")

输出结果如下:

1
2
3
4
5
6
7
8
9
10
Alice, that was a good man!
I can't wait to see you again,Alice.

David, that was a good man!
I can't wait to see you again,David.

Liwei, that was a good man!
I can't wait to see you again,Liwei.

Nice to meet you!

- 3.2 range()函数

Python使用range()函数能够轻松地生成一系列的数字

Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表;

Python3 list() 函数是对象迭代器,可以把range()返回的可迭代对象转为一个列表,返回的变量类型为列表;

Python2 range() 函数返回的是列表

例一:

1
2
for i in range(1,5):
print(i)

输出结果如下:

1
2
3
4
1
2
3
4

例二:

1
2
for i in range(5):
print(i)

输出结果如下:

1
2
3
4
5
0
1
2
3
4

例三:

1
2
3
4
5
6
7
8
9
10
11
12
>>> list(range(5))
[0, 1, 2, 3, 4]
>>> list(range(0))
[]
>>>list(range(0, 30, 5))
[0, 5, 10, 15, 20, 25]
>>> list(range(0, 10, 2))
[0, 2, 4, 6, 8]
>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> list(range(1, 0))
[]

例四:

1
2
3
4
5
squares = []
for value in range(1,11):
square = value ** 2
squares.append(square)
print(squares)

输出结果如下:

1
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

- 3.2.1 对数字列表执行简单的统计计算

1
2
3
4
5
6
7
>>> digits = [1, 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0]
>>> min(digits)
0
>>>max(digits)
9
>>>sum(digits)
45

- 3.2.2 列表解析

列表解析能够让比如3.2中的例四更加简化,只需要一行代码就能生成这样的列表,列表解析将for循环和创建新元素的代码合并成一行,并自动附加新元素:

1
2
squares = [value ** 2 for value in range(1,11)]
print(squares)

在这个示例中,for循环为for value in range(1,11),它将值1~10提供给表达式value ** 2
输出结果如下:

1
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

- 3.3 使用列表的一部分

处理列表的部分元素——Python称之为切片

- 3.3.1 切片

1
2
3
4
5
6
7
8
9
10
11
list = ['a','b','c','d','e','f']
print(list[:]) #省略全部,代表截取全部内容,可以用来将一个列表拷给另一个列表
print(list[:3]) #省略起始位置的索引,默认起始位置从头开始,结束位置索引为2
print(list[3:]) #省略结束位置的索引,默认结束位置为最后一个,开始位置索引为3
print(list[1:4]) #开始位置索引为1,结束位置索引为3,顾头不顾尾
print(list[4:1]) #从左到右索引,因此为空值
print(list[-1:-3]) #从左到右索引,因此为空值
print(list[-3:-1]) #开始位置索引为倒数第三个,结束位置索引为倒数第二个
print(list[1:5:2]) #开始位置索引为1,结束位置索引为4,间隔2
print(list[5:1:-1]) #反向取值,开始位置索引为5,结束位置索引为2
print(list[::-1]) #反向取值,反向输出列表

- 3.3.2 遍历列表

1
2
3
4
players = ['charles' , 'martina' , 'michael' , 'florence' , 'eli']
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())

输出结果如下:

1
2
3
4
Here are the first three players on my team:
Charles
Martina
Michael

- 3.3.3 复制列表

要复制列表,可以创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:]),这让Python创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个列表:

1
2
3
4
5
6
my_foods = ['pizza' , 'falafel' , 'carrot cake']
friend_foods = my_foods[:]
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)

输出结果如下:

1
2
3
4
5
My favorite foods are:
['pizza', 'falafel', 'carrot cake']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake']

为核实我们的确有两个列表,下面在每个列表中都添加一种食品,并核实每个列表都记录了相应人员喜欢的食品:

1
2
3
4
5
6
7
8
9
10
my_foods = ['pizza' , 'falafel' , 'carrot cake']
friend_foods = my_foods[:]

my_foods.append('cannoli')
friend_foods.append('ice cream')

print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)

输出结果如下:

1
2
3
4
5
My favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake', 'ice cream']

输出结果表明,’cannoli’包含在我喜欢的食品列表中,而’ice cream’没有;’ice cream’包含在我朋友喜欢的食品中,而’cannoli’没有,假如我们只是简单的将my_foods赋给friend_foods,就不能得到两个列表。下面是错误示例:

1
2
3
4
5
6
7
8
9
10
my_foods = ['pizza' , 'falafel' , 'carrot cake']
friend_foods = my_foods #错误写法

my_foods.append('cannoli')
friend_foods.append('ice cream')

print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)

错误示例输出结果如下:

1
2
3
4
5
My favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

- 3.4 元组

Python将不能修改的值称为不可变的,而不可变的列表被称为元组

- 3.4.1 定义元组

元组看起来就像是列表,但元组使用圆括号而不是方括号来标识,定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样:

1
2
3
dimensions = (200,50)
print(dimensions[0])
print(dimensions[1])

输出结果如下:

1
2
200
50

如果尝试修改元组中元素的值,将会导致Python返回类型错误消息,由于试图修改元组的操作是被禁止的,因此Python指出不能给元组的元素赋值:

1
2
dimensions = (200,50)
dimensions[0] = 300

将会报错:

1
2
3
4
Traceback (most recent call last):
File "dimensions.py", line 2, in <module>
dimensions[0] = 300
TypeError: 'tuple' object does not support item assignment

- 3.4.2 遍历元组中所有的值

像列表一样,元组也可以使用for循环来遍历元组中的所有值:

例一:

1
2
3
dimensions = (200,100,50,6)
for dimension in dimensions:
print(dimension)

输出结果如下:

1
2
3
4
200
100
50
6

例二:

1
2
3
dimensions = (200,100,50,6)
for dimension in dimensions[:3]:
print(dimension)

输出结果如下:

1
2
3
200
100
50

- 3.4.3 修改元组变量

虽然不能修改元组元素,但是可以给储存元组的变量赋值:

1
2
3
4
5
6
7
8
9
dimensions = (200,50)
print("Original dimensions:")
for dimension in dimensions:
print(dimension)

dimensions = (400,100)
print("\nModified dimensions:")
for dimension in dimensions:
print(dimension)

输出结果如下:

1
2
3
4
5
6
7
Original dimensions:
200
50

Modified dimensions:
400
100

我们首先定义了一个元组,并将其储存的尺寸打印了出来;然后将一个新元组储存到变量dimensions中,打印新的尺寸;相比于列表,元组是更简单的数据结构。如果需要储存的一组值在程序的整个生命周期内都不变,可使用元组

]]>
Python 操作列表
Python3 自学笔记 C02 /2018/09/15/Python3%20%E8%87%AA%E5%AD%A6%E7%AC%94%E8%AE%B0C02/
Python3 自学笔记第二章【列表】

- 2.1列表是什么

列表由一系列按特定顺序的元素组成,在 Python 中用方括号( [ ] )来表示列表,并用逗号来分隔其中的元素,例:

1
2
3
4
5
list1 = ['a','b','c','d','e','f']
list2 = ['abc', 'xyz', 2018, 2020]
list3 = [1, 2, 3, 4, 5 ,6]
list4 = ["a", "b", "c", "d"]
print(list1, list2, list3 ,list4)

输出结果如下:

1
['a', 'b', 'c', 'd', 'e', 'f'] ['abc', 'xyz', 2018, 2020] [1, 2, 3, 4, 5, 6] ['a', 'b', 'c', 'd']

- 2.1.1访问列表元素

列表是有序集合,因此要访问列表的元素,只需要将该元素的位置或索引告诉Python即可,注意:在Python中的第一个列表元素的索引为0,而不是1

1
2
3
4
5
list = ['a','b','c','d','e','f']
print(list[0])
print(list[3])
print(list[-1]) #Python为访问最后一个列表元素提供了一种特殊语法,通过将索引指定为-1,可以让Python返回最后一个列表元素
print(list[-3])

输出结果如下:

1
2
3
4
a
d
f
d

- 2.1.2列表切片

1
2
3
4
5
6
7
8
9
10
11
list = ['a','b','c','d','e','f']
print(list[:]) #省略全部,代表截取全部内容,可以用来将一个列表拷给另一个列表
print(list[:3]) #省略起始位置的索引,默认起始位置从头开始,结束位置索引为2
print(list[3:]) #省略结束位置的索引,默认结束位置为最后一个,开始位置索引为3
print(list[1:4]) #开始位置索引为1,结束位置索引为3,顾头不顾尾
print(list[4:1]) #从左到右索引,因此为空值
print(list[-1:-3]) #从左到右索引,因此为空值
print(list[-3:-1]) #开始位置索引为倒数第三个,结束位置索引为倒数第二个
print(list[1:5:2]) #开始位置索引为1,结束位置索引为4,间隔2
print(list[5:1:-1]) #反向取值,开始位置索引为5,结束位置索引为2
print(list[::-1]) #反向取值,反向输出列表

输出结果如下:

1
2
3
4
5
6
7
8
9
10
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c']
['d', 'e', 'f']
['b', 'c', 'd']
[]
[]
['d', 'e']
['b', 'd']
['f', 'e', 'd', 'c']
['f', 'e', 'd', 'c', 'b', 'a']

- 2.1.3使用列表中的各个值

可像使用其他变量一样使用列表中的各个值,例如,我们可以使用拼接根据列表中的值来创建消息:

1
2
3
list = ['python', 'c', 'c++', 'java', 'php']
message = "My favorite language is " + list[0].title() + "!"
print(message)

输出结果如下:

1
My favorite language is Python!

- 2.1.4修改元素

修改列表元素的语法与访问列表元素的语法类似,要修改列表元素,可指定列表名和要修改的元素的索引,再次指定该元素的新值:

1
2
3
4
names = ['zhangsan', 'lishi', 'wanger', 'liming', 'xiaowang']
print(names)
names[1] = 'lifang'
print(names)

输出结果如下:

1
2
['zhangsan', 'lishi', 'wanger', 'liming', 'xiaowang']
['zhangsan', 'lifang', 'wanger', 'liming', 'xiaowang']

- 2.1.5添加元素

- 使用方法 append() 在列表末尾添加元素
1
2
3
4
list = ['a', 'b', 'c', 'd', 'e', 'f']
print(list)
list.append('g')
print(list)


输出结果如下:

1
2
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'd', 'e', 'f', 'g']


- 使用方法 insert() 在列表指定位置添加元素
1
2
3
4
list = ['a', 'b', 'c', 'd', 'e', 'f']
print(list)
list.insert(2,"h") #其中括号里的数字表示要插入的位置,此后面的元素将右移一个位置
print(list)

输出结果如下:

1
2
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'h', 'c', 'd', 'e', 'f', 'g']

- 2.1.6删除元素

- 使用 del 语句删除元素
1
2
3
4
list = ['a', 'b', 'c', 'd', 'e', 'f']
print(list)
del list[3]
print(list)

输出结果如下:

1
2
list = ['a', 'b', 'c', 'd', 'e', 'f']
list = ['a', 'b', 'c', 'e', 'f']
- 使用方法 pop() 删除最后一个元素
方法 pop() 可以删除列表末尾的元素,并让你能够接着使用它。术语弹出(pop)源自这样的类比:列表就像是一个栈,而删除列表末尾的元素就相当于弹出栈顶元素:

1
2
3
4
5
list = ['a', 'b', 'c', 'd', 'e', 'f']
print(list)
new_list = list.pop()
print(list)
print(new_list)


输出结果如下:

1
2
3
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'd', 'e']
f


- 使用方法 pop() 删除任意位置元素
可以使用 pop() 来删除列表中任何位置的元素,只需要在括号中指定要删除的元素的索引即可:

1
2
3
4
5
list = ['a', 'b', 'c', 'd', 'e', 'f']
print(list)
new_list = list.pop(1)
print(list)
print(new_list)


输出结果如下:

1
2
3
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'c', 'd', 'e', 'f']
b


- 使用方法 remove() 删除未知位置元素
当我们不知道元素的位置,只知道元素的值的时候,就可以使用方法 remove()

1
2
3
4
list = ['a', 'b', 'c', 'd', 'e', 'f']
print(list)
list.remove('d')
print(list)


输出结果如下:

1
2
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'e', 'f']


# - 2.1.7使用方法 index() 查找指定元素位置
1
2
list = ["a", "b", "c", "d", "e", "a"]
print(list.index('c'))

输出结果如下:

1
2

- 2.1.8使用方法 count() 统计指定元素数量

1
2
list = ["a", "b", "c", "d", "e", "a"]
print(list.count('a'))

输出结果如下:

1
2

- 2.1.9清空列表

1
2
3
list = ["a", "b", "c", "d", "e", "a"]
list.clear()
print(list)

输出结果如下:

1
[]

- 2.2组织列表

在创建的列表中,元素的排列顺序常常是无法预测的,因为我们并非总能控制用户提供数据的顺序。有时候,我们希望保留列表元素最初的排列顺序,而有时候又需要调整排列顺序。Python提供了很多组织列表的方式,可根据具体情况选用

- 2.2.1使用方法 sort() 对列表进行永久排序

使用方法 sort() 可以对列表按照特殊符号,数字,大写字母,小写字母顺序进行永久排序:

1
2
3
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)

输出结果如下:

1
['audi', 'bmw', 'subaru', 'toyota']

还可以按与字母顺序相反的顺序排列列表元素,只需要向 sort() 方法传递参数 reverse = True 就可以了:

1
2
3
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse = True)
print(cars)

输出结果如下:

1
['toyota', 'subaru', 'bmw', 'audi']

- 2.2.2使用函数 sorted() 对列表进行临时排序

要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数sorted()。函数sorted()让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序:

1
2
3
4
5
6
7
8
9
cars = ['bmw', 'audi', 'toyota', 'subaru']
print("Here is the original list:")
print(cars)
print("\nHere is the sorted list:")
print(sorted(cars))
print("\nHere is the sorted reverse list:")
print(sorted(cars, reverse=True))
print("\nHere is the original list again:")
print(cars)

输出结果如下:

1
2
3
4
5
6
7
8
9
10
11
Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']

Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']

Here is the sorted reverse list:
['toyota', 'subaru', 'bmw', 'audi']

Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']

- 2.2.3使用方法 reverse() 对列表进行反向排序

要反转列表元素的排列顺序,可使用方法 reverse()

1
2
3
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.reverse()
print(cars)

输出结果如下:

1
['subaru', 'toyota', 'audi', 'bmw']

- 2.2.4确定列表的长度

使用函数 len() 可以快速获悉列表的长度:

1
2
3
>>>cars = ['bmw', 'audi', 'toyota', 'subaru']
>>>len(cars)
4

- 2.2.5合并列表

- 使用方法 extend() 合并列表
1
2
3
4
5
list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c', 'd']
list1.extend(list2) #将列表list2添加到list1当中去
print(list1)
print(list2)

输出结果如下:

1
2
[1, 2, 3, 4, 'a', 'b', 'c', 'd']
['a', 'b', 'c', 'd']
- 使用 “+” 号合并列表
1
2
3
4
list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c', 'd']
print(list1 + list2)
print(list2 + list1)

输出结果如下:

1
2
[1, 2, 3, 4, 'a', 'b', 'c', 'd']
['a', 'b', 'c', 'd', 1, 2, 3, 4]
- 使用切片合并列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c', 'd']
list1[len(list1) : len(list1)] = list2 #len(list1)代表要将list2插入list1中的位置
print(list1)

list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c', 'd']
list1[0 :0] = list2
print(list1)

list1 = [1, 2, 3, 4]
list2 = ['a', 'b', 'c', 'd']
list1[1:1] = list2
print(list1)

输出结果如下:

1
2
3
[1, 2, 3, 4, 'a', 'b', 'c', 'd']
['a', 'b', 'c', 'd', 1, 2, 3, 4]
[1, 'a', 'b', 'c', 'd', 2, 3, 4]
]]>
Python 列表
Python3 自学笔记 C01 /2018/09/10/Python3%20%E8%87%AA%E5%AD%A6%E7%AC%94%E8%AE%B0C01/
Python3 自学笔记第一章【变量和简单数据类型】

- 1.1变量的命名和使用

变量名只能包含字母、数字和下划线。变量名可以字母或者下划线打头,但不能以数字开头,例如,可以将变量命名为message_1,但不能将其命名为1_message

变量名不能包含空格,但可使用下划线来分割其中的单词,例如,变量名greeting_message可行,但变量名greeting message会引发错误

不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,如print

变量名应既简短又具有描述性,例如,name比n好,student_name比s_n好,name_length比length_of_persons_name好

慎用小写字母l和大写字母O,因为它们可能被人看错成数字1和0

- 1.2字符串

字符串就是一系列字符,在Python中,用引号括起来的都是字符串,其中的引号可以是单引号也可以双引号:

1
2
"This is a string."
'This is also a string.'

这种灵活性让我们能够在字符串中包含引号和撇号:

1
2
3
'I told my friend,"Python is my favorite language!"'
"The language 'Python' is named er Monty Python,not the snake."
"One of Python's strengths is i diverse and supportive community."

- 1.2.1使用方法修改字符串的大小写

三种处理方法如下:

1
2
3
title()     #将字符串每个单词的首字母都改为大写
upper() #将字符串的每个字母都改为大写
lower() #将字符串的每个字母都改为小写

例如:

1
2
3
4
message = "I love you!"
print(name.title())
print(name.upper())
print(name.lower())

输出结果如下:

1
2
3
I Love You!
I LOVE YOU!
i love you!

- 1.2.2合并(拼接)字符串

Python使用加号(+)来合并字符串,举例说明:

1
2
3
4
5
first_name = "I"
second_name = "love"
third_name = "python"
full_name = first_name + " " + second_name + " " + third_time
print(full_name.title() + "!")

输出结果如下:

1
I Love Python!

- 1.2.3使用制表符或换行符来添加空白

添加横向制表符:

1
2
>>>print("\tPython")
Python

添加换行符:

1
2
3
4
5
>>>print("C\nC++\nPython\nJavaScript")
C
C++
Python
JavaScript
附表:Python转义符



- 1.2.4删除空白

在Python中可用 lstrip()、rstrip()、strip() 分别删除字符串开头、结尾、全部的空白,举例说明:

1
2
3
4
5
6
7
8
9
>>>message = ' python '
>>>message
' python '
>>>message.lstrip()
'python '
>>>message.rstrip()
' python'
>>>message.strip()
'python'

如果要永久删除字符串中的空白,必须将删除操作的结果存回到变量中:

1
2
3
4
>>>message = ' python '
>>>message = message.strip()
>>>message
'python'

- 1.3数字

在编程中,经常使用数字来记录游戏得分、表示可视化数据、储存Web应用信息等。Python根据数字的用法以不同的方式处理它们

- 1.3.1整数

在Python中,可对整数执行加(+)减(-)乘(*)除(/)乘方(**)运算,同时也支持运算次序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>>3 + 2
5
>>>3 - 2
1
>>>3 * 2
6
>>>3 \ 2
1.5
>>>3 ** 2
9
>>>3 ** 3
27
>>>2 + 3 * 4
14
>>>(2 + 3) * 4
20

- 1.3.2浮点数

Python将带小数点的数字都称为浮点数:

1
2
3
4
>>>0.1 + 0.1
0.2
>>>2 * 0.2
0.4

需要注意的是,结果包含的小数位可能是不确定的,就现在而言,暂时忽略多余的小数位即可:

1
2
3
4
>>>0.2 + 0.1
0.30000000000000004
>>>3 * 0.1
0.30000000000000004

- 1.3.3使用函数 str() 避免错误

错误例子:

1
2
3
age = 23
message = "Happy " + age + "rd Birthday!"
print(message)

运行时会报错:

1
2
3
4
Traceback (most recent call last):
File "birthday.py", line 2, in <module>
message = "Happy " + age + "rd Birthday!"
TypeError: must be str, not int

这是一个类型错误,意味着Python无法识别我们使用的信息。在这个例子中,Python发现我们使用了一个值为整数(int)的变量,但它不知道该如何解读这个值,这个变量表示的可能是数值23,也可能是字符2和3。像上面这样的字符串中使用整数时,需要显式地指出我们希望Python将这个整数用作字符串。为此,可调用函数 str(),它让Python将非字符串值表示为字符串:

1
2
3
age = 23
message = "Happy " + str(age) + "rd Birthday!"
print(message)

输出结果如下:

1
Happy 23rd Birthday!

- 1.4注释

注释让我们能够使用自然语言在程序中添加说明,Python中注释有三种方法:

1
2
3
4
5
6
7
8
9
print("Hello Python!")

#这是单行注释

'''这是多行注释
这是多行注释'''

"""这也是多行注释
这也是多行注释"""
]]>
Python 数据类型 变量
VMware Pro 14 安装 Ubuntu 18.04 详细教程 /2018/09/09/VMware%20Pro%2014%20%E5%AE%89%E8%A3%85%20Ubuntu%2018.04%20%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B/

1.下载安装 VMware Workstation Pro 14

进入 VMware 官网或者在软件商店下载最新版VMware虚拟机并安装

2.下载 Ubuntu 18.04 系统

进入 Ubuntu 官网,下载最新版 Ubuntu 系统镜像


3.在 VMware 中创建虚拟机

打开安装好的 VMware Workstation Pro 14,选择创建新的虚拟机

在新建虚拟机向导中选择自定义(高级)

默认直接下一步,直到出现下图,再选择稍后安装操作系统

选择客户机操作系统为 Linux ,如果你电脑是32位就选择 Ubuntu 版本,64位就选择 Ubuntu 64 位版本

更改虚拟机名称及存放位置

为虚拟机指定处理器数量,默认即可

为虚拟机分配内存,太大了可能会导致卡顿,太小了也不好,推荐内存大小即可

以下均选择默认即可



选择创建新虚拟磁盘

选择将虚拟磁盘储存为单个文件

默认下一步

点击完成

此时我们就可以在虚拟机左侧“我的计算机”下面看到刚刚创建的虚拟机 Ubuntu 64 位,单击 Ubuntu 64 位,选择“编辑虚拟机设置”, 再选择“CD/DVD(SATA)”,选择“使用ISO映像文件”,点击“浏览”,找到先前我们下载好的 Ubuntu 64 位镜像文件,点击“确定”

4.在虚拟机上安装 Ubuntu 系统

单击 Ubuntu 64 位,选择“开启此虚拟机”

来到欢迎界面,选择好语言,点击“安装 Ubuntu”

选择键盘布局为“汉语”

更新和其他软件默认选择即可

安装类型选择“清除整个磁盘并安装 Ubuntu”,PS: 因为我们是新安装的系统,且在虚拟机中,所以可以选择清除整个磁盘,这个操作不会清除你原来电脑里面的东西

地区随便,在中国就行,默认即可

之后设置计算机名,密码

点击继续稍等一会就安装完成啦


安装过程中可能会出现的一些问题


1.在虚拟机上安装 Ubuntu 系统的过程中卡死不动

解决方法:关闭网络,重新安装即可


2.Ubuntu 不能全屏显示

解决方法:
方法①:安装 open-vm-tools:

1
sudo apt-get install open-vm-tools

然后执行:

1
sudo apt-get install open-vm*

重启即可全屏显示

方法②:在终端输入xrandr,并回车,我们就可以看到很多可以修改的分辨率,选择好分辨率后,比如我们要修改分辨率为 1920x1440 ,则在终端输入 xrandr -s 1920x1440,回车即可,注意 1920x1440 中间是小写字母 x,本人亲测此方法并不是很完美,不能完全适应屏幕

方法③:安装 VMware Tools:
1、进入 Ubuntu 系统后,点击虚拟机上的【虚拟机】—>【安装 VMware Tools】,回到桌面即可看到一个 VMware Tools 的 图标
2、复制 VMwareTools-10.0.10-4301679.tar.gz(版本根据自己的实际情况而定)到 home 目录下, 用命令 tar -xzvf VMwareTools-10.0.10-4301679.tar.gz 进行解压
3、解压后 cd vmware_tools_distrib,打开终端
4、输入“sudo ./vmware-install.pl”,输入用户密码后开始安装
5、接下来会有很多地方需要你按 Enter或者 Yes
6、当你看到出现 —the vmware team 的字样后就可以关闭窗口了,此时窗口就会自动全屏了,如果没有全屏,重启过后就可以了
7、若还没有全屏显示,则将虚拟机的【查看】—>【自动调整大小】—>【自适应客户机】,都选上,即可实现全屏

]]>
实用教程 VMware Ubuntu
主流 Markdown 编辑器推荐 /2018/08/29/%E4%B8%BB%E6%B5%81%20Markdown%20%E7%BC%96%E8%BE%91%E5%99%A8%E6%8E%A8%E8%8D%90/
Markdown ,2004年由 John Gruberis 设计和开发,是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,以下将介绍目前比较流行的一些 Markdown 编辑器(排名不分先后)

- MarkdownPad

目前分为 MarkdownPad2 和 MarkdownPad Pro 版本,后者收费,我们使用前者足矣,用户可以通过键盘快捷键和工具栏按钮来使用或者移除 Markdown 各种语法格式,支持自定义配色方案、字体、大小和布局 、即时HTML预览、HTML和PDF导出,被很多人称赞为 Windows 平台最好用的 Markdown 编辑器,实用性强,仅支持 Windows 系统,个人觉得在 Windows 10 系统上界面并不是很好看,有时候添加音乐什么的,资源多了,实时预览会显示资源加载失败,点击此处访问 MarkdownPad 官网

MarkdownPad 2


- BookPad

无意间在 Microsoft Store 上发现的,完美搭配 Win10 系统,界面非常简洁漂亮,2017年9月份发布,大小30.82 MB,官方网站:https://sosfos.wordpress.com/ ,收费13人民币,可免费使用7天,各种功能应有尽有,和其他编辑器不相上下,本来想着百度百度看看有没有破解版,结果全网看不见 BookPad 的影子,估计是新出来的还不为人所知吧,可以直接在 Microsoft Store 搜索下载,或者点击链接获取:https://www.microsoft.com/store/apps/9N6P5ZH2SJSX

BookPad

BookPad


- 小书匠

分为免费版和收费版,收费版¥20/年,其实免费版的功能已经足够强大了,多种编辑模式、多种主题选择、多种编辑器实现、丰富的语法支持、第三方同步、强大的文件管理功能,让人使用一次就爱上了它,支持 Windows 和 Web,推荐使用,点击此处访问小书匠官网

小书匠

小书匠


- Sublime Text 3

Sublime Text 3 是基于 Vim 开发的跨平台代码编辑器,收费80美元,好像可以免费试用,支持 OS X、Windows、Ubuntu 等 UNIX 及 Linux 操作系统,由于其功能的多样性而广受好评,界面简约大方,定位专业,原生支持的编程语言就多达十几种,通过第三方插件,还能实现更多语法的支持,其中就包括 Markdown ,但也有个缺点,就是不能实时预览,但是用户可以通过 Markdown Preview 的插件实现对 Markdown 的预览,具体教程请点击此处查看,点击此处访问 Sublime Text 官网

SublimeText


- Mou

Mou 是一款由国人独立开发者罗晨开发的实时预览型 Markdown 编辑器,仅支持 OS X操作系统,是目前同类应用中对汉字兼容性最好的作品,也是目前最好用的免费 Markdown 编辑器,提供语法高亮、在线预览、同步滚动、全屏模式,支持自定保存、自动匹配,允许自定义主题,支持 CSS,HTML 和 PDF 导出等功能,点击此处访问 Mou 官网

Mou


- Atom

Atom 是 Github 专门为程序员推出的一个跨平台文本编辑器,具有简洁和直观的图形用户界面,并有很多有趣的特点:支持CSS,HTML,JavaScript等网页编程语言,当然也支持 Markdown ,支持宏,自动完成分屏功能,集成了文件管理器,点击此处访问 Atom 官网

Atom


- Smark

国人编写的开源软件,Windows / Linux 等主流系统跨平台支持,完美支持 LaTex 数学公式、脚注、尾注等,支持使用本地 MathJax 调用,不需要在线访问 MathJax CDN,用户可配置的 Markdown 语法高亮显示,美观整洁,多种格式文件导出支持,简洁友好的界面布局,完备的各类快捷键,能极大地提高工作效率,点击此处访问 Smark 官网

Smark


- Haroopad

Haroopad 覆盖三大主流桌面系统,支持 Windows、OS X 和 Linux,多种主题样式供你选择,语法标亮支持 54 种编程语言,该工具重点推荐 Ubuntu/Linux 用户使用,点击此处访问 Haroopad 官网

Haroopad


- Typora

Typora 同样支持 Windows、OS X 和 Linux,Typora 支持即时渲染技术,这也是与其他 Markdown 编辑器最显著的区别,支持数学编辑,可与 Word 直接格式转换,在 Pandoc 的支持下进行多种文档格式转换,Typora 适合那些对码字手速和排版顺畅度有要求的人群,譬如码农、网站小编等,点击此处访问 Typora 官网

Typora


- CuteMarkEd

CuteMarkEd 是一个基于qt5的跨平台的 Markdown 编辑器,开源的, 提供实时 HTML 预览、数学表达式、源码高亮和PDF导出,点击此处 访问 CuteMarkEd 官网

CuteMarkEd


- MarkPad

MarkPad 是款开源的 Markdown 编辑器,与 Window 8 风格和谐友好的界面,可以直接在你的博客或者 GitHub 中打开、保存文档,直接将图片粘贴到 Markdown 文档中,点击此处访问 MarkPad 官网

MarkPad


- Cmd Markdown

作业部落出品,是一款不错的工具和博客平台兼顾的产品,同时支持 Linux、Mac 和 Windows 操作系统,此外还提供 Web 在线创作,社交化批注、智能云同步,最简单的方法,满足多种写作需要,点击此处访问 Cmd Markdown 官网

Cmd Markdown


- FarBox

同样是一款不错的 Markdown 编辑器和博客平台兼顾的产品,让用户通过Dropbox(现在默认是自己的同步服务器)直接建立个人网站。FarBox编辑器免费,同时支持 Linux、Mac 和 Windows 操作系统,Farbox服务可以免费试用,在本地编辑器内写作自动同步发布在个人博客,对于希望有个人博客但却不愿折腾的小白来说,是个不错的选择,点击此处访问 FarBox 官网

FarBox


- Miu

Miu 是一款 Windows 下的 Markdown 编辑器,支持 Markdown 高亮、代码高亮、即时预览,以及可以快速发布到 Github Gist,小众软件,界面美观,已经找不到官网了,小众软件网有提供百度云下载,Miu 下载地址

Miu


- MacDown

MacDown 引用了许多 Mou 的设计方式,仅支持 Mac ,开源免费,点击此处访问 MacDown 官网

MacDown


- Ulysses

一款由国外开发商 The Soulmen 制作的 Markdown 编辑器。与其它同类应用相比,Ulysses 最大的不同在于,它能根据内置的文件管理器,以及与 iCloud 云服务器的实时同步方案,达到最快捷的文章整理效率,支持OS X , iPad,26人民币每月,14天免费试用,点击此处访问 Ulysses 官网

Ulysses


- Byword

一款轻量级的 Markdown 编辑器,支持Mac,iPhone和iPad,界面极简,功能强大,貌似要付费使用,点击此处 访问 Byword 官网

Byword


- Visual Studio Code

Visual Studio Code 是微软推出一款轻量级的文本编辑工具,类似于 Sublime,它已经默认集成 Markdown 文档编辑插件,原生就支持高亮 Markdown 的语法,但想要实时预览还需要选择 Markdown: Open Preview to the Side 命令实现,相关教程请点击此处点击此处 访问 Visual Studio Code 官网

Visual Studio Code


- Marxico

Marxico 中文名马克飞象,提供桌面客户端以及离线 Chrome App,支持移动端 Web,可以直接把文本存到印象笔记,点击此处访问 Marxico,点击此处访问 马克飞象

马克飞象


- MaHua

一个在线编辑 Markdown 文档的编辑器,小众软件,VIM 快捷键支持,完美兼容 Github 的 Markdown 语法,界面稍许简陋,点击此处访问 MaHua

MaHua


- Dillinger

来自国外的 Markdown 编辑器,漂亮强大,支持md、 html、pdf 文件导出,支持Dropbox、Github、Google Drive、Onedrive 一键保存,点击此处访问 Dillinger

Dillinger


- 简书

简书是一个优质的创作社区,你可以在线创作并发表到社区,是国内优质原创内容输出平台,简书从一开始就已经支持 Markdown 和富文本编辑,是一个为专门为作者打造的平台,点击此处访问简书官网

简书


要细数 Markdown 编辑器的话,可能永远也数不尽,但最有质量的也就那么几个,而且每个人的看法也不同,正所谓萝卜白菜各有所爱,什么编辑器不是最重要的,重要的是我们能写出优质的文章,不断学习进步!不断提升自我!

参考资料:
《好用的Markdown编辑器一览》(By:月光)
《10款流行的Markdown编辑器,总有一款适合你》(By:xiaoxiao_engineer)
《解决作者们的焦虑:7 款优秀 Markdown 编辑工具推荐》(By:JailJT)

]]>
实用教程 Markdown 编辑器
Hexo 博客主题个性化 /2018/08/27/Hexo%20%E5%8D%9A%E5%AE%A2%E4%B8%BB%E9%A2%98%E4%B8%AA%E6%80%A7%E5%8C%96/
本文将讲述一些博客主题的美化、实用功能的添加,不同主题可能方法有些不同(本文以作者 luuman 的 spfk 主题为例)

– 添加评论系统


主流的评论系统有很多,比如:网易云跟帖、多说、友言、畅言、来必力(LiveRe)、Disqus、Valine、Gitment等等,目前网易云跟帖、多说、友言都已经关闭了,还有些可能需要翻墙,比较麻烦,百度了一下,最后还是选择了来必力评论系统

进入来必力官网,注册一个账号(注册时可能需要翻墙)

注册完毕之后,登录,进入安装页面,选择 City 免费版安装,安装之后你会得到一段代码

我们打开主题文件下的 _config.yml 文件,添加如下代码:

\themes\hexo-theme-spfk\layout\_partial\comments 文件夹下新建一个 livere.ejs 的文件,在里面填写来必力提供的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- 来必力City版安装代码 -->
<div id="lv-container" data-id="city" data-uid="这里是你的uid">
<script type="text/javascript">
(function(d, s) {
var j, e = d.getElementsByTagName(s)[0];

if (typeof LivereTower === 'function') { return; }

j = d.createElement(s);
j.src = 'https://cdn-city.livere.com/js/embed.dist.js';
j.async = true;

e.parentNode.insertBefore(j, e);
})(document, 'script');
</script>
<noscript>为正常使用来必力评论功能请激活JavaScript</noscript>
</div>
<!-- City版安装代码已完成 -->

打开 \themes\hexo-theme-spfk\layout\_partial\article.ejs 文件,在适当位置添加如下红框中的代码:

完成以上操作之后,我们就可以使用来必力评论系统了


– 添加卡通人物

我在逛别人博客的时候偶然发现右下角居然有一个萌萌的卡通人物,还能根据你鼠标位置摇头,瞬间被吸引到了,赶紧也给自己博客添加一个吧!点击此处进入该项目地址

输入如下命令获取 live2d :

1
$ npm install --save hexo-helper-live2d

输入以下命令,下载相应的模型,将 packagename 更换成模型名称即可,更多模型选择请点击此处,各个模型的预览请访问原作者的博客

1
$ npm install packagename

打开站点目录下的 _config.yml 文件,添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
live2d:
enable: true
scriptFrom: local
model:
use: live2d-widget-model-haruto #模型选择
display:
position: right #模型位置
width: 150 #模型宽度
height: 300 #模型高度
mobile:
show: false #是否在手机端显示

设置好过后我们就拥有了一个卡通人物

– 添加鼠标点击爱心效果

/themes/hexo-theme-spfk/source/js 下新建文件 love.js,在 love.js 文件中添加以下代码:

1
!function(e,t,a){function n(){c(".heart{width: 10px;height: 10px;position: fixed;background: #f00;transform: rotate(45deg);-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);}.heart:after,.heart:before{content: '';width: inherit;height: inherit;background: inherit;border-radius: 50%;-webkit-border-radius: 500%;-moz-border-radius: 50%;position: fixed;}.heart:after{top: -5px;}.heart:before{left: -5px;}"),o(),r()}function r(){for(var e=0;e<d.length;e++)d[e].alpha<=0?(t.body.removeChild(d[e].el),d.splice(e,1)):(d[e].y--,d[e].scale+=.004,d[e].alpha-=.013,d[e].el.style.cssText="left:"+d[e].x+"px;top:"+d[e].y+"px;opacity:"+d[e].alpha+";transform:scale("+d[e].scale+","+d[e].scale+") rotate(45deg);background:"+d[e].color+";z-index:99999");requestAnimationFrame(r)}function o(){var t="function"==typeof e.onclick&&e.onclick;e.onclick=function(e){t&&t(),i(e)}}function i(e){var a=t.createElement("div");a.className="heart",d.push({el:a,x:e.clientX-5,y:e.clientY-5,scale:1,alpha:1,color:s()}),t.body.appendChild(a)}function c(e){var a=t.createElement("style");a.type="text/css";try{a.appendChild(t.createTextNode(e))}catch(t){a.styleSheet.cssText=e}t.getElementsByTagName("head")[0].appendChild(a)}function s(){return"rgb("+~~(255*Math.random())+","+~~(255*Math.random())+","+~~(255*Math.random())+")"}var d=[];e.requestAnimationFrame=function(){return e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)}}(),n()}(window,document);

\themes\hexo-theme-spfk-x\layout\layout.ejs 文件末尾添加以下代码:

1
2
<!-- 页面点击小红心 -->
<script type="text/javascript" src="/js/love.js"></script>

完成以上操作后,当我们点击鼠标的时候就可以看见爱心的特效了

– 添加字数统计和阅读时长

先在博客目录下执行以下命令安装 hexo-wordcount 插件:

1
$ npm i --save hexo-wordcount

之后在 \themes\hexo-theme-spfk-x\layout\_partial\post 目录下创建 word.ejs 文件,在 word.ejs 文件中写入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div style="margin-top:10px;">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-keyboard-o"></i>
<span class="post-meta-item-text"> 字数统计: </span>
<span class="post-count"><%= wordcount(post.content) %></span>
</span>
</span>

<span class="post-time">
&nbsp; | &nbsp;
<span class="post-meta-item-icon">
<i class="fa fa-hourglass-half"></i>
<span class="post-meta-item-text"> 阅读时长: </span>
<span class="post-count"><%= min2read(post.content) %></span>
</span>
</span>
</div>

然后在 \themes\hexo-theme-spfk-x\layout\_partial\article.ejs 中适当位置添加以下代码:

最后在主题目录下的 _config.yml 添加以下配置

1
word_count: true

如果显示的位置不好,可以自行更改其位置,成功配置后的效果如下:

– 添加背景音乐

打开网页版网易云音乐,选择你准备添加的背景音乐,点击生成外链播放器,前提是要有版权,不然是无法生成外链播放器的,复制底下的HTML代码

然后将此代码放到你想要放的地方,比如放在博客的左侧,则打开 \themes\hexo-theme-spfk-x\layout\_partial\left-col.ejs 文件,将复制的HTML代码粘贴进去,再进行适当的位置设置让播放器更美观,其中 auto=1 表示打开网页自动播放音乐,auto=0 表示关闭自动播放音乐

最后效果如下:

– 添加网站运行时间

一个比较好的小功能,可以看见自己的博客运行多久了,时间一天天的增加,成就感也会一天天增加的
在 \themes\hexo-theme-spfk-x\layout\_partial\footer.ejs 文件下添加以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<span id="timeDate">载入天数...</span><span id="times">载入时分秒...</span>
<script>
var now = new Date();
function createtime() {
var grt= new Date("08/10/2018 17:38:00");//在此处修改你的建站时间
now.setTime(now.getTime()+250);
days = (now - grt ) / 1000 / 60 / 60 / 24; dnum = Math.floor(days);
hours = (now - grt ) / 1000 / 60 / 60 - (24 * dnum); hnum = Math.floor(hours);
if(String(hnum).length ==1 ){hnum = "0" + hnum;} minutes = (now - grt ) / 1000 /60 - (24 * 60 * dnum) - (60 * hnum);
mnum = Math.floor(minutes); if(String(mnum).length ==1 ){mnum = "0" + mnum;}
seconds = (now - grt ) / 1000 - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum);
snum = Math.round(seconds); if(String(snum).length ==1 ){snum = "0" + snum;}
document.getElementById("timeDate").innerHTML = "本站已安全运行 "+dnum+" 天 ";
document.getElementById("times").innerHTML = hnum + " 小时 " + mnum + " 分 " + snum + " 秒";
}
setInterval("createtime()",250);
</script>

最后效果如下:

– 添加百度统计

百度统计是百度推出的一款免费的专业网站流量分析工具,能够告诉用户访客是如何找到并浏览用户的网站,在网站上做了些什么,非常有趣,接下来我们把百度统计添加到自己博客当中

访问百度统计首页,注册一个账号后登陆,添加你的博客网站

接着点击代码获取,复制该代码

然后到目录 \Hexo\themes\hexo-theme-spfk\layout\_partial 下新建一个 baidu-analytics.ejs 文件,里面粘贴你刚刚复制的代码

修改主题文件夹下的 _config.yml 文件,将你的key(图中涂掉部分)填写进去:

所有操作完成后可以在百度统计管理页面检查代码是否安装成功,如果代码安装正确,一般20分钟后,可以查看网站分析数据

– 浏览器网页标题恶搞

当用户访问你的博客时点击到了其他网页,我们可以恶搞一下网页标题,呼唤用户回来,首先在目录 \Hexo\themes\hexo-theme-spfk\source\js 下新建一个 FunnyTitle.js 文件,在里面填写如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--浏览器搞笑标题-->
var OriginTitle = document.title;
var titleTime;
document.addEventListener('visibilitychange', function () {
if (document.hidden) {
$('[rel="icon"]').attr('href', "/img/trhx2.png");
document.title = 'ヽ(●-`Д´-)ノ你丑你就走!';
clearTimeout(titleTime);
}
else {
$('[rel="icon"]').attr('href', "/img/trhx2.png");
document.title = 'ヾ(Ő∀Ő3)ノ你帅就回来!' + OriginTitle;
titleTime = setTimeout(function () {
document.title = OriginTitle;
}, 2000);
}
});

然后在 \Hexo\themes\hexo-theme-spfk-x\layout\layout.ejs 文件中添加如下代码:

1
2
<!--浏览器搞笑标题-->
<script type="text/javascript" src="\js\FunnyTitle.js"></script>

再次部署博客后就可以看见标题搞笑的效果了:





# 未完待续…… #



]]>
实用教程 主题个性化 Hexo
Markdown 语法&技巧总结 /2018/08/25/Markdown%20%E8%AF%AD%E6%B3%95&%E6%8A%80%E5%B7%A7%E6%80%BB%E7%BB%93/
在写博客的时候,我们不希望都是千篇一律的没有色彩,多了解一些 Markdown 语法技巧有利于丰富我们的博客,看起来更有 feel !

– 插入图片

车

如果你使用 MarkdownPad 的话就比较方便,可以直接选择插入本地图片或者是网络图片,实质是通过以下代码实现的,小括号里面就是你的图片地址,中括号里面是图片的替代文字,比如上面的图片代码如下:

1
![](https://i.imgur.com/UyEXrBi.jpg)

– 插入音乐

打开网页版网易云音乐,选择你准备插入的音乐,点击生成外链播放器,前提是要有版权,不然是无法生成外链播放器的,复制底下的HTML代码

然后将此HTML代码粘贴到你想要放的地方,可自行调节播放器的大小,其中 auto=1 表示打开网页自动播放音乐,auto=0 表示关闭自动播放音乐,比如See You Again (中英文版) - 罗艺恒这首歌曲代码如下:

1
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=32405683&auto=1&height=66"></iframe>

– 插入视频

高考毕业了我们为下一届的学弟学妹们录制高考加油视频,我担任后期制作,在这里就以该视频为例٩(๑❛ᴗ❛๑)۶,在腾讯视频播放页面找到分享按钮,复制该视频的通用代码(其他视频播放平台也一样),粘贴到文章中对应位置即可,可根据情况调整视频播放器的大小

1
<iframe frameborder="0" width="1040"  height="700" src="https://v.qq.com/txp/iframe/player.html?vid=x0643zvgtf7" allowFullScreen="true"></iframe>




# 未完待续…… #



]]>
实用教程 Markdown 技巧
如何使用 Github Pages 和 Hexo 搭建自己的独立博客 /2018/08/15/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8Github%20Pages%E5%92%8CHexo%E6%90%AD%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%8B%AC%E7%AB%8B%E5%8D%9A%E5%AE%A2/

– 前言

首先感谢您能访问我的博客:TRHX’Blog

这是一篇有关如何使用 Github PagesHexo 搭建属于自己独立博客的详尽教程,本人是软件工程专业本科生,目前只学习了C和C++编程语言,对网站开发的有关知识几乎为零,这也是我搭建好自己的博客之后写的第一篇博客,刚开始搭建博客的时候自己也是网上各种百度,由于自己属于小白那种,历经了千辛万苦才弄好,所以借这个机会写一篇小白真正能看懂的博客搭建教程,教你一步一步走向成功的彼岸!

推荐文章: 《我为什么写博客》 (By 知明所以)
      《为什么你应该(从现在开始就)写博客》 (By 刘未鹏 | Mind Hacks)

– 入门

Github Pages

Github Pages可以被认为是用户编写的、托管在github上的静态网页。使用Github Pages可以为你提供一个免费的服务器,免去了自己搭建服务器和写数据库的麻烦。此外还可以绑定自己的域名。

Hexo

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。

– 安装 Node.js

点击此处访问官网,按需下载相应版本,默认安装可以了



注:本人在安装过程中出现了Warning 1909,无法创建快捷方式,这种情况很少出现,如果在安装过程中也有这种情况请参考百度文库(win10系统实测可行):《Win7安装程序警告1909无法创建快捷方式》


– 安装 Git

点击此处访问官网,按需下载相应版本,默认安装即可

参考资料:《如何在windows下安装GIT》  (By 俊雨廷休)
     《Pro Git(中文版)》


– 检验软件是否安装成功

同时按下 Win 键和 R 键打开运行窗口,输入 cmd ,然后输入以下命令,有相应版本信息显示则安装成功,若不正确可以卸载软件重新安装,此外若安装成功,在桌面右键鼠标,可以看到菜单里多了 Git GUI HereGit Bash Here两个选项,第一个是图形界面的Git操作,另一个是命令行

$ git --version  $ node -v  $ npm -v   


– Hexo 安装

选择一个磁盘,新建一个文件夹,自己重命名文件夹(如:我的文件夹为:E\TRHX_Blog),博客相关文件将储存在此文件夹下,在该文件夹下右键鼠标,点击 Git Bash Here,输入以下 npm 命令即可安装,第一个命令表示安装 hexo,第二个命令表示安装 hexo 部署到 git page 的 deployer,如图所示即为安装成功

$ npm install hexo-cli -g  $ npm install hexo-deployer-git --save  


– Hexo 初始化配置

在刚才新建的文件夹里面再次新建一个 Hexo 文件夹(如:我的文件夹为:E\TRHX_Blog\Hexo),进入该 Hexo 文件夹右键鼠标,点击 Git Bash Here,输入以下命令,如图所示则安装成功

$ hexo init



Hexo 安装完成后,将会在指定文件夹中新建所需要的文件,Hexo 文件夹下的目录如下:




– 本地查看效果

执行以下命令,执行完即可登录 http://localhost:4000/ 查看效果

$ hexo generate  $ hexo server  

显示以下信息说明操作成功:

INFO Hexo is running at http://0.0.0.0:4000/. Press Ctrl+C to stop.

登录 http://localhost:4000/ 查看效果:


– 将博客部署到 Github Pages 上

到目前为止,我们的本地博客就成功搭建了,但是现在我们只能通过本地连接查看博客,我们要做的是让其他人也能够访问我们的博客,这就需要我们将博客部署到Github Pages上

一、注册 Github 账户:点击此处访问 Github 官网,点击 Sign Up 注册账户

二、创建项目代码库:点击 New repository 开始创建,步骤及注意事项见图:



三、配置 SSH 密钥:只有配置好 SSH 密钥后,我们才可以通过 git 操作实现本地代码库与 Github 代码库同步,在你第一次新建的文件夹里面(如:我的文件夹为:E\TRHX_BlogGit Bash Here 输入以下命令:

$ ssh-keygen -t rsa -C "your email@example.com" //引号里面填写你的邮箱地址,比如我的是tanrenhou@126.com

之后会出现:

Generating public/private rsa key pair.  Enter file in which to save the key (/c/Users/you/.ssh/id_rsa):  //到这里可以直接回车将密钥按默认文件进行存储

然后会出现:

Enter passphrase (empty for no passphrase):  //这里是要你输入密码,其实不需要输什么密码,直接回车就行 Enter same passphrase again:  

接下来屏幕会显示:

Your identification has been saved in /c/Users/you/.ssh/id_rsa.  Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.  The key fingerprint is:  这里是各种字母数字组成的字符串,结尾是你的邮箱  The key's randomart image is:  这里也是各种字母数字符号组成的字符串  

运行以下命令,将公钥的内容复制到系统粘贴板上

$ clip < ~/.ssh/id_rsa.pub

四、在 GitHub 账户中添加你的公钥

1.登陆 GitHub,进入 Settings



2.点击 SSH and GPG Keys





3.选择 New SSH key





4.粘贴密钥:





五、测试

输入以下命令:注意:git@github.com不要做任何更改!

$ ssh -T git@github.com

之后会显示:

输入 yes 后会显示:

此时表示设置正确

六、配置 Git 个人信息

Git 会根据用户的名字和邮箱来记录提交,GitHub 也是用这些信息来做权限的处理,输入以下命令进行个人信息的设置,把名称和邮箱替换成你自己的,名字可以不是 GitHub 的昵称,但为了方便记忆,建议与 GitHub 一致

$ git config --global user.name "此处填你的用户名"  $ git config --global user.email  "此处填你的邮箱"

到此为止 SSH Key 配置成功,本机已成功连接到 Github


– 将本地的 Hexo 文件更新到 Github 的库中

一、登录 Github 打开自己的项目 your name.github.io



二、鼠标移到 Clone or download 按钮,选择 Use SSH





三、一键复制地址





四、打开你创建的 Hexo 文件夹(如:E:\TRHX_Blog\Hexo),右键用记事本(或者Notepad++)打开该文件夹下的 _config.yml 文件





五、按下图修改 _config.yml 文件并保存





六、在 Hexo 文件夹下分别执行以下命令

$ hexo g  $ hexo d

或者直接执行

$ hexo g -d

执行完之后会让你输入你的 Github 的账号和密码,如果此时报以下错误,说明你的 deployer 没有安装成功

ERROR Deployer not found: git

需要执行以下命令再安装一次:

npm install hexo-deployer-git --save

再执行 hexo g -d,你的博客就会部署到 Github 上了

七、访问博客

你的博客地址:https://你的用户名.github.io,比如我的是:https://trhx.github.io ,现在每个人都可以通过此链接访问你的博客了


– 如何在博客上发表文章

博客已经成功搭建了,但是我们该怎么写博客呢?

一、新建一个空文章,输入以下命令,会在项目 \Hexo\source\_posts 中生成 文章标题.md 文件,文章标题根据需要命名

$ hexo n "文章标题"

也可以直接在 \Hexo\source\_posts 目录下右键鼠标新建文本文档,改后缀为 .md 即可,这种方法比较方便

二、用编辑器编写文章

md 全称 Markdown, Markdown 是 2004 年由 John Gruberis 设计和开发的纯文本格式的语法,非常的简单实用,常用的标记符号屈指可数,几分钟即可学会, .md 文件可以使用支持 Markdown 语法的编辑器编辑,然后保存文件到 \Hexo\source\_posts 文件夹下即可

推荐 Windows 上使用 MarkdownPad2 编辑器,macOS 上使用 Mou 编辑器,Linux 上使用 Remarkable编辑器,Web 端上使用简书

当我们用编辑器写好文章后,可以使用以下命令将其推送到服务器上

$ hexo g  $ hexo d

或者将两个命令合二为一输入以下命令:

$ hexo d -g 

现在访问你的博客就可以看见写好的文章啦!

参考资料:《10款流行的Markdown编辑器》 (By xiaoxiao_engineer)
     《献给写作者的 Markdown 新手指南》 (By 简书)
     《认识与入门 Markdown》 (By Te_Lee)
     《markdown简明语法》 (By 不如)
     《markdown基本语法》 (By 高鸿祥)
     《Markdown 公式指导手册》 (By Harries)
     
     

– 如何为博客更换自己喜欢的主题

博客也搭建好了,文章也会写了,但是!!!默认的主题并不喜欢怎么办?现在,我们就来为自己的博客更换自己喜欢的主题

点击此处进入 Hexo 官网的主题专栏,我们可以看见有许多的主题供我们选择



我们要做的就是把主题克隆过来,在此我们以主题 Aero-Dual 为例,点进去我们就可以看见该主题作者的博客,鼠标滑到底,我们可以看见 Theme By Levblanc 的字样(其他主题类似),点击作者 Levblanc ,页面就会跳转到该主题所有的相关文件在 Github 上的地址,复制该地址









再打开 Hexo 文件夹下的 themes 目录(如:E:\TRHX_Blog\Hexo\themes),右键 Git Bash Here,输入以下命令:

$ git clone 此处填写你刚才复制的主题地址

比如要安装 Aero-Dual 主题,则输入命令:

$ git clone https://github.com/levblanc/hexo-theme-aero-dual

等待下载完成后即可在 themes 目录下生成 hexo-theme-aero-dual 文件夹,然后打开 Hexo 文件夹下的配置文件 _config.yml ,找到关键字 theme,修改参数为:theme:hexo-theme-aero-dual (其他主题修改成相应名称即可),再次注意冒号后面有一个空格!





返回 Hexo 目录,右键 Git Bash Here ,输入以下命令开始部署主题:

$ hexo g   $ hexo s

此时打开浏览器,访问 http://localhost:4000/ 就可看见我们的主题已经更换了,如果感觉效果满意,我们就可以把它部署到Github上了

打开 Hexo 文件夹,右键 Git Bash Here ,输入以下命令:

$ hexo clean  //该命令的作用是清除缓存,若不输入此命令,服务器有可能更新不了主题$ hexo g -d

此时访问自己的博客即可看见更换后的主题,但我们仍然需要对主题的相关配置进行修改,比如网站标题,图标等等,Hexo 中有两份主要的配置文件,名称都是 _config.yml ,它们均是用于站点配置使用的。其中,一份位于站点根目录下(比如我的:E:\TRHX_Blog\Hexo\_config.yml),主要包含 Hexo 本身整站的配置;另一份位于主题目录下(比如我的:E:\TRHX_Blog\Hexo\themes\hexo-theme-aero-dual\_config.yml),这份配置由主题作者提供,主要用于配置主题相关的选项,一般 _config.yml 文件里都有相关注释,按需修改即可

参考资料:《有哪些好看的 Hexo 主题?》 (知乎)
     《Hexo | 配置》 (Hexo官方文档)
     《hexo常用命令笔记》 (By 小弟调调)


– 为你的 Hexo 博客配置个性域名

本人在配置域名的时候问题百出,百度的各种方法都不管用,打开网站总是 404,可能是我太笨了  o(╥﹏╥)o ,不过好在后来终于解决了这个问题

首先我们要购买域名,阿里云腾讯云都可以,也不贵,一年几十块钱,最便宜几块钱也能买到,以阿里云为例,我购买的域名是 trhx.top,购买过程就不赘述了,选择阿里云的解析平台,来到阿里云的管理控制台,点击进入域名解析列表或者直接点击域名后面的解析



点击添加记录,需要添加两个记录,两个记录类型都是 CNAME ,记录值都是填你自己的博客地址(比如我的是:trhx.github.io),第一个主机记录为 @ ,第二个主机记录为 www ,保存之后域名解析就完成了!

【注:百度大多数方法是这样的:两个记录类型为 A ,记录值都为博客的 IP 地址,IP 地址可以 cmd 中输入 ping 你的博客地址 获得(比如我的:ping trhx.github.io),但我尝试这种方法并没有成功,目前也不知道具体原因,强调一下,我还是这方面小白!小白!小白!所以不太懂,欢迎大佬来指点!】





为了使 GitHub 接收我们的域名,还需要在博客的根目录下添加一个名为 CNAME 的文件(注意不要加.txt,没有任何后缀名!),这个文件放到 Hexo 文件夹的 source 里面,(比如我的是:E:\TRHX_Blog\Hexo\source),文件里面填写你的域名(去掉www),比如要填写我的域名,文件里面就放一句话:trhx.top,经过以上操作,别人就可以通过 www.trhx.toptrhx.toptrhx.github.io 三个当中任意一个访问我的博客了!你的也一样!





如果你在其他平台购买域名,或者选择 DNSPod 等其他域名解析,操作方法大同小异,遇到问题可自行百度解决!

参考资料:《推荐几家域名注册服务商》 (By Jelly Bool)
     《盘点十大免费DNS域名解析服务:稳定、可靠》

– 结语

一顿操作下来虽然有点儿累,但看见拥有了自己的博客还是非常有成就感的,人生就是需要折腾,那么现在就开始你的创作之旅吧!文章的不断积累,你会从中受益很多的!另外,这是一篇小白写的适用于小白的博客搭建教程,比较详细,有这方面基础的可以百度有简略一点儿的教程,文中如有错误还请大佬指出改正!文中涉及参考资料如有侵权请联系我删除!

]]>
实用教程 Hexo Github Pages
本站镇站之宝 /2018/08/10/%E5%8D%9A%E5%AE%A2%E9%95%87%E7%AB%99%E4%B9%8B%E5%AE%9D/

人类的幸福和欢乐在于奋斗,而最有价值的是为理想而奋斗!
                                   ———— 苏格拉底


Human happiness and joy lie in struggle, and what is most valuable is striving for ideals!
                                   ———— Socrates








]]>
励志视频 梦想 人生