Python基础-week01 Python安装/变量/输入/及循环语句使用

 

一.Python介绍

  (1).目前Python主要应用领域:html

  • 云计算: 云计算最火的语言, 典型应用OpenStack
  • WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
  • 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
  • 系统运维: 运维人员必备语言
  • 金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,并且重要性逐年提升。缘由:做为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤为擅长策略回测
  • 图形GUI: PyQT, WxPython,TkInter

  (2).Python在一些公司的应用: java

  • 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬虫、Google广告等项目都在大量使用Python开发
  • CIA: 美国中情局网站就是用Python开发的
  • NASA: 美国航天局(NASA)大量使用Python进行数据分析和运算
  • YouTube:世界上最大的视频网站YouTube就是用Python开发的
  • Dropbox:美国最大的在线云存储网站,所有用Python实现,天天网站处理10亿个文件的上传和下载
  • Instagram:美国最大的图片分享社交网站,天天超过3千万张照片被分享,所有用python开发
  • Facebook:大量的基础库均经过Python实现的
  • Redhat: 世界上最流行的Linux发行版本中的yum包管理工具就是用python开发的
  • 豆瓣: 公司几乎全部的业务均是经过Python开发的
  • 知乎: 国内最大的问答社区,经过Python开发(国外Quora)
  • 春雨医生:国内知名的在线医疗网站是用Python开发的
  • 除上面以外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝 、土豆、新浪、果壳等公司都在使用Python完成各类各样的任务。

 二.Python是怎样的一种语言?

  (1).编译和解释的区别是什么?python

  编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机能够直接以机器语言来运行此程序,速度很快; c++

  而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,因此运行速度是不如编译后的程序运行的快的. 算法

  这是由于计算机不能直接认识并执行咱们写的语句,它只能认识机器语言(是二进制的形式)windows

   

  (2).编译型vs解释型python3.x

  编译型:

  优势:编译器通常会有预编译的过程对代码进行优化。由于编译只作一次,运行时不须要编译,因此编译型语言的程序执行效率高。能够脱离语言环境独立运行。

  缺点:编译以后若是须要修改就须要整个模块从新编译。编译的时候根据对应的运行环境生成机器码,不一样的操做系统之间移植就会有问题,须要根据运行的操做系统环境编译不一样的可执行文件。

  解释型:浏览器

  优势:有良好的平台兼容性,在任何环境中均可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就能够,能够快速部署,不用停机维护。tomcat

  缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。多线程

 

  (3).Python优缺点

  先看优势:

  1. Python的定位是“优雅”、“明确”、“简单”,因此Python程序看上去老是简单易懂,初学者学Python,不但入门容易,并且未来深刻下去,能够编写那些很是很是复杂的程序。
  2. 开发效率很是高,Python有很是强大的第三方库,基本上你想经过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大下降开发周期,避免重复造轮子。
  3. 高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
  4. 可移植性————因为它的开源本质,Python已经被移植在许多平台上(通过改动使它可以工 做在不一样平台上)。若是你当心地避免使用依赖于系统的特性,那么你的全部Python程序无需修改就几乎能够在市场上全部的系统平台上运行
  5. 可扩展性————若是你须要你的一段关键代码运行得更快或者但愿某些算法不公开,你能够把你的部分程序用C或C++编写,而后在你的Python程序中使用它们。
  6. 可嵌入性————你能够把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

