一、变量\字符编码

Variables are used to store information to be referenced and manipulated in a computer program. They also provide a way of labeling data with a descriptive name, so our programs can be understood more clearly by the reader and ourselves. It is helpful to think of variables as containers that hold information. Their sole purpose is to label and store data in memory. This data can then be used throughout your program.

变量定义的规则:

      • 变量名只能是 字母、数字或下划线的任意组合
      • 变量名的第一个字符不能是数字
      • 以下关键字不能声明为变量名
        ['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']
#推荐命名
py_learning_day = 1
#驼峰命名
PyLearingDay = 1
#常量命名一般大写,但python并不存在常量,也是能修改的
CONST = ‘please dont change it !’

  

变量的赋值:

name = 'Tao Three'
name2 = name
print('before:',name,name2) name = 'xiao Tao'
print('after:',name,name2)

  结果:

before: Tao Three Tao Three
after: xiao Tao Tao Three

  原因:

二、字符编码

python2.7解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)

ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。

关于中文

为了处理汉字,程序员设计了用于简体中文的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个字节保存...

所以,python2.7解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:

#!/usr/bin/env python

print "你好,世界"

报错:ascii码无法表示中文

#!/usr/bin/env python
# -*- coding: utf-8 -*- #注明让解释器使用utf-8 解释该文件 print "你好,世界"
ACSII 255         1byte
GB2312 7k+
GBK 2w+  
GB18130 2.7w+
Unicode                2bytes
utf-8                en:1bytes      cn:3bytes

二进制中8位等于1个字节(byte)

128 64 32 16 8 4 2 1
1 1 1 1 1 1 1 1

第一位如果是1,则表示1,则可以表示2个数,0和1。

第二位如果是1,则表示2,则2个位置总共可以表示4个数,0到3,最大表示3。

第三位如果是1,则表示4,则3个位置可以表示8个数,0到7,最大表示7。

。。。。

第八位如果是1,则表示128,则8个位置可以表示255个数,0到255,最大表示255。

三、用户输入

name = input("What is your name?")
print("Hello " + name )

输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即

import getpass  #导入模块

# 将用户输入的内容赋值给 name 变量
pwd = getpass.getpass("请输入密码:") # 打印输入的内容
print(pwd)

四、模块初识

Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,例如:

 import sys

 print(sys.argv)

 #输出
$ python test.py helo world
['test.py', 'helo', 'world'] #把执行脚本时传递的参数获取到了

sys

os

 import os

 cmd_res = os.system('dir')   #只执行不保存 

 print(cmd_res)

 cmd_res1 =os.popen('dir')   #保存内容

 print(comd_res1.read()) 

 os.mkdir('new_dir')   #创建新目录

完全结合一下 

import os,sys

os.system(''.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行

五、.pyc是什么?

1. Python是一门解释型语言?

我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!

为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。

 

2. 解释型语言和编译型语言

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。

用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

3. Python到底是什么

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。

熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:

javac hello.java

java hello

只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。

4. 简述Python的运行过程

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

六、数据类型初识

1、数字

2 是一个整数的例子。
长整数 不过是大一些的整数。
3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数,j为虚数,数学中表示复数是什么?。

int(整型)

  在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
  在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(长整型)
  跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
  注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型)
      先扫盲 http://www.cnblogs.com/alex3714/articles/5895848.html 
  浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
  复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:Python中存在小数字池:-5 ~ 257
 
2、布尔值
  真或假
  1 或 0
3、字符串
"hello world"
万恶的字符串拼接:
  python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
字符串格式化输出
1
2
3
4
name = "alex"
print "i am %s " % name
  
#输出: i am alex

PS: 字符串是 %s;整数 %d;浮点数%f

字符串常用功能:
  • 移除空白
  • 分割
  • 长度
  • 索引
  • 切片
4、列表

创建列表:

1
2
3
name_list =['alex''seven''eric']
name_list = list(['alex''seven''eric'])

基本操作:

  • 索引
  • 切片
  • 追加
  • 删除
  • 长度
  • 切片
  • 循环
  • 包含
5、元组(不可变列表)
创建元组:
ages = (11, 22, 33, 44, 55)

ages = tuple((11, 22, 33, 44, 55))

  

6、字典(无序)
创建字典:
person = {"name": "mr.wu", 'age': 18}

person = dict({"name": "mr.wu", 'age': 18})

常用操作:

  • 索引
  • 新增
  • 删除
  • 键、值、键值对
  • 循环
  • 长度

七、数据运算  

算数运算:

比较运算:

赋值运算:

逻辑运算:

成员运算:

身份运算:

位运算:

*按位取反运算规则(按位取反再加1)   详解http://blog.csdn.net/wenxinwukui234/article/details/42119265

运算符优先级:

八、表达式if ... else

猜年龄游戏

在程序里设定好你的年龄,然后启动程序让用户猜测,用户输入后,根据他的输入提示用户输入的是否正确,如果错误,提示是猜大了还是小了

age = 43
guess_age = int(input('please input your guess age:'))
if guess_age == age:
print('congratulation,you got it!')
elif guess_age < age:
print('guess bigger')
else:
print('guess smaller')

 

