自学Python Day_03


Python擅长的领域

  • web开发
    • DjangopyramidTornadoBottleFlaskWebPy
  • 网络编程
    • TwistedsRequestsScrapyParamiko
  • 科学技术
    • SciPyPandaslpython
  • GUI图形开发
    • wxPythonPyQTKivy
  • 运维自动化
    • OpenStackSaltStackAnsible腾讯蓝鲸

二进制编码

  • ASSICII码 每个字符统一需要8个bit来储存

计算机容量

  • 1位=1bit
  • 8bit=1byte=1字节
  • 1024bytes=1kbytes=1KB
  • 1024KB=1MillionBytes =1MB=1兆
  • 1024MB=1Gigabytes
  • 1024GB=1TB
    -024TB=1PB

编程语言

  • 编程语言就是一套与计算机交互的语法规则。学习编程就相当于学习语法规则。
  • C语言是操作系统的开发语言
  • C++是C语言的加强版
  • Java虚拟机,支持跨平台
  • PHP纯web开发语言
  • Python刚开始被作为脚本语言
  • C#即C sharpe
  • ruby跟Python相似
  • perl语言,在Unix上开发的语言,做文字处理
  • shell脚本语言,简单易学,基于Unix、Linux,做简单的系统管理任务,运维人员必学
  • erlang函数式编程,面向并发的编程语言
  • go开源编程语言
  • JavaScript最广泛的语言,主要写前端的语言
  • nodejs后端语言,全栈式的语言
  • vb微软的脚本语言,bat脚本
  • lua是nginx脚本语言

语言类型

  • 编译型
    • 全部翻译,再执行,翻译即编译,此类型的有C、C++等
  • 解释型
    • 边执行边翻译,此类型的语言有Python、PHP、Java、C#、Perl、Ruby、JavaScript

Python版本选择

  • python2.x
    • 默认编码为ASSIC,不支持中文
  • python3.x
    • 默认编码为UNICODE,默认支持中文
    • 不兼容python2.x
    • 核心语法调整,更易学
    • 新特性默认值在3.x上有
  • unicode 万国码,支持所有国家和地区。向下兼容GB2312、GBK
  • UTF—8是unicode的拓展集,可变长的字符编码集
  • 支持中文的第一张表——GB2312

当使用Python2.x在Windows的cmd运行代码时,如果有中文,将会出现乱码。因为Windows使用的是GBK编码,所以要在代码前声明使用哪种编码。在代码前面加上#!-*- coding:utf-8 -*-。除此之外,在输出变量时,还要在变量前加上u即声明使用unicode编码。

例:

#!-*- coding:utf-8 -*-
print u"我是坏坏!"

环境变量

此电脑–>属性–>高级系统设置–>环境变量–>系统变量–>找到Path变量,编辑。在环境变量后面加上Python的安装路径,每个路径之后用隔开。修改后保存。

  • D:Program FilesPython35Scripts;
  • D:ProgramFilesPython35;
  • D:Program FilesPython27

执行py程序方式

  • 交互器,缺点程序不能永久保存,主要用与简单的语法测试相关
  • 文件执行