再看缺点:

  1. 速度慢,Python 的运行速度相比C语言确实慢不少,跟JAVA相比也要慢一些,所以这也是不少所谓的大牛不屑于使用Python的主要缘由,但其实这里所指的运行速度慢在大多数状况下用户是没法直接感知到的,必须借助测试工具才能体现出来,好比你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是很是夸张了,可是你是没法直接经过肉眼感知的,由于一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数状况下Python已经彻底能够知足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种状况下,固然仍是建议你用C去实现的。
  2. 代码不能加密,由于PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,若是你的项目要求源代码必须是加密的,那你一开始就不该该用Python来去实现。
  3. 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任什么时候刻仅有一个线程在执行,Python的线程是操做系统的原生线程。在Linux上为pthread,在Windows上为Win thread,彻底由操做系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即便在多核CPU平台上,因为GIL的存在,因此禁止多线程的并行执行。关于这个问题的折衷解决方法,咱们在之后线程和进程章节里再进行详细探讨。

 

  (4).Python解释器介绍 

  当咱们编写Python代码时,咱们获得的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就须要Python解释器去执行.py文件。

  因为整个Python语言从规范到解释器都是开源的,因此理论上,只要水平够高,任何人均可以编写Python解释器来执行Python代码(固然难度很大)。事实上,确实存在多种Python解释器。

  CPython

  当咱们从Python官方网站下载并安装好Python 2.7后,咱们就直接得到了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,因此叫CPython。在命令行下运行python就是启动CPython解释器。

  CPython是使用最广的Python解释器。教程的全部代码也都在CPython下执行。

  IPython

  IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所加强,可是执行Python代码的功能和CPython是彻底同样的。比如不少国产浏览器虽然外观不一样,但内核其实都是调用了IE。

  CPython用>>>做为提示符,而IPython用In [序号]:做为提示符。

  PyPy

  PyPy是另外一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),因此能够显著提升Python代码的执行速度。

  绝大部分Python代码均可以在PyPy下运行,可是PyPy和CPython有一些是不一样的,这就致使相同的Python代码在两种解释器下执行可能会有不一样的结果。若是你的代码要放到PyPy下执行,就须要了解PyPy和CPython的不一样点

  Jython

  Jython是运行在Java平台上的Python解释器,能够直接把Python代码编译成Java字节码执行。

  IronPython

  IronPython和Jython相似,只不过IronPython是运行在微软.Net平台上的Python解释器,能够直接把Python代码编译成.Net的字节码。

 

 三.选择Py2.x仍是Py3.x?

  目前大部分的python的程序都基于py2.7+以上写的,可是要学python的话建议从py3.x开始,而且了解py2.x与py.3.x的区别。并推进py2.x向py3.x的使用!

四.Python安装

  1):windows安装

    1、下载安装包

       https: / / www.python.org / downloads /
    2 、安装
       默认安装路径:C:\python27
    3 、配置环境变量
       【右键计算机】 - - 》【属性】 - - 》【高级系统设置】 - - 》【高级】 - - 》【环境变量】 - - 》【在第二个内容框中找到 变量名为Path 的一行,双击】  - - >     【Python安装目录追加到变值值中,用 ; 分割】
     如:原来的值;C:\python27,切记前面有分号

  2):Linux/Mac安装

    无需安装,原装Python环境

    ps:若是自带2.7,请更新至3.x

 

 五.Hello World程序

   print ('Hello world!')
  其余语言版本的hello world,请百度自行查询。
  

六.变量 字符编码

    (1).变量定义的规则:

      • 变量名只能是 字母、数字或下划线的任意组合
      • 变量名的第一个字符不能是数字
      • 如下关键字不能声明为变量名
        ['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']

    (2).变量的赋值

       name1='jame'
       name2='tom'
       print (name1,name2)
       name2=name1
       name1='Jack' #修改name1的值,输入的name1/name2,其中name2的值不会变。   

    (3).编码

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

     显然ASCII码没法将世界上的各类文字和符号所有表示,因此,就须要新出一种能够表明全部字符和符号的编码,即:Unicode

    Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每一个字符设定了统一而且惟一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
    注:此处说的的是最少2个字节,可能更多

    UTF-8,是对Unicode编码的压缩和优化,他再也不使用最少使用2个字节,而是将全部的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

    因此,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),若是是以下代码的话:

    报错:ascii码没法表示中文

1
2
3
#!/usr/bin/env python
  
print  "你好,世界"

    改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:

