风变编程 - Python基础语法

“Talk is cheap, show me the code.” - Linus Torvalds

Python is an interpreted, high-level, general-purpose programming language. Created by Guido van Rossum and first released in 1991, Python’s design philosophy emphasizes code readability with its notable use of significant whitespace. Its language constructs and object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects.

Python is dynamically typed and garbage-collected. It supports multiple programming paradigms, including procedural, object-oriented, and functional programming. Python is often described as a “batteries included” language due to its comprehensive standard library.

1
2
3
4
5
Python is powerful... and fast; 
plays well with others;
runs everywhere;
is friendly & easy to learn;
is Open.

课程关卡

风变编程

课程标题 知识点
1. 千寻的名字 print()函数与变量
2. 萌新的进化 数据类型与转换
3. 灭霸的选择 条件判断与条件嵌套
4. 霍格沃茨来信 input()函数与复习
5. 收纳的艺术 列表和字典
6. 消灭该死的重复(上) for循环和while循环1
7. 消灭该死的重复(下) for循环和while循环2
8. 小游戏大学问 实操:PK小游戏(1)
9. 编程学习的两大瓶颈 思维:如何解决问题
10. 喊出我的名字 函数
11. 田忌赛马 实操:PK小游戏(2)
12. 杀死那只“机”生虫! 思维:如何debug
13. 我有一个“机器人”(上) 类与对象1
14. 我有一个“机器人”(下) 类与对象2
15. 命中注定我克你 实操:PK小游戏(3)
16. 计算机的“新华字典” 编码和文件读写
17. 哆啦A梦的百宝箱 模块
18. 邮件还能这么发! 实操:收发邮件
19. 需求你造吗?我造 思维:产品思维
20. 高效偷懒的正确姿势 实操:毕业项目

1. 千寻的名字

(1) 图片识别代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import requests
from aip import AipOcr

image = requests.get('https://static.pandateacher.com/7b5d6d8d9dea5691705d04fef2306b52.png').content

APP_ID = '16149264'
API_KEY = 'yxYg9r4OuAs4fYvfcl8tqCYd'
SECRET_KEY = 'yWg3KMds2muFsWs7MBSSFcgMQl8Wng4s'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
res = client.basicGeneral(image)
if 'words_result' in res.keys():
for item in res['words_result']:
print(item['words'])
else:
print(res)

识别结果:

1
2
3
4
5
6
优美胜于丑陋
明了胜亍晦涩
简法胜于复杂
复杂胜于凌礼
扁平胜于嵌套
间隔胜亍紧凑

(2) 聊天机器人

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import requests, json, time, random

word = input('''你好,我是你的私人助理吴小枫。你可以在下方任意输入一个名词,然后敲击“Enter”键,我将会帮你自动联想它有什么相关的词汇!
注:如果你要删除自己输入的内容,要按两次删除,才可以删掉一个汉字奥!(因为在计算机世界里,中文是占两个字符的!)
下面请输入(示例:牛肉、水果、飞机、手机……),然后敲“Enter”:
>''')
word=word+'有哪些相关词汇?'
feature_text = '''
我们可以先聊点别的,我还有什么可以帮助你的吗?
输入你的问题,然后敲Enter键!
>'''

