先墨守常规写一个简单的hello world!这是所有语言学习的第一点。

Python Hello world

 name="hello world!"
print(name)

  如上代码我们可以看到name="hello world !",是申明了一个变量,变量名是name,并且赋值"hello world !"

  我们可以执行这个.py 文件试试。

  

  可以看到一个简单的小程序就已经运行了,屏幕输出了hello world!

  附上本人使用的python版本:

  

  变量定义的规则:

    • 变量名只能是 字母、数字或下划线的任意组合
    • 变量名的第一个字符不能是数字
    • 以下关键字不能声明为变量名
      ['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=input("What's your name ?")
print("Hello",name,", welcome to Python !")

  本人选用的pycharm来执行语句

  

  运行如下:  手动输入名字时敲下回车,程序执行结果。

  

  通常有些情况下我们要输入密码,不让其显示出来,我们就需要导入一个模块getpass

 import getpass
pwd = getpass.getpass("Please enter your password:")

  这个程序需要在CMD里面运行.

  模块初识

  Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的。

 import sys
print(sys.argv)

  这个运行会显示出文件地址。

  其实我们所写的任何一个.py程序代码都可以当做模块给其他.py文件进行调用。此时只需要我们将文件放到python专门放置模块的文件夹目录,即python的全局环境变量里面就可以了。基本是在一个叫\Python36\Lib\site-packages的路径下。

  这时我们可以在同路径下的__pycache__文件夹下发现一个同名的.pyc文件。

  .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的一种持久化保存方式。


那么又有人会问,如果程序再次修改了,之前保存的.pyc不是已经失效了么?程序再次去寻找pyc还有意义么?这样系统逻辑流程不是不对了?

事实上系统流程没有变,运行的时候程序会记录一下最后一次修改的时间跟pyc文件生成时间就行比对,一个小小的判断便很轻松的解决掉上述的问题。

数据类型简介

    整型&长整型&浮点型

    首先python3开始已经不存在python2的那种,如果数据过大会从int型转换为long型,看张图就明白了.

    

 a=2**100
print(type(a))
b=2.1893411381
print(type(b))

    

    布尔值

    真或假

    1 或 0
 
    字符串
    这边要提醒的是python的字符串在C语言中体现为一个字符数组,每次创建字符串时都是需要新开辟一段联系的内存空间,并且一旦修改字符串的话,就需要再次开辟空间,更重要的万恶的+出现一次就会从内存中占用一段连续的内存空间。切记慎用字符串拼接!
 
    
    字符串格式化输出
    ps:字符串是%s,整数是%d,浮点数是%f
    下面的代码,呈现了3种方式来进行字符串格式化输出
    

 name = input("name:")
age = int(input("age:"))
print(type(age))
salary = input("salary:")
company = input("company:") info1 = '''------employee information1 (%s)---------
name:%s
age:%d
salary:%s
company:%s
''' % (name , name , age ,salary ,company )
print(info1) info2 = '''------employee information2 {_name}---------
name:{_name}
age:{_age}
salary:{_salary}
company:{_company}
'''.format(_name=name,
_age=age,
_salary=salary,
_company=company)
print(info2) info3='''------employee information3 {0}---------
name:{0}
age:{1}
salary:{2}
company:{3}
'''.format(name,age,salary,company)
print(info3) """也可以一直用3个单引号截断 再用加号拼接,不过会占用好几块内存,不推荐试用"""

    逻辑运算表达式简介

    If...else..

    

 actual="Y"
guess=input("Do you trust me ?(Y/N)")
if actual==guess:
print("Thanks !")
else:
print("No, you will regret it !")

    再来一个带elseif的实例

    

 actual_age=25
guess_age=int(input("Guess how old were I ?"))
if actual_age==guess_age:
print("Yes , you are right !")
elif actual_age>guess_age:
print("Nope, greater than your guessing. ")
else:
print("Nope, smaller than your guessing ")

    这里涉及到一个输入的数据类型转换a=int(input("***"));

    While语法:这时候我想让系统只给用户3次机会来玩这个游戏超过3次显示猜测次数过多,怎么做呢?

    

 actual_age=25
count=0
while count<3:
guess_age=int(input("Guess how old were I ?"))
if actual_age==guess_age:
print("Yes , you are right !")
break
elif actual_age>guess_age:
print("Nope, greater than your guessing. ")
else:
print("Nope, smaller than your guessing ")
count+=1
if count==3:
print("You have tried too many times.")

    Else讲解:这里重点说一下最后的count==3的问题,其实作为一门更优美更简介的语言,python提供了另外一个写法

    

 actual_age=25
count=0
while count<3:
guess_age=int(input("Guess how old were I ?"))
if actual_age==guess_age:
print("Yes , you are right !")
break
elif actual_age>guess_age:
print("Nope, greater than your guessing. ")
else:
print("Nope, smaller than your guessing ")
count+=1
else:
print("You have tried too many times.")

    如果此时希望让系统没输入3次就提示问一下要不要继续玩下去,又该怎么做呢?

    

 count=0
myage=25
while count <3:
guessage=int(input("Guess my age :"))
if guessage==myage:
print("Yes, you got it !")
break
elif guessage>myage:
print("come on ! That's too old !")
else:
print("um, thanks for your appreciation but i am not a child")
count=count+1
if count==3 :
continue_guessing=input("Do you wanna play this game contineously ?(Y/N) :")
if continue_guessing=="Y":
count=0
else: print("Thanks for your playing .")

    For语法:

    首先来个简单的循环10次的语法:

    

 for i in range(10):
print("This is for rotation : ",i)

    输出结果:

    This is for rotation : 0
    This is for rotation : 1
    This is for rotation : 2
    This is for rotation : 3
    This is for rotation : 4
    This is for rotation : 5
    This is for rotation : 6
    This is for rotation : 7
    This is for rotation : 8
    This is for rotation : 9

    此时想让这个程序隔一个数字输出一次,我们该怎么做?这里就不卖关子了,直接贴上python的语法

    

 for i in range(0,10,2):
print("This is for rotation : ",i)

     大家现在应该能猜到怎么使用for语法了

     for i in range(x,y,z)

     默认的z不输入是1,x是起始位置,y是循环的终点,z是每次循环的跨度。

     所以我们可以写这样一句来代替

for i in range(1,10,2):
print("This is for rotation : ",i)

     我想大家都应该知道输出结果是什么了

 This is for rotation : 1
 This is for rotation : 3
 This is for rotation : 5
 This is for rotation : 7
 This is for rotation : 9

    break与continue:

    在返回到for循环的第一个语法,如果想让系统在大于7的时候直接跳出不循环,并且3的时候也不输出结果,如何实现?

    

 for i in range(10):
if i>7:
break
elif i==3:
continue
else:
print("This is for rotation : ",i)

Python基础1(2017-07-16)的更多相关文章

  1. 【python基础】第07回 运算符和流程控制 2

    本章内容概要 1.逻辑运算符补充 2.循环结构 本章内容详解 1.逻辑运算符补充 两边都不为0的情况 or 直接取前面的值 and 直接取后面的值如果存在0的情况 and 直接取0 or 直接取非0 ...

  2. python最全学习资料:python基础进阶+人工智能+机器学习+神经网络(包括黑马程序员2017年12月python视频(百度云链接))

    首先用数据说话,看看资料大小,达到675G 承诺:真实资料.不加密,获取资料请加QQ:122317653 包含内容:1.python基础+进阶+应用项目实战 2.神经网络算法+python应用 3.人 ...

  3. 十六. Python基础(16)--内置函数-2

    十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...

  4. python 列表推导式 - python基础入门(16)

    截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率更高. 一.什么是推导式 推导式是从一个或者多个 ...

  5. Python基础教程 - Tdcqma

      1.1 普通字符串 1.21 错误与异常 1.41 XXXXXX 1.61 XXXXXX 1.81 XXXXXX 1.101 XXXXXX 1.2 转义字符串 1.22 装饰器         1 ...

  6. (路-莫)-Python基础一

    一,Python介绍 1,python的出生与应用 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打 ...

  7. 第一篇:python基础

    python基础   python基础 本节内容 python起源 python的发展史 为什么选择python3 第一个python程序 变量定义 表达式和运算符 用户输入 流程控制 判断 流程控制 ...

  8. Python基础-week05

    本节大纲:Author:http://www.cnblogs.com/Jame-mei 模块介绍 time & datetime模块 random os sys shutil json &am ...

  9. python基础day1

    一.python介绍 1.1简介 Python  (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum ...

  10. python基础语法及知识点总结

    本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...

随机推荐

  1. vue.js自定义组件directives

    自定义指令:以v开头,如:v-mybind. <input v-mybind /> directives:{ mybind:{ bind:function (el) { el.value ...

  2. haploview出现“results file must contain a snp column”的解决方法

    将plink文件用“--recode HV ”的参数生成即可 /software/plink --file yourfile --recode HV --snps-only just-acgt --o ...

  3. Good Bye 2018 A. New Year and the Christmas Ornament

    传送门 https://www.cnblogs.com/violet-acmer/p/10201535.html 题解: 这题没什么好说的,读懂题意就会了. 比赛代码: #include<ios ...

  4. Circular view path xxx would dispatch back to the current handler URL,Check your ViewResolver setup

    Circular view path xxx would dispatch back to the current handler URL 通过原因分析,造成问题有两个因素:1). 缺省转发, 2). ...

  5. 2、编程工具IAR、烧写工具SmartRF的使用

        IAR可以生成hex文件,SmartRF烧写hex文件到CC2530单片机. [IAR] 主要步骤:创建workspace.新建工程Project.新建文件(C源件).C源件Add到Proje ...

  6. windows下ngnix+php配置

    1.需要工具: 下载ngnix  网址:http://nginx.org/ 下载:RunHiddenConsole 第二步 将下载文件解压后,将RunHiddenConsole拷贝到ngnix目录与p ...

  7. hystrix项目实战

    闲话少说: 总共分6步: (1)添加hystrix依赖以及监控的依赖 <dependency> <groupId>org.springframework.cloud</g ...

  8. Luogu P2519 [HAOI2011]problem a

    题目链接 \(Click\) \(Here\) \(DP\)神题.以后要多学习一个,练一练智商. 关键点在于把"有\(a_i\)个人分数比我高,\(b_i\)个人分数比我低"这句话 ...

  9. 序列化serialize与反序列化unserialize

    有利于存储和传递value(除了resource类型外),却不会丢失其原有类型和结构. serialize序列化时会调用魔术方法__sleep(); unserialize反序列化时会调用魔术方法__ ...

  10. qml: 打包 和 发布

    Qt 提供了打包工具windeployqt, 利用该工具可以很方便的解决qt的依赖问题(注:通过实际验证,发现该工具只能解决大部分的依赖问题,不知道是不是本人 没有正确的使用的问题). qt源码编译r ...