变量

  • 为了存储程序运算过程中的一些中间结果,为了方便日后调用
  • 命名规则
    • 要具有描述性
    • 变量名只能_,数字,字母组成,不可以是空格或特殊字符(#?<.,¥$*!~)
    • 不能以中文为变量名
    • 不能以数字开头
    • 保留字符是不能被使用
  • student_number //python官方推荐命名规则
  • studentNumber //驼峰体,微软程序用的较多

常量

  • 不变的量。如pie = 3.141592653…
  • 在Python里面所有的变量都是可变的
  • 用全部大写的变量名来代表此变量为常量

Python中没有常量,所有的量都是可以改变的

变量重新赋值

我们先来看一个列子

name = "bad"

name2 = name
print(name,name2)

name = "jay"
print(name)
print(name2)

那么上面的程序,在重新给name赋值以后,name2的值会不会也发上变化呢?

其实是不会的。在给name赋值的时候,相当于是划分了一块地方,叫bad。而name指向badname2通过name找到bad,也指向bad

 
 
name
bad
name2

当重新给name赋值时,只是新划了一块地方,叫jayname指向jay,而name2还是指向bad不变。

 
 
name
jay
name2
bad

运行结果:

bad bad
jay
bad

内存释放

内存,即上面划分badjay的地方。那么如果一直定义变量,内存使用完了怎么办?这就需要将内存释放。

在Python中,不需要专门去释放内存,当定义的值不被变量指向,就会自动释放内存。取消指向有两种方法,一种是删除变量;一种是重新指向新的值。

  • del name
>>> name="bad"
>>> name
'bad'
>>> del name
>>> name
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    name
NameError: name 'name' is not defined

为了方便理解,定义的变量就像是一个门牌号。而内存就是一栋大楼。定义的值就是大楼中的小房间。定义变量时,就是把门牌号挂到指定的房间门上。当不需要再使用这个房间的时候,我们可以使用两种方法释放这房间。

  • del name即直接把门牌号拆下来,然后楼管(Python的内存回收机制)就会把房间回收了
  • name = "jay"即把门牌号拆下来,装到别的房间去

注释

  • 对代码进行说明或是不执行哪一段代码时,需要使用到注释。
  • 注释分类:
    • # 单行注释,也可以放在代码后,作为代码说明
    • ''' 多行注释,可以使用三个单引号或者三个双引号,将需要注释的多行内容引起来

用户输入

:用户输入名字和年龄,打印出名字和年龄。

name = input("your name:")  #将输入的数据赋值给name
age = input("your age:")  #将输入的数据赋值给age

print(name,age)  #输出变量name,age

运行结果:

your name:bad
your age:20
bad 20

:用户输入姓名和年龄,打印出用户的姓名以及还能活多久。

death_age = 80  #定义一个变量为80

name = input("your name:")  #输入用户姓名
age = input("your age:")  #输入用户年龄

print(type(age))

print("Your name:",name)  #打印出用户姓名

print("You can still live for:",death_age-int(age),"year")  #不使用int()将会报错

# 将三个字符串拼接
print("You can still live for:"+ str(death_age-int(age)) +"year")  #不使用str()将会报错
  • 所有带单引号,双引号的都为字符串
  • int 整数(insteger),str字符串(string)
  • +为拼接符
  • input接受的所有数据都是字符串,即便输入的是数字,也依旧会被转换为字符串处理
  • 最后打印时,death_age是整数型,age是字符串,无法进行加减运算,所以要对age的数据类型进行转换
  • int(age)是将字符串类型的age转换为整数型,同理str()可以将整数型转换为字符串类型
  • print(type(age))是打印出变量的类型
  • 可能遇到以下报错
    • TypeError: unsupported operand type(s) for -: ‘int’ and ‘str’ #不支持int'str'-运算,这因为没有将age转换为整数型
    • TypeError: can only concatenate str (not “int”) to str #只能将字符串连接到字符串,这是因为我们将字符串与数字进行了拼接

运行结果:

your name:bad
your age:20
<class 'str'>
Your name: bad
You can still live for: 60 year
You can still live for:60year

if语句

:定义一个数字,用户输入猜的数字,猜对了则输出"Yes,You are Right",猜错了则输出"Sorry,You are Warning"

my_num = 20

guess_num = int( input("请输入您猜的的年龄:") )

#伪代码,仅提供思路
'''
if guess_num == my_num then
    print("Yes")
else
    print("No")
'''

if guess_num == my_num:
    print("Yes,You are Right!")
else:
    print("Sorry,You are Warning!")
  • 伪代码并不是真正的代码,仅提供思路
  • 程序中判断值是否相等用==
  • if一行代码结束后后需要添加:else之后相同
  • print前面需要打四个空格,或者一个Tab进行缩进。只有Python必须缩进
  • 可能会出现的报错:
    • IndentationError: expected an indented block缩进错误,期待一个缩进块。这里是因为没有缩进,所以报错。
    • SyntaxError: invalid syntax语法错误。if:else:是连用的,不能分开
    • IndentationError: unindent does not match any outer indentation level缩进错误,非缩进不匹配任何外部缩进级别。使用了tab或四个空格,但是其他缩进使用的不是tab或四个空格。

Tab是不等于四个空格的,在notpad++里选择视图–>显示符号–>显示空格与制表符,就可以看到Tab(即制表符)和空格是不同的。缩进可以不用输入四个空格,只要所有的缩进保持一致,都是一个空格或者多个,都可以。但是不建议,建议使用Python官方推荐的使用四个空格。

运行结果:

请输入您猜的的年龄:20
Yes,You are Right
请输入您猜的的年龄:30
Sorry,You are Warning!

:用户输入一个成绩,90以上输出A,80-90输出B,60-80输出C,60一下输出不及格!

score = int( input("请输入你的成绩:") )

if score > 90:
    print("A")
elif score > 80:
    print("B")
elif score > 60:
    print("C")
else:
    print("不及格!")

  • Python只匹配一个选项,匹配到之后,就不会再继续向下匹配

练习:

  • 编写登录入口
    • 输入用户名、密码
    • 认证成功后显示欢迎信息
    • 输错三次后锁定

可以先自己尝试动手写一下,写出自己的思路。这里的代码可能不是最简的,有更好的可以留言指出。

user_name_true = "jay"
user_password_true = "1234"

for i in range(3):
    user_name_input = input("请输入你的用户名:").strip()
    user_password_input = input("请输入你的密码:")
    if user_name_input != user_name_true or user_password_input != user_password_true:
            if i >= 2:
                print("The account!")
                break
            else:
                print("Try again!You have ",2-i, "chance!")
                i += 1
    else:
        print("Welcom!")
        break

运行结果1:

请输入你的用户名:jay
请输入你的密码:111
Try again!You have  2 chance!
请输入你的用户名:aaa
请输入你的密码:1234
Try again!You have  1 chance!
请输入你的用户名:jay
请输入你的密码:1234
Welcom!

运行结果2:

请输入你的用户名:jay
请输入你的密码:111
Try again!You have  2 chance!
请输入你的用户名:bad
请输入你的密码:1234
Try again!You have  1 chance!
请输入你的用户名:bad
请输入你的密码:111
The account!
  • 还有个要求是在账户锁定之后,无法再进行登录。再次运行代码也依旧无法再进行登录,输出The account!有能力的可以自己尝试一下实现这个要求。
  • 提示是可以将锁定的账户写入到文件中。奈何我还是个小白,也没能实现,只能读取文件内容,写内容到文件中去,属实有些为难我了。
  • 提供的思路是将锁定的用户写入文件,在输入用户名之后,先判断这个用户是否在文件中。自己可以多加尝试。

 

以上内容均属原创,如有不详或错误,敬请指出。
本文作者: 坏坏
原文地址:https://www.cnblogs.com/bad5/p/12424280.html