九、表达式for loop

最简单的循环10次

for i in range(10):
print("loop:", i )

输出:

loop: 0
loop: 1
loop: 2
loop: 3
loop: 4
loop: 5
loop: 6
loop: 7
loop: 8
loop: 9

需求一:还是上面的程序,但是遇到小于5的循环次数就不走了,直接跳入下一次循环

for i in range(10):
if i<5:
continue #不往下走了,直接进入下一次loop
print("loop:", i )

需求二:还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出

for i in range(10):
if i>5:
break #不往下走了,直接跳出整个loop
print("loop:", i )

  

十、while loop   

有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。

回到上面for 循环的例子,如何实现让用户不断的猜年龄,但只给最多3次机会,再猜不对就退出程序。

#guss age game
age = 43
count = 0
while count < 3:
guess_age = int(input('please input your guess age:'))
if guess_age == age:
print('congratulation,you got it!')
break
elif guess_age < age:
print('guess bigger')
else:
print('guess smaller')
count+=1
if count == 3:
status = input("do you want to continue(input 'q' to exit):")
if status != 'q':
count = 0
else:
print('have a nice day!')

十一、作业

作业一:编写登陆接口

  • 输入用户名密码
  • 认证成功后显示欢迎信息
  • 输错三次后锁定
#读取数据库
count = 0 #尝试次数记录
state = 0 #用于判断登陆是否成功
while count < 3:
#读取用户文件和黑名单文件
usersql = open('.//usersql.txt', 'r')
lock_times = open('./lock_sql.txt', 'r')
#输入用户名,密码
username = input('enter your username:')
password = input('enter your password:')
#判断是否存在于黑名单
for n in lock_times.readlines():
if n.strip() == username:
print('the user has locked')
break
#不在黑名单则继续
else:
for i in usersql.readlines():
user_data = i.strip().split('=')
#判断是否有该用户
if user_data[0] == username:
#存在该用户则判断密码是否正确
if user_data[1] == password :
print('welcome back ' ,username)
state = 1
break
else:
print('sorry,password error!')
count += 1
break
#不存在该用户弹出内容
else:
print('sorry,username error!')
#登陆成功则停止循环
if state ==1:
break lock_times.close()
usersql.close() #试错超过三次,列入黑名单
else:
print('the user has locked')
lock_times = open('./lock_sql.txt', 'a')
lock_times.write(username + '\n', )
lock_times.close()

  

作业二:多级菜单
  • 三级菜单
  • 可依次选择进入各子菜单
  • 所需新知识点:列表、字典

  

#制作三级菜单

one_level = ['云南','贵州','四川']
yunnan = ['曲靖','昆明','玉溪']
guizhou = ['六盘水','贵阳','攀枝花']
sichuan = ['成都','峨眉','乐山']
two_level = {'0':yunnan,'1':guizhou,'2':sichuan}
#one level = yunnan:0
kunming = ['盘龙','呈贡','官渡']
qujing = ['马龙','罗平','宣威']
#one_level = guizhou:1
liupanshui = ['liu_1','liu_2','liu_3']
guiyan = ['gui_1','gui_2','gui_3']
#one_level = sichuan:2
chengdu = ['景江','武侯','新都']
ermei = ['峨眉1','峨眉2','峨眉3']
three_level = {'0':{'0':qujing,'1':kunming},
'1':{'0':liupanshui,'1':guiyan},
'2':{'0':chengdu,'1':ermei,}} show = '''
--------------------------
{info}PS:you can type 'b' to back
--------------------------
please choose {level}:''' confirm = 'b'
#选择省
while confirm == 'b': info = []
choice_menu = ['b']
for i in range(len(one_level)):
info.append('%s:%s\n'%(one_level[i],i))
choice_menu.append(str(i)) one_num = input(show.format(info=''.join(info),level='the province')) #选择市
while one_num in choice_menu:
if one_num == 'b':
break
else:
info = [one_level[int(one_num)],'-->\n','--------------------------\n']
choice_menu = ['b']
for i in range(len(two_level[one_num])):
info.append('%s:%s\n' % (two_level[one_num][i], i))
choice_menu.append(str(i)) two_num = input(show.format(info=''.join(info),level=' the country')) #选择地区
while two_num in choice_menu:
if two_num == 'b':
one_num = 'b'
break
else:
info = [one_level[int(one_num)],'-->',two_level[one_num][int(two_num)],'-->\n','--------------------------\n']
choice_menu = ['b']
for i in range(len(three_level[one_num][two_num])):
info.append('%s:%s\n' % (three_level[one_num][two_num][i], i))
choice_menu.append(str(i)) three_num = input(show.format(info=''.join(info),level='the area'))
#确认最终选择
while three_num in choice_menu:
if three_num == 'b':
two_num = 'b'
break
else:
info = [one_level[int(one_num)], '-->', two_level[one_num][int(two_num)], '-->',three_level[one_num][two_num][int(three_num)]]
info.append("\n\nplease type anything to confirm you choice ")
confirm = input(show.format(info=''.join(info),level = ''))
if confirm == 'b':
break
else:
one_num = 'q'
two_num = 'q'
three_num = 'q'

  

