`
美丽的小岛
  • 浏览: 309395 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Python鸟视<转>

 
阅读更多

(二)Python简介

  Python很自由,语法简单,函数库多,我最喜欢Python的就是它的缩进,哈哈,全都要靠缩进来解释。对于我这种只爱读清晰代码的人来说简直太棒了。

  先把一些需要注意的基础给列出来:

  1.'/'除号与c不同,单个'/'是浮点除,两个除号'//'才是整除,而且整除也适用于浮点数,比如3.5//2.2,结果是1.0。

  2.乘方的符号是**,两个乘号,太好玩了。

  3.Python直接就支持大整数运算,我还用C写过大整数的运算算法,好长的。

  4.输入用input,输出用print ,这两个东西都非常灵活,也很好玩。

  5.模块,有点类似于头文件,from math import sqrt,这样就可以直接用sqrt函数了。我记得我一哥们读中学的时候,做解方程的题,一个大题下有10个小题,老师要求每个题都写个"解:原式=",然后,那哥们直接就打个大括号,在括号外面写了个很大的"解:原式="。现在想想,真实有异曲同工之妙啊!这里的math就是那个"解:原式="。

  6.string可以用单引号括起来,也可以用双引号,没什么区别。当然不能单引号,双引号混用,会有syntax error,这是我试过的,我记得我学shell时也试过,哈哈,天性啊!前段时间用C写了个简易的shell,我只想到用宏替换来实现单引号和双引号的混用,但这样会有问题,比如python中' "happy every day" yes '就会出现混乱的情况。但我现在还没想到更好的办法。三个引号用于一个string分成多行来写。

(三)常用数据结构----list(列表)

  list是一种线性的结构,类似于C中的数组,但方法比数组更多。通过对list的一些方法的调用可以实现栈,队列等常见的线性数据结构,可见list是非常灵活的。以下是我总结的list的基础知识点以及一些值得注意的地方:

  1.list可以被修改,包括添加,删除,段添加,段删除等,方法很多,运用很灵活。至于具体的函数到处都可以查到,我就不赘述了。

  2.list中的元素,类型可以不一样。比如 list1=['neilhappy',123]。这一点就与c中的数组,c++中的容器有区别了,这两者在声明过后,容器中的数据类型都是相同的。

  3.list可以通过下标来访问。比如:list1=['a','b','c'],那么list1[0]='a'。还可以访问一段元素,比如list1[0:2],是一个半开半闭的区间,左闭右开,所以结果是['a','b']。还可以加一个参数表示递增的数目:list1[0:2:2],跟matlab很类似。还有一点令我很惊喜,list还可以用负数下标来访问。list1[-1]代表最后一个元素,即'c'。这下strlen,sizeof等函数都可以略微休息下了。

  4.string与list的区别。当然,string可以作为list的元素,更重要的是,string可以直接相连:"neil""happy"。但是list必须要有个+号:['neil']+['happy'],结果是['neil','happy']。这一点需要注意一下。

  5.list的乘法。这又是我很喜欢的一个特性。以往声明c的数组时:int a[100]={1,2,3,4,5,5,5,5,5,5},好几个5,数的眼花,这下好了,在python中:a=[1,2,3,4]+[5]*6。哇,世界清静了。

(四)常见数据结构----tuple(元组)

  tuple与list非常类似,但tuple就像一个被严重限制的list,不准动(被更改),不准变强大(有很多methods),声明方法是tuple1=(1,2,3)或者tuple1=1,2。访问方法与list类似,不再赘述。

(五)常见数据结构----dictionary(字典)

  dictionary,实际上就是一组mapping,一种散列的思想。需要注意的知识点:

  1.形式。dict1={'name':'neil'}。这里的'name'就是key,'neil'就是value。dictionary就是一些key-value键值对的集合。

  2.浅copy与deepcopy。与c++基本类似,浅copy就相当于copy指针,而deepcopy就是在copy指针的同时还要分配相应的内存空间。

  3.访问方法:dict1['name']的结果就是'neil'。注意,在dictionary中没有order的概念,所以就不能像list一样用数字下标去访问,得用key去访问。  

(六)三种数据结构的区别与联系

  python中的容器可以随意的互相包含,这三种数据结构也是如此。list,dictionary可以进行修改,而tuple,string都不能修改,但dictionary的key又必须是不可修改的,即tuple,string。想像一下如果字典的索引都在随意修改会发生什么?

  三种数据结构的声明一定要注意,括号不同,数据结构就不同。list:list1=['neil','happy'],这里是方括号。tuple:tuple1=('neil','happy'),这里是圆括号。dictionary:dict1={'name':'happy'},这里是大括号。这里很容易就写错,有可能会造成比较难找的bug.

(七)常见数据类型----string

  我记得Peter Weinberger说过:"所有的C程序都做同一件事,观察一个字符,然后啥也不干"。可见string的重要性。也跟上面一样,直接写出我的总结和需要注意的地方。

  1.string的访问方法与list,tuple基本一样,string也和tuple一样,不允许修改,但string的方法比tuple强大的多。函数太多,不一一叙述了。

  2.用%来进行string的格式化输出。其实与C也没什么太大的区别。

>>> str1="%s  %s every day"
>>> name=('neil','happy')
>>> print str1 % name
neil  happy every day

(八)基本语句

  没什么其他说的,直接写吧:

  1.print 1,2,3。这个很好玩,打印出1 2 3 。注意有空格。

  2.print a or b.这个语句就相当于if(a!=0){print a};else{print b};极尽简化,太美妙了。

  3.unpack机制:很美妙的机制,在我学C的时候我就想,能否一个函数返回多个值,哈哈,python帮我实现了。

>>> tuple1=(3,2,1)
>>> x,y,z=tuple1
>>> x,y,z
(3, 2, 1)

  4.缩进来断句,我觉得这是python的精华啊。

  5.控制语句:if,elif,else,for,while,break,continue,基本与shell类似,只是要多个冒号,少个括号,多了缩进。简单介绍一下就可以了。

if  statement1:
    print something1
elif statement2:
    print something2
else:
    print something3

  6.x is y.判断x,y是否为同一个对象。举个例子,一目了然。x==y判断x,y是否相等,但相等的两个对象不一定是同一个对象。

>>> x=[1,2,3]
>>> y=[1,2,3]
>>> x==y
True
>>> x is y
False

  7.x in y.判断x是否在y中。很简单,但很实用。

  8.循环中的else语句。当我们想判断一个序列中没有一个数时,用循环常常需要添加一个标志变量来做到,比如:

values=[1,2,3,4,5]
flag=1
for x in values:
        if x==6:
                flag=0
                break
if flag==1:
        print "No!"

  如果改成这样for中的else:

values=[1,2,3,4,5]
flag=1
for x in values:
        if x==6:
                flag=0
                break
else:   
        print "No!"

  我感觉很是奇妙。

  9.list中用for:

>>> [x*x*x for x in range(1,5)]
[1, 8, 27, 64]

(九)学习过程中的一些笔记和注意事项(英文来自《Beginning Python From Novice to Professional 2nd Edition》)

  最后是一些我学习中的笔记和注意事项,比较散,但我觉得比较有用。

  1.空值有多种表现形式:False,0,None,"",{},[],()。

  2.Remember the Python motto of learning: use the source (which basically means read all the code you can get your hands on) .多看源代码。

  3.Blocks are indicated through indentation, and only through indentation in python.

  4.缩进断句使得代码风格比较固定。

  5.Make sure your comments say significant things and don’t simply restate what is already obvious from the code.写注释,绝对不写废话,绝对不简单重复代码所表达的意思。

  6.any object can contain other objects

  7.If a function call returns a sequence, you can index it directly.

  8.要注意list的方法是否修改了list本身,是否具有返回值。这个只有多用才能有较深的印象。

  9.python的强类型与java,c等强类型的比较。python,str1=1,还可以str1="aaa"。但是在c中,int a=1.1会直接截断小数部分。

  10.

>>> 'ad  c    d'.translate(table,'c')
'cd      d'   注意这里删除'c'是先删除'c',然后再进行替换

  11.print u'ærnæringslære' 前面加个u是使用unicode编码

  12.在dictionaries 中,in操作符只能用于key而不能用于value.

  13.Checking for key membership in a dictionary is much more efficient than checking for membership in a list. The difference is greater the larger the data structures are. 但我不明白这是为什么

  14.在python中,交换两个数是如此的简单,x, y = y, x 而三个数的交换本质上还是要用两个数的交换去完成.

  15.变量都需要先赋值才能使用。这也是python强类型的一个标志?

(十)小结

 

http://blog.csdn.net/neilhappy/article/details/7766017

分享到:
评论

相关推荐

    本代码为python游戏小鸟管道,本人一枚学生党,希望大家多多支持谢谢。

    3. 游戏对象:小鸟和管道都可视为游戏对象,每个对象都有自己的属性(如位置、速度)和方法(如移动、碰撞检测)。你可以定义类来表示这些对象,这样可以更方便地管理和操作它们。 4. 用户输入:游戏会监听键盘事件...

    布谷鸟算法

    在自然界中,布谷鸟会将蛋产在其他鸟类的巢中,而这些巢则被视为潜在的解决方案。当巢被发现时,它会被丢弃或替换,这对应于算法中的“劣解替换”策略。布谷鸟算法主要用于解决各种优化问题,如函数优化、工程设计、...

    一个会玩飞扬小鸟的AI !使用 NEAT python 模块_Python_代码_下载

    每个神经网络被视为一个个体,其适应度由其在特定任务中的性能决定。在训练过程中,表现优秀的个体有更高的概率将其基因传递给下一代,而表现不佳的个体则可能被淘汰。此外,NEAT还引入了创新号来保持种群多样性,...

    飞行的小鸟源代码导入eclipse即可运行

    这样,Eclipse会将src目录视为源代码和资源文件的存放地。 4. **运行游戏**:项目成功导入后,你需要找到主类,通常是包含`public static void main(String[] args)`方法的类。运行这个类,Eclipse会启动Java虚拟机...

    基于深度学习的输电线路杆塔鸟窝识别方法研究.pdf

    若IOU在0到0.4之间,则视为背景。 RetinaNet模型中的分类子网络和回归子网络是其核心组成部分。分类子网络负责对目标类别进行预测,而回归子网络则对预测框的四个角点与真实标签框之间的相对偏移进行估计。这样的...

    cifar10和cifar100的python版本无需连接外网

    CIFAR-10与CIFAR-100是两个广泛用于计算机...在CIFAR-10上,达到90%以上的准确率被视为优秀;而在CIFAR-100上,由于类别的增多,超过60%的准确率就算不错。记住,模型的泛化能力和过拟合控制也是优化过程中的关键因素。

    flippy-bird-ai:训练AI代理来玩流行的floppy-bird游戏

    在“飞扬的小鸟”游戏中,每次小鸟成功穿越一个管道或撞击地面,都可以视为一个状态转换,AI代理会根据结果调整其决策。 在强化学习中,Q-Learning是一种常用的方法。我们维护一个Q表,记录每个状态下每个动作的...

    Flappy-bird-deep-Q-learning-pytorch:深度Q学习,用于玩飞扬的鸟游戏

    可以将其视为强化学习应用程序的一个非常基本的示例。 结果如何使用我的代码使用我的代码,您可以: 通过运行python train.py从头开始训练模型通过运行python test.py测试您训练有素的模型训练有素的模特您可以在...

    Ai-FlappyBird:NEAT神经网络的Python实现来玩Flappybird

    在NEAT中,网络结构被视为种群中的基因,通过自然选择和遗传机制进行进化,使得网络在解决特定问题时逐渐优化。 在“Ai-FlappyBird”项目中,Python被选为实现语言,因为Python拥有丰富的库和强大的社区支持,特别...

    vicsek_VICSEK_vicesk_

    在计算机科学和物理学中,Vicsek模型被视为复杂系统和混沌理论的重要研究对象。 在Vicsek模型中,每个个体(例如,一个虚拟的鸟或粒子)具有一定的位置和速度,并且在每个时间步长内会更新其方向。更新的方向不是...

    浮标:COVID飞扬的鸟

    标题“浮标:COVID飞扬的鸟”和描述“浮标 蛇形蓬松鸟”可能是指一个项目或软件,其中“浮标”可能是项目的名称,而“COVID飞扬的鸟”可能代表该项目的一个主题或者特色,它可能与COVID-19大流行期间的数据追踪或者...

    Chrome-Dino-Bot:使用Python构建的可玩Chrome Dinosaur游戏的机器人:snake:

    Chrome Dino Bot 玩无聊的Chrome恐龙游戏的机器人,当没有互联网可用时就会出现。... 如果漫游器发现障碍,它将使用python键盘库按空格键,并让Dino跳转。 到目前为止,最高分是14490 。 欢迎任何建议

    cupbird:配方管理应用程序

    在"杯鸟"中,Python可能被用来处理数据结构(如存储食谱、配料和步骤)、实现用户界面交互以及可能的数据持久化功能,例如将用户的数据存储到数据库中。 食谱管理是应用的核心功能,可能涉及到以下几个方面: 1. *...

    动物单词大全分享.docx

    "python" 是蟒蛇,一种大型无毒蛇类;"pheasant" 野鸡,常被用作狩猎和美食的鸟类;"puma" 美洲豹,又称美洲狮,是一种大型猫科动物。 接下来是“q”开头的单词,包括 "quail" 鹌鹑,小型鸟类,常被用作食物;...

    Chrome-dino-deep-Q-learning-pytorch:玩Chrome恐龙游戏的深度Q学习

    可以将其视为强化学习应用程序的一个非常基本的示例。 结果 默认情况下,还将生成相应的输出视频并将其存储在output / chrome_dino.mp4 输出视频 如何使用我的代码 使用我的代码,您可以: 通过运行python train...

    Jaya-Optimizer-master_Jaya算法_jayaalgorithm_jaya_jaya优化算法_多目标jaya

    源码部分,"源码.zip"文件可能包含了用特定编程语言(如Python、Java或C++)编写的Jaya算法的实现代码。用户可以通过阅读和理解这些代码,了解算法的具体工作原理,并可以根据自己的需求进行修改和扩展,以适应不同...

    Flappy-Bird-Genetic-Algorithm:该程序使用经过遗传算法训练的神经网络来学习如何玩飞扬的鸟

    在这个项目中,每个神经网络的权重和阈值都可以被视为一个个体的基因,而这些基因的组合则构成了种群。通过模拟繁殖、突变和选择等过程,算法不断优化神经网络的性能,使其在游戏中的得分逐渐提高。 Flappy Bird是...

    做自己的搜索引擎——搜索引擎精解案例教程--代码

    在这个过程中,我们可能会使用Python的BeautifulSoup或Scrapy等库来解析和提取网页数据。 2. **数据预处理**:抓取到的网页内容通常包含大量无用或冗余的信息,如HTML标签、广告、JavaScript代码等。预处理阶段包括...

    cifar10数据集.zip

    "压缩包子文件的文件名称列表"中的"cifar-10-python.tar.gz"是一个包含Python版本CIFAR-10数据集的压缩文件。解压后,通常会得到两个文件:`data_batch_1`到`data_batch_5`以及`test_batch`。这些文件存储了图像的...

    基于opencv的二维码畸变矫正(QT程序)

    2. 转灰度:将彩色图像转换为灰度图像,便于后续的边缘检测。 3. 边缘检测:使用`Canny`或`Sobel`等算法找出图像的边缘。 4. 识别二维码:使用模板匹配或机器学习方法找到二维码的边界。 5. 计算仿射变换:找到...

Global site tag (gtag.js) - Google Analytics