url1 = 'http://ictclas.nlpir.org/nlpir/index/getAllContentNew.do'
data1 = {'type': 'all', 'content': word}
try:
r1 = requests.post(url1, data1, timeout=3)
dividewords = json.loads(r1.text)['dividewords']
dividewords = dividewords.split(' ')
newwords = []
cixing = []
for x in dividewords:
if x == dividewords[-1]:
continue
else:
singleword = x.split('/')
newwords.append(singleword[0])
cixing.append(singleword[1])
newlist = '/'.join(newwords)
dict = {'n': '名词', 'nr': '人名', 'nr1': '汉语姓氏', 'nr2': '汉语名字', 'nrj': '日语人名', 'nrf': '音译人名', 'ns': '地名',
'nsf': '音译地名', 'nt': '机构团体名', 'nz': '其它专名', 'nl': '名词性惯用语', 'ng': '名词性语素',
't': '时间词', 'tg': '时间词性语素', 's': '处所词', 'f': '方位词',
'v': '动词', 'vd': '副动词', 'vn': '名动词', 'vshi': '动词“是”', 'vyou': '动词“有”', 'vf': '趋向动词', 'vx': '形式动词',
'vi': '不及物动词(内动词)', 'vl': '动词性惯用语', 'vg': '动词性语素',
'a': '形容词', 'ad': '副形词', 'an': '名形词', 'ag': '形容词性语素', 'al': '形容词性惯用语', 'b': '区别词', '': '',
'bl': '区别词性惯用语',
'z': '状态词',
'r': '代词', 'rr': '人称代词', 'rz': '指示代词', 'rzt': '时间指示代词', 'rzs': '处所指示代词', 'rzv': '谓词性指示代词', 'ry': '疑问代词',
'ryt': '时间疑问代词', 'rys': '处所疑问代词', 'ryv': '谓词性疑问代词', 'rg': '代词性语素',
'm': '数词', 'mq': '数量词', 'q': '量词', 'd': '副词', 'p': '介词', 'pba': '介词“把”', 'pbei': '介词“被”', 'c': '连词',
'cc': '并列连词',
'u': '助词', 'uzhe': '着', 'ule': '了,喽', 'uguo': '过', 'ude1': '的', 'ude2': '地', 'ude3': '得', 'usuo': '所',
'udeng': '等,等等,云云', 'uyy': '一样,一般,似的,般', 'udh': '的话', 'uls': '来讲,来说,而言,说来', 'uzhi': '之', 'ulian': '连',
'e': '叹词', 'y': '语气词', 'o': '拟声词', 'h': '前缀', 'k': '后缀', 'x': '字符串', 'xe': 'Email字符串', 'xs': '微博会话分隔符',
'xm': '表情符合', 'xu': '网址URL',
'w': '标点符号', 'wkz': '左括号', 'wky': '右括号', 'wyz': '左引号', 'wj': '句号', 'ww': '问号', 'wt': '叹号', 'wd': '逗号',
'wf': '分号', 'wn': '顿号', 'wm': '冒号', 'ws': '省略号', 'wp': '破折号', 'wb': '百分号千分号', 'wh': '单位符号'
}
time.sleep(1)
print('\n首先,我帮你补全了问题,你问的是:'+word+'有哪些相关词汇,对吗?')
print('\n接着,我先把你的话做了分词:' + newlist + '。')
cixinglist = ''
for y in cixing:
cixinglist = cixinglist + dict[y] + '/'
time.sleep(2)
print('它们的词性分别是:' + cixinglist + '。')
time.sleep(2)
print('其中,我判断' + newwords[0] + '是一个' + dict[cixing[0]] + ',你问我的是它的相关词汇有哪些对吗?')
url = 'http://ictclas.nlpir.org/nlpir/index6/getWord2Vec.do'
data = {'content': newwords[0]}
r = requests.post(url, data)
other = json.loads(r.text)
time.sleep(1)
print ('\n我想了想和“' + newwords[0] + '”相关的词汇,至少还有:\n')
time.sleep(1)
f = 0
for i in other['w2vlist']:
f = f + 1
word2 = i.split(',')
print ('(' + str(f) + ')' + word2[0] + ',其相关度为' + word2[1])
time.sleep(1)
feature_text = '''
现在,你已经解锁我的所有功能,可以自由聊天啦!我还有什么可以帮助你的吗?
回复内容,然后敲Enter键!
>'''
except requests.exceptions.ConnectTimeout:
print('额,抱歉,网络连接失败了,词汇拆解功能暂时无法使用...')
except requests.exceptions.Timeout:
print('额,抱歉,网络连接超时了,词汇拆解功能暂时无法使用...')

user1 = input(feature_text)
time.sleep(1)
userid = str(random.randint(1, 1000000000000000000000))
apikey = 'd81c0b99c260440980a140440be200ec'
#超过1w有风险,19-01-19
tulingdata1 = json.dumps({ "perception": {
"inputText": {
"text": user1
},

},
"userInfo": {
"apiKey": apikey,
"userId": userid
}
})
robot1 = requests.post('http://openapi.tuling123.com/openapi/api/v2', tulingdata1)
jsrobot1 = json.loads(robot1.text)['results'][0]['values']['text']
print(jsrobot1)
time.sleep(2)
user2 = input('''
再和你聊最后一句我就要下线了奥,你还有什么要求吗?
回复内容,然后敲Enter键!
>''')
tulingdata1 = json.dumps({
"perception": {
"inputText": {
"text": user2
},

},
"userInfo": {
"apiKey": apikey,
"userId": userid
}
})
robot1 = requests.post('http://openapi.tuling123.com/openapi/api/v2', tulingdata1)
jsrobot1 = json.loads(robot1.text)['results'][0]['values']['text']
time.sleep(1)
print(jsrobot1)
time.sleep(1)
print('\n我走啦,下次见!')

(3) print() 函数

1
2
3
import time
print ('在'+time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+',我写了人生中第一行Python代码\n它的内容虽然简单,不过是平凡的一句print(520)\n但我知道:我的编程之路,将从最简单的520开始\n在我点击运行的同时,一切在这一刻开始变得不同\n以下,是这行代码的运算结果:' )
print(520)