Day1[下] - Python基础1 基本语法、流程控制的更多相关文章

  1. python基础02—运算符与流程控制

    运算符与流程控制 运算符 赋值运算 用'='表示,'='的左边只能是变量 算术运算 +.-.*:加.减.乘 /:除法运算,运算结果为浮点数 //:除法运算,运算结果为整数(商) %:求余 **:求幂 ...

  2. Python基础:十一、流程控制(if语句、while循环)

    一.流程控制——if循环 1.第一种语法: if条件: #引号是将条件与结果分开 结果1 #四个空格,或者一个tab键,这个是告诉程序满足条件的话,运行这个结果 结果2 #如果条件是真(True)执行 ...

  3. python基础(3)---流程控制

    流程控制 与C语言不通的是python的流程控制代码块不是用{}花括号表示的,而是强制缩进来控制的:而且缩进必须一致,官方推荐是使用4个空格,不建议使用tab(制表符)做缩进,一是不同的系统tab所占 ...

  4. Python基础(三)--流程控制之if、while、for,break与continue

    一.流程控制之if……else…… if语句是指编程语言中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一 if 条件1: 缩进的代码块 elif 条件2: 缩进的代码 ...

  5. python基础1--基本数据类型+流程控制

      一.基本数据类型 1.整型 int 就是整数   2.浮点型 float 就是小数     3.字符串 3.1.加了单引号.双引号.多引号的字符就认为是字符串 单引号和双引号没有什么区别,多引号用 ...

  6. python 基础 2.2 if流程控制(二)

    一. if  else   1.逻辑值(bool)包含了两个值: ----True:表示非空的值,比如:string ,tuple,list,set,dictonary,所有非空的序列. -----F ...

  7. python 基础 2.1 if 流程控制(一)

    一.if  else 1.if 语句     if expression:   //注意if后有冒号,必须有        statement(s)     //相对于if缩进4个空格 注:pytho ...

  8. Java04-Java语法基础(三)流程控制

    Java04-Java语法基础(三)流程控制 一.数据类型的转换 1.自动转换:在赋值运算中,占字节数大的类型会自动向字节小的类型转换 double d1 = 3.14; int t1 = d1; 2 ...

  9. Java 基本语法---流程控制

    Java 基本语法---流程控制 0. 概述 三大流程控制语句:顺序.选择.循环. 选择结构: if 结构,if - else结构: 多重 if - else 语句 ; 嵌套 if - else 语句 ...

随机推荐

  1. 【bzoj4016】[FJOI2014]最短路径树问题 堆优化Dijkstra+DFS树+树的点分治

    题目描述 给一个包含n个点,m条边的无向连通图.从顶点1出发,往其余所有点分别走一次并返回. 往某一个点走时,选择总长度最短的路径走.若有多条长度最短的路径,则选择经过的顶点序列字典序最小的那条路径( ...

  2. 【bzoj2724】[Violet 6]蒲公英 分块+STL-vector

    题目描述 输入 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 输出 样例输入 6 3 1 2 3 2 1 2 1 5 3 ...

  3. 【Luogu】P3971Alice And Bob(贪心)

    题目链接 容易发现值为x的点只可能从值为x-1的点转移过来,所以我们把原序列连成一棵树,dfs序就是原序列的一种形式. 就可以直接求啦 #include<cstdio> #include& ...

  4. BZOJ 4870 [Shoi2017]组合数问题 ——动态规划 矩阵乘法

    注意到$r<k$ 别问我为什么要强调. 考场上前30分水水. 然后写阶乘的时候大力$n\log {n}$预处理 本机跑的挺快的,然后稳稳的T掉了. 然后就是简单的矩阵乘法了. #include ...

  5. 【bzoj5110】Yazid的新生舞会

    这里是 $THUWC$ 选拔时间 模拟赛的时候犯 $SB$ 了,写了所有的部分分,然后直接跑过了 $4$ 个大样例(一个大样例是一个特殊情况)…… 我还以为我非常叼,部分分都写对了,于是就不管了…… ...

  6. mybatis读取oracle中blob

    controller: byte[] blob = commonService.getPersonImage(bean.getIdCard()); String base64 = new String ...

  7. Linq技巧2——限制返回数据中的继承类型

    假如有像下面这样的一个模型, 怎样在查询时仅仅需要的Cars呢? 这样的几个继承关系的实体中,查询时Where 条件可以加入OfType<SubType>(),你可以这样来写: var o ...

  8. js函数的四种调用方式以及对应的this指向

    一.函数调用,此时this是全局的也就是window 1 var c=function(){ 2 alert(this==window) 3 } 4 c()//true 二.方法调用 var myOb ...

  9. python 修饰器 最好的讲解

    Python的修饰器的英文名叫Decorator,修饰器就是对一个已有的模块做一些“修饰工作”,比如在现有的模块加上一些小装饰(一些小功能,这些小功能可能好多模块都会用到),但又不让这个小装饰(小功能 ...

  10. C 语言 文件读写

    在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之.一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:type ...