1
2
3
4
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
print  "你好,世界"

    注意:python3.x默认为utf-8格式,不须要单独为每一个.py文件手动添加。

 

  (4).注释/及其注释的格式

    1):注释类型

      " 注释"

      '''注释'''/""" 注释 """

    2):print ("注释、用户输入、格式化输出

      name=input('name:')

      age = int(input("Age:"))

       job = input("Job:")

       saraly = input("Saraly:")

     info='''

    -----------------info of %s ------------------
    Name:%s
    Age:%d
    Job:%s
    Saraly:%s
    ''' % (name,name,age,job,saraly)


    print (info)

    



    print ('之后采用这种模式打印格式!!!!:')
    info1='''
    ---------------info1 of {_name}----------------
    Name:{_name}
    Age:{_age}
    Job:{_job}
    Saraly:{_saraly}
    '''.format(_name=name,_age=age,_job=job,_saraly=saraly)
    print (info1)


    
info2='''
  
    -------------info2 of {0}-----------------
    Name:{0}
    Age:{1}
    Job:{2}
    Saraly:{3}
    '''.format(name,age,job,saraly)

    print (info2)
 

 

七.用户输入

   

5
6
7
#!/usr/bin/env python
#_*_coding:utf-8_*_
 
 
#name = raw_input("What is your name?") #only on python 2.x
name  =  input ( "What is your name?" )
print ( "Hello "  +  name )

    输入密码时,若是想要不可见,须要利用getpass 模块中的 getpass方法,即:

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
import  getpass
  
# 将用户输入的内容赋值给 name 变量
pwd = getpass.getpass("请输入密码:")
  
# 打印输入的内容
print (pwd)

 

 八表达式if else语句

  (1).if-else

    例如:if name == "alex" and pwd == "cmd":

         print ( "欢迎,alex!" )
       else :
         print ( "用户名和密码错误" )

  (2).if-elif-elif-else

    例如:

      if user_input == my_age:

         print ( "Congratulations, you got it !" )
      elif  user_input < my_age:
         print ( "Oops,think bigger!" )
      else :  #也能够不用else,所有用elif保证条件的准确性,防止不可肯定的因素。
         print ( "think smaller!" )

 

  *外层变量,能够被内层代码使用

  *内层变量,不该被外层代码使用

 

九.表达式for 循环

  最简单的循环10次:

  for in range(10):

     print ( "loop:" , i )
 
  

十.break and continue 

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

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

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

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

 

 

 十一.表达式while 循环

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

  海枯石烂代码

1
2
3
4
5
count  =  0
flag=True
while  True :
     print ( "你是风儿我是沙,缠缠绵绵到天涯..." ,count)
     count  + = 1
      if conut>3:
      flag=False
else:  #while也能够用else,来表示条件不符合走这个分支!!
  print('输入次数过大,请稍后再试!')
  break
 
 
 

 

 

十二.做业

  

 

   1.编写登录接口

    

 1 #Author:Jame Mei
 2 '''第一周的做业:输入用户名密码,认证成功后提示登录成功,输入三次错误后锁定用户。'''
 3 
 4 count = 0   #记录用户输入密码的次数
 5 flag = 1    #标志位
 6 lock = []
 7 user_pass = []
 8 username = input('please input your name:')
 9 
10 #读取黑名单的内容
11 f = open('black_mingdan','r')
12 lock_file = f.readlines()
13 f.close()
14 #将黑名单文件内容做为列表元素追加到列表中
15 for i in lock_file:
16     line = i.strip('\n')
17     lock.append(line)
18 
19 
20 #若输入的用户名在黑名单中,若是在则给出提示信息:用户已经被锁定,请联系管理员。
21 if username in lock:
22     print('User %s Have Been Locked.It is not allow to login,please contact Administrator.' %username)
23 
24 else:
25     while True:
26         count += 1
27         passwd = input("please input your password:")
28         f = open('user_information', 'r')
29         user_file = f.readlines()
30         f.close()
31 
32         for i in user_file:
33             user_pass = i.strip().split(',')
34             # 判断输入的用户名==user_pass[0] and 密码==user_pass[1],若是相等,则提示欢迎信息并退出循环,若是不相等则
35             # 结束本次循环
36             if username == user_pass[0] and passwd == user_pass[1]:
37                 print('welcome user %s login !' % username)
38                 flag = True
39                 break
40             else:
41                 continue
42 
43         # 若flag为真,则用户名和密码输入正确跳出整个循环体,反之,若用户输入密码错误的次数为3,则给出提示信息:用户已经被锁定
44         # 并将username追加到黑名单中
45         if flag is True:
46             break
47         else:
48             if count == 3:
49                 print('User Have Been try 3 times,Have Been Locked')
50                 lock_file = open('black_mingdan', 'a')
51                 # lock_file.write('Have Been Locked User:%s\n' %username)
52                 lock_file.write('%s\n' % username)
53                 lock_file.close()
54                 break
View Code

 

  #优化版:

 1 Author Meijinmeng
 2 '''
 3 2.升级需求:login2.py
 4 能够支持多个用户登陆 (提示,经过列表存多个帐户信息)
 5 用户3次认证失败后,退出程序,再次启动程序尝试登陆时,仍是锁定状态(提示:需把用户锁定的状态存到文件里)
 6 '''
 7 account_pwd={
 8     'jame':{'pwd':'123456','count':0},
 9     'alice':{'pwd':'123456','count':0},
10     'tomcat':{'pwd':'123456','count':0}
11 }
12 while True:
13     account=input("Please your account:").strip()
14     with open('blackdb.txt', 'r') as f:
15         for line in f:     #lock_users = f.read().split('|') 用文件查找替换的思路,若是有大量黑名单下面效率可能会高
16             if account == line.strip():
17                 print('%s already locked,Please contact the administrator!' % account)
18                 exit(0)
19 
20     if account in account_pwd:
21         if account_pwd[account]['count'] > 2:
22             print('Too many input times,locking!')
23             with open('blackdb.txt', 'a+') as f:
24                 f.write('%s\n' %account)    #f.write('%s|' %account) 用换行的方式每行只写1个有点浪费呀
25             break
26 
27         password = input("Please your passord>>>:")
28         if password == account_pwd[account]['pwd']:
29             print("Welcome {_username},login success!".format(_username=account))
30             break
31         else:
32             print ('Your password error,Please try agin!')
33             account_pwd[account]['count']+=1
34             continue
35     else:
36         print ("Your input account never existed ,please try agin!")
37         continue
View Code

 

 

   2.多级菜单并检测输入次数过多

  1 #Author:Jame Mei
  2 university_list = {
  3     "安徽省": {
  4         "合肥": ["中国科技大学", "合肥工业大学"],
  5         "蚌埠":["安徽财经大学","蚌埠医学院"],
  6         "安庆": ["安庆学院"],
  7         "阜阳": ["阜阳学院"]
  8     },
  9     "江苏省": {
 10         "南京": ["南京大学", "南京工业大学"],
 11         "南通": ["南通大学"],
 12         "苏州": ["苏州大学"],
 13     },
 14     "浙江省": {
 15         "杭州": ["浙江大学", "杭州电子科技大学"],
 16         "宁波": ["宁波大学"],
 17         "嘉兴": ["嘉兴学院"],
 18     }
 19 }
 20 
 21 
 22 flag = True  # 标记
 23 try_province = 0  # 次数设置
 24 try_city = 0
 25 try_school = 0
 26 
 27 while flag:  # while循环语句,即在某种条件下执行某段程序
 28     if try_province <3:
 29         province_str1 = "欢迎进入沿海省份"
 30         print(province_str1.center(20, '-'))  # 打印好看一点,处于中心位置
 31 
 32         for province in university_list.keys():  # for in循环遍历,key函数用于判断province是否存在于字典中,如在字典里返回true,不然返回false。
 33             print(province)
 34         print("----------------------------")
 35         province_input = input("请输入省份:")
 36         city_flag = True
 37 
 38         while city_flag:
 39             if try_city<3:
 40                 if province_input.strip() in university_list:
 41                     print("欢迎进入: %s!" % (province_input,))  # 赋值,记得必定要有个逗号
 42                     province_str2 = "欢迎进入沿海地区"
 43                     print(province_str2.center(20, '-'))
 44                     for city in university_list[province_input].keys():
 45                         print(city)
 46                     print("----------------------------")
 47                     city_input = input("请输入城市名称:")
 48 
 49                     school_flag = True
 50                     while school_flag:
 51                         if try_school < 3:
 52 
 53                             if city_input.strip() in university_list[province_input]:
 54                                 print("欢迎进入:%s!" % (city_input,))
 55                                 province_str3 = "欢迎进入沿海大学"
 56                                 print(province_str3.center(20, '-'))
 57                                 for school in university_list[province_input][city_input]:
 58                                     print(school)
 59                                 print("----------------------------")
 60                                 school_input = input("请输入大学名称:")
 61 
 62                                 if school_input.strip() in university_list[province_input][city_input]:
 63                                     print("欢迎进入:%s!" % (school_input,))
 64                                     print("当前位置:%s--%s--%s " % (province_input, city_input, school_input))
 65                                     print("哈哈哈,已经结束啦啦啦")
 66                                     flag = False
 67                                     city_flag = False
 68                                     school_flag = False
 69                                     break
 70                                 else:
 71                                     print("您输入的信息有误,请从新输入!")
 72                                     try_school += 1
 73 
 74 
 75 
 76 
 77                             else:
 78                                 print("你输入的城市信息有误,请从新输入!")
 79                                 try_city += 1
 80                                 school_flag = False
 81 
 82 
 83 
 84                         else:
 85                             print("您输入的次数超过三次了哟,退出!")
 86                             flag = False
 87                             city_flag = False  # 这边注意遗漏
 88                             school_flag = False  # 这边注意遗漏
 89 
 90                 else:
 91                     print("你输入的信息有误,请从新输入")
 92                     try_province += 1
 93                     city_flag = False
 94 
 95             else:
 96                 print("输入超过又三次了哟!,退出!")
 97                 flag = False
 98                 city_flag = False
 99 
100     else:
101         print("输入超过三次,退出!")
102         flag = False
View Code
相关文章
相关标签/搜索