Python之路基础知识笔记(1)

编程语言 jikk345 946℃ 0评论

一、变量
变量定义的规则:
变量名只能是 字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
以下关键字不能声明为变量名
[‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘exec’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘not’, ‘or’, ‘pass’, ‘print’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
变量的一些写法规则:

name = "Guanqinglin"            #带单引,双引,多引的都是字符串形式展示
age = 21                           #变量数值方式的,不带单引,双引,多引的
son_of_twins_brotehr_age = 10   #下划线把单调分隔,易读性高。
NameOfTwinsGf = "qinglin"        #驼峰写法,易读性一般。
print (name,age,son_of_twins_brotehr_age,NameOfTwinsGf)

变量的赋值
实际上name赋值的参数是guanqinglin,name2指向的是name的值(guanqinglin),所以当name变量重新赋值qinglin时,name2指向的还是name的值(guanqinglin),所以还是guanqinglin。

>>> name = "guanqinglin"  
>>> name2 = name
>>> print (name,name2)
guanqinglin guanqinglin
>>> name = "qinglin"
>>> print (name,name2)
qinglin guanqinglin
>>>

二、字符编码
计算机是将下面的符号、字符、字母、数字都用一个数字去记录。
比如Q=81,在计算机存储的方式就是81对应的就是Q,但ASCII存的只有英文,没有中文。
1个比特等于1个二进制位
8个二进度位等于1个字节
1024字节等于1kb
1024kb等于1M
关于扩展
早期做法ASCII扩展出现一个字符(ascii预留空白的)扩展出来另一张表,然后这张表是中文的。
1
关于中文
为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。
有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。

显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存…
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
报错:ascii码无法表示中文
例:python 2.x 默认情况下,不指定utf-8。

[root@HEYI-OPS python]# vim ascii.py
#!/usr/bin/env python
print "你好,世界"
~         

结果:报错

[root@HEYI-OPS python]# python ascii.py
  File "ascii.py", line 3
SyntaxError: Non-ASCII character '\xe4' in file ascii.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

例:python 2.x 默认情况下,指定utf-8。

[root@HEYI-OPS python]# vim ascii.py   
#!/usr/bin/env python
# -*- coding: utf-8 -*- 
print "你好,世界"

结果:正确输出

[root@HEYI-OPS python]# python ascii.py
你好,世界

注:python 3.x不存在这个问题,只有python2.x需要指定
三、注释
当行注视:# 被注释内容
多行注释:””” 被注释内容 “””
另,python每一行,不能超过80字符。
四、格式化字符串(实战)
技巧:pytcharm工具用ctrl+d可以复制并马上粘贴出一行。
练习:用户输入 (读取用户的信息)

#!/usr/bin/env python
#_*_coding:utf-8_*_
#QQ 7796755
#Blog:www.qinglin.net
#author = "Guanqinglin"
user_input = input("Input your name:")
print ("User inpu msg:",user_input)

结果 :输入guanqinglin,立马打印

Input your name:guanqinglin
User inpu msg: guanqinglin

注:python3.x使用的是input,而python2.x用的是raw_input
强化练习:输入用户的相关信息并打印,引入字符串中调用变量。

#!/usr/bin/env python
#_*_coding:utf-8_*_
#QQ 7796755
#Blog:www.qinglin.net
#author = "Guanqinglin"
name = input("Input your name:")
age = int(input("Input your age:")) #python 3.0输入默认的都是字符串,所以加个inte强行转换成数值。
moneny = int(input("Input you money:"))
job = input("Input your job:")
#下列msg是将字符串里的内容加上变量引入,%s代表字符串,%d是整数,%f是小数
#下列将%(name,name,age,money,job)中按顺序对应msg变量中的%s,%d,%f,%s
msg = '''
Infomation of user %s:
---------------------------
Name: %s
Age: %d
Mon: %f
Job: %s
------------END------------
''' % (name,name,age,moneny,job)
print(msg)  #打印msg变量。

结果:手动输入后并打印

Input your name:qinglin
Input your age:18
Input you money:30000
Input your job:IT
Infomation of user qinglin:
---------------------------
Name: qinglin
Age: 18
Mon: 30000.000000
Job: IT
------------END------------

五、常用模块初识
python全局环境变量存的默认的模块
python使用import模块,每次都到这个路径去找(linux版)
注:下列print ”里面是空的,他代表当前路径,默认是从”当前路径开始找,然后一直往下走,直到匹配到后退出。

>>> import sys
>>> print (sys.path)
['', '/usr/local/lib/python35.zip', '/usr/local/lib/python3.5', '/usr/local/lib/python3.5/plat-linux', '/usr/local/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/site-packages']

python使用import模块,每次都到这个路径去找(windows版)

import sys
print(sys.path)
['G:\\Python\\Student_1', 'G:\\Python', 'C:\\Program Files\\Python35\\python35.zip', 'C:\\Program Files\\Python35\\DLLs', 'C:\\Program Files\\Python35\\lib', 'C:\\Program Files\\Python35', 'C:\\Program Files\\Python35\\lib\\site-packages']

注:要引入自己脚本当做模块,一种是在当前目录进行python交互式命令行,一种是放到下面的目录下(linux版)。

[root@Qinglin-Student /]# ls  /usr/local/lib/python3.5/site-packages/
README  __pycache__  easy_install.py  get.py  pip  pip-8.1.1.dist-info  pkg_resources  setuptools  setuptools-20.10.1.dist-info

你会发现,上面自己写的get.py模块只能在当前目录下导入,如果想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个tab.py放到python全局环境变量目录里啦,基本一般都放在一个叫 Python3.5/site-packages 目录下,这个目录在不同的OS里放的位置不一样,用 print(sys.path) 可以查看python环境变量列表。
getpasss模块,在linux环境下测试
练习:使用getpass模块

[root@Qinglin-Student python]# vim get.py
#!/usr/bin/env python
#_*_coding:utf-8_*_
#QQ 7796755
#Blog:www.qinglin.net
#author = "Guanqinglin"
import getpass
username = input ("Username:")
password = getpass.getpass ("Password:")
print (username,password)

结果:密码输入的时候是隐藏的

[root@Qinglin-Student python]# python3 get.py
Username:qinglin
Password:
qinglin 123123

注:以上在linux系统中出现了错误,是由于python2不支持input改成raw_input就好,如果是python3需要如上代码,指定python3
技巧:在python交互命令上调用get.py这个脚本当模块使用
可以看到下面,我在不显示的密码中输入了asd,实际是调用脚本。
但是,我import get.py这个脚本是在get.py这个目录下进入的python3交互式命令,所以在sys.path中,第一列”,代表是在当前目录下找。

>>> import get
Username:asd
Password:
asd asd

我想import模块不想在当前目录下运行
那么我将把get.py拷贝到 /usr/local/lib/python3.5/site-packages/中,然后切换到其他没有get.py的目录执行import get,如下

[root@Qinglin-Student python]# ls
__pycache__  get.py  get.pyc
[root@Qinglin-Student python]# cp get.py /usr/local/lib/python3.5/site-packages/
[root@Qinglin-Student python]# cd /
[root@Qinglin-Student /]# python3
Python 3.5.2 (default, Sep 19 2016, 22:38:42) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import get
Username:qinglin
Password:
qinglin password

os模块
在linux下执行
练习:使用os模块在linux下查看磁盘容量

[root@Qinglin-Student python]# python
Python 3.5.2 (default, Sep 19 2016, 22:38:42) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system("df -h")
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  4.6G   15G  25% /
0

默认上面的方式是即使显示的,如果存在变量里是不可以的,需要存在变量里,请使用下面的方法
使用的模块为os.popen

>>> df = os.popen("df -h").read()
>>> print (df )
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  4.6G   15G  25% /

六、if语句判断
判断用户名和密码~

#!/usr/bin/env python
#_*_coding:utf-8_*_
#QQ 7796755
#Blog:www.qinglin.net
#author = "Guanqinglin"
user = "guanqinglin"
passwd = "qinglin"
username = input("Username:")
password = input("Password:")
if user == username:
    print("username is correct..")  #不加缩进4格,python会认为if和print是没关系的代码。
    if passwd == password:
        print("Welcome login....")
    else:
        print("Password is invalid...")
else:
    print("连用户名都没蒙对,滚蛋。。。")

结果

正确的输入
Username:guanqinglin
Password:qinglin
username is correct..
Welcome login....
用户名正确,密码不正确
Username:guanqinglin
Password:123
username is correct..
Password is invalid...
用户名不正确,密码正确
Username:asd
Password:qinglin
连用户名都没蒙对,滚蛋。。。

判断用户名和密码加强版

user = "qinglin"
passwd = "123456"
username = input("Username:")
password = input("Password:")
if username == user and passwd == password:
    print("Welcome Login!..")
else:
    print("Get OUT!...")

结果

正确的输入
Username:qinglin
Password:123456
Welcome Login!..
用户名正确,密码不正确
Username:qinglin
Password:123
Get OUT!...
用户名不正确,密码正确
Username:a
Password:123456
Get OUT!...

猜数字游戏

age = 21
guess_num = int(input("Input your guess num:"))
if guess_num == age:
    print("Congratulations! you got it.")
elif guess_num > age:
    print("Think smaller!") #输入小一点
else:
    print("Think Big..") #输入大一点

结果

比正确数大的情况
Input your guess num:30
Think smaller!
比正确数小的情况
Input your guess num:8
Think Big..
正确的情况

七、循环加判断制作猜数字游戏
体验for循环

>>> for i in range(10):
...     print (i)
... 
0
1
2
3
4
5
6
7
8
9

游戏代码规则
循环10次,输入3次不正确后退出,输入一次正确后退出。

age = 21
for i in range(10): #生成0-9的10个随即数给变量i
    if i < 3: #如果没输入正确,到第三次的时候跳到else guess_num = int(input("Input your guess num:")) if guess_num == age: print("猜对了!") break #猜对了中止跳出整个10个循环,break就是中止跳出的意思。 elif guess_num > age:
            print("输入的数大了!")
        else:
            print("输入到的数小了!")
    else:
        print("输入次数过多,拜拜!")  #else 这里提示输入错误3次提示这个print,然后break退出
        break

结果

#输入正确,一次退出
Input your guess num:21
猜对了!
#输错三次,退出
Input your guess num:1
输入到的数小了!
Input your guess num:100
输入的数大了!
Input your guess num:10
输入到的数小了!
输入次数过多,拜拜!

游戏代码规则加强版
输入错误三次机会,选择y可以再有两次机会,正确break跳出整个循环。

age = 21
counter = 0  #计数器默认变量为0
for i in range(10): #生成0-9的10个随即数给变量i,也就是说只能循环10次就退出了。
    #print("count -->",counter)  #调试时在这里打印counter的数量,这样可以直接显示出循环次数
    if counter < 3: #如果没输入正确,到第三次的时候跳到else guess_num = int(input("Input your guess num:")) if guess_num == age: print("猜对了!") break #猜对了中止跳出整个10个循环,break就是中止跳出的意思。 elif guess_num > age:
            print("输入的数大了!")
        else:
            print("输入到的数小了!")
    else:
        continue_confirm = input("你还想玩吗?如果想玩请输入: y ") #这里如果还输入y,counter算1次
        if continue_confirm == "y": #这里如果选择y,那么把counter这个变量重置成0
            counter = 0
        else:
            print("拜拜!")
            break
    counter +=1 #循环全部结束后走到这一步,counter=counter+1

结果

#输入正确,一次即推出
Input your guess num:21
猜对了!
#输入错误三次,提示选择y重新玩二次,循环执行10次后退出
Input your guess num:1
输入到的数小了!
Input your guess num:2
输入到的数小了!
Input your guess num:3
输入到的数小了!
你还想玩吗?如果想玩请输入: y y
Input your guess num:1
输入到的数小了!
Input your guess num:2
输入到的数小了!
你还想玩吗?如果想玩请输入: y y
Input your guess num:1
输入到的数小了!
Input your guess num:2
输入到的数小了!
你还想玩吗?如果想玩请输入: y y

发现问题
输入y之后,只能再玩二次,本次想让他选择y后可以玩三次。不想选择y也算一次。
将上面的代码的counter =0 改成counter = -1 这也是一种懒人的办法,这样也可以三次。
但是更好的方法如下(只加了个continue):

age = 21
count = 0
for i in range(10):
    if count < 3: guess = int(input("输入你要的输入的数字:")) if guess == age: print("正确的输入!") break elif guess > age:
            print("输入的数字太大")
        else:
            print("输入的数字太小")
    else:
        continue_one = input("输入y继续测试:")
        if continue_one == "y":
            count = 0
            continue
        else:
            print("结束!")
            break
    count += 1

转载请注明:清麟博客 » Python之路基础知识笔记(1)

喜欢 (1)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址