(4) 转义字符

转义字符 意义
\a 响铃(BEL)
\b 退格(BS),将当前位置移到前一列
\f 换页(FF),将当前位置移到下页开头
\n 换行(LF),将当前位置移到下一行开头
\r 回车(CR),将当前位置移到本行开头
\t 水平制表(HT)(跳到下一个TAB位置)
\v 垂直制表(VT)
\ 代表一个反斜线字符“\”
\’ 代表一个单引号(撇号)字符
\” 代表一个双引号字符
\? 代表一个问号
\0 空字符(NUL)
\ddd 1到3位八进制所代表的任意字符
\xhh 1到2位十六进制所代表的任意字符

(5) 变量和赋值

变量的命名规范:

  1. 只能是一个词
  2. 只能包含字母、数字和下划线
  3. 不能以数字开头
  4. 尽量描述包含的数据内容

(6) 猜测数字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import random
import time

###提示语部分
print('你好,我是机器人小埋,我们来玩个猜年龄的小游戏吧~(◆◡◆)')
time.sleep(2)

print('''
=============================
干物妹!うまるちゃんの年齢
=============================
''')
time.sleep(1)


print('小埋的真实年龄在1到10之间哦~')
time.sleep(1)


print('不过,你只有5次机会哦~')
time.sleep(1)


print('下面,请输入小埋的年龄吧:')


#从0至10产生一个随机整数,并赋值给变量age
age = random.randint(1,10)


#设置次数
for guess in range(1,6):

#输入玩家猜测的年龄
choice=int(input())

#判读玩家输入的年龄是否等于正确的年龄
if choice<age:
print('小埋的提示:你猜小了(;´д`)ゞ。。。。')

elif choice>age:
print('小埋的提示:乃猜大了惹(>﹏<)~~')

else:
print('猜了'+str(guess)+'次,你就猜对惹~hiu(^_^A;)~~~')
break

#判断猜测次数
if choice == age:
print('搜噶~那么小埋下线了~拜拜~( ̄︶ ̄)↗')

else:
print('哎呀~你还是木有猜对啊~但是你只有5次机会诶~怎么办啊~')
print('那好吧~心软的小埋只好告诉你,我才'+str(age)+'岁哦~(*/ω\*)')

(7) 练习:打印皮卡丘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
print('''
へ     /|
  /\7    ∠_/
  / │   / /
 │ Z _,< /   /`ヽ
 │     ヽ   /  〉
  Y     `  /  /
 イ● 、 ●  ⊂⊃〈  /
 ()  へ    | \〈
  >ー 、_  ィ  │ //
  / へ   / ノ<| \\
  ヽ_ノ  (_/  │//
  7       |/
  >―r ̄ ̄`ー―_
''')

(8) 进阶练习:听见无脸男的声音

1
2
3
4
5
6
7
print('''
千寻你好,人们叫我\'无脸男\'
\n这个世界的人都选择无视我
\n只有你看到了我并和我打招呼
\n我感到很孤单,很孤单
\n你愿意和我成为朋友吗?
''')

2. 萌新的进化

(1) 数据类型

string – str 字符串

integer – int 整数

float – 浮点数

(2) 算术运算符

运算符 表示 例子
+ 2+1输出结果3
- 1-2输出结果-1
* 1*2输出结果2
/ 1/2输出结果0.5
% 取模一返回除法的余数 5%2输出结果1
** 幂一返回x的y次幂 2**3为2的3次方
// 取整除一返回商的整数部分 11/2输出结果5,11.0//2/0输出结果5.0

简单运算优先级口诀:从左到右顺着来,括号里的优先算,乘除排在加减前。

(3) 练习:程序员的一人饮酒醉

1
2
3
4
5
6
7
8
9
10
11
number1 = 1
number2 = 2
unit1 = '人'
unit2 = '眼'
line1 = '我编程累'
line2 = '是bug相随'
sentence1 = '碎掉的节操满地堆'
sentence2 = '我只求今日能早归'

print(str(number1)+unit1+line1+sentence1)
print(str(number2)+unit2+line2+sentence2)

(4) 进阶练习:非酋的吐槽

1
2
3
4
5
6
slogan = '脸黑怪我咯'
number = '7.8'
unit = '张'
sentence = '蓝票一个SSR都没有'

print(slogan+str(int(float(number)))+unit+sentence)

3. 灭霸的选择

(1) 如果…就…逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import time

print('如果你想拥有无限的力量和能量,那必须夺得力量宝石')

time.sleep(2)

print('如果你想扭曲时空和任意地传送,那必须夺得空间宝石')

time.sleep(2)

print('如果你想任意地修改现实,无视任何宇宙规律,那必须夺得现实宝石')

time.sleep(2)

print('如果你想到达任何一个时间点,无论是古老的年代还是遥远的未来,那必须夺得时间宝石')

time.sleep(2)

print('如果你想控制生者和死者的灵魂,那必须夺得灵魂宝石')

time.sleep(2)

print('如果你想拥有不朽的精神力量并操控任何人的思维,那必须夺得心灵宝石')

time.sleep(2)

print('那么,如果让你来选择的话,你想要获得拿颗宝石呢?')

time.sleep(2)

print('请在以下六个选项【1 力量宝石 ;2 空间宝石;3 现实宝石 ;4 时间宝石;5 灵魂宝石 ;6 心灵宝石;】中,选择你最想获得的宝石吧!')

time.sleep(3)

answer=input('请将对应数字输入在冒号后: ')

if answer=='1':
print('我告诉你哦,力量宝石保存在山达尔星的新星军团的总部基地')
time.sleep(3)

elif answer=='2':
print('空间宝石在洛基手里')
time.sleep(3)

elif answer=='3':
print('雷击已将现实宝石交给收藏家保管')
time.sleep(3)

elif answer=='4':
print('奇异博士愿意用时间宝石换取钢铁侠的性命')
time.sleep(3)

elif answer=='5':
print('必须献祭自己心爱的人才能得到灵魂宝石')
time.sleep(3)

else:
print('幻视头上的心灵宝石被绯红女巫摧毁,但可用时间宝石复原')
time.sleep(3)

(2) 条件判断的三种形式

  1. 单向判断:if
  2. 双向判断:if…else…
  3. 多向判断:if…elif…else…

(3) if嵌套的逻辑

if嵌套的逻辑

(4) if条件判断

if条件判断

(5) 练习:寻找宝石

1
2
3
4
5
6
7
8
stonenumber = 0

if stonenumber >= 4:
print('获得了打败灭霸的力量,反杀稳了')
elif 1 <= stonenumber <= 3:
print('可以全员出动,殊死一搏')
else:
print('没办法了,只能尝试呼叫惊奇队长')

(6) 进阶练习:美国队长的工资

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pay=80

if pay <= 500:
print('欢迎进入史塔克穷人帮前三名')

if 100<pay<500:
print('请找弗瑞队长加薪')
else:
print('恭喜您荣获“美元队长”称号!')
elif 500<pay<=1000:
print('祝贺您至少可以温饱了。')
elif pay>1000:
print('经济危机都难不倒您!')

if 1000<pay<=20000:
print('您快比钢铁侠有钱了!')
else:
print('您是不是来自于瓦坎达国?')
print('程序结束')

4. 霍格沃茨来信

(1) input()函数知识点总结

input()函数知识点总结

(2) 练习:哈利波特的宠物

1
2
owlname = input('为哈利·波特的猫头鹰起个名字: ')
print('哈利·波特的猫头鹰叫做' + owlname)

(3) 进阶练习:罗恩的减肥计划

1
2
3
4
5
chocolate = input('罗恩吃的巧克力数量:')
if chocolate > '10':
print('罗恩给哈利100块')
else:
print('哈利给罗恩100块')

(4) 进阶练习:古灵阁金币兑换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
need1 = input('小精灵:您好,欢迎古灵阁,请问您需要帮助吗?需要or不需要?')

if need1 == '需要':
need2 = input('小精灵:请问您需要什么帮助呢?1 存取款;2 货币兑换;3 咨询')
if need2 == '1':
print('小精灵: 推荐你去存取款窗')
if need2 == '2':
print('小精灵:金加隆和人民币的兑换率为1:51.3,即一金加隆=51.3人民币')
money = int(input('小精灵:请问您需要兑换多少金加隆呢?'))
print('小精灵:好的,我知道了,您需要兑换' + str(money) + '金加隆。')
conmoney = money * 51.3
print('小精灵:那么,您需要付给我' + str(conmoney) + '人民币。')
if need2 == '3':
print('小精灵: 推荐你去咨询窗口')

elif need1 == '不需要':
print('小精灵: 好的,再见。')

5. 收纳的艺术

6. 消灭该死的重复(上)

7. 消灭该死的重复(下)

8. 小游戏大学问

9. 编程学习的两大瓶颈

10. 喊出我的名字

11. 田忌赛马

12. 杀死那只“机”生虫!

13. 我有一个“机器人”(上)

14. 我有一个“机器人”(下)

15. 命中注定我克你

16. 计算机的“新华字典”

17. 哆啦A梦的百宝箱

18. 邮件还能这么发!

19. 需求你造吗?我造

20. 高效偷懒的正确姿势

Would you mind buy me a cup of coffee?