修武县 万荣县 疏附县 缙云县 乌兰察布市 广丰县 项城市 阆中市 永仁县 乐都县 呼图壁县 泾源县 玉门市 龙山县 哈尔滨市 杭州市

绝命毒师_Python基础

标签:明明知道 天天象棋31期残局破解

速成课

和Python解释器对话,你输入表达式,它返回计算结果。多做几次就产生了一个清晰的读取-求值-输出循环。

Python并不要求每个表达式都打印一个结果--赋值语句就不会在屏幕上打印任何东西。虽然不支持++--操作独步天下_2018年最新新闻网但是Python有一个内置方法**可以用来求冥。在命令行里输入python可以开启交互模式,试着聊会儿天,当你决定退出的时候按下Control-D

布尔值

布尔常量包括TrueFalse,6个关系操作符(>、 <、 ==、 !、 ||、 &&)能作用于所有基本单元,可以用表现力更强的字符notorand代替!||,和&&。你也可把关系表达式连在一起,像min < mean < max这样的写法完全行的通。

整数

整数和你想的一样,较小的数占4个字节,超级大的数则以长整型的方式存在,没有内存限制。

当数很大的时候,别忘了数字结尾有个L。(我自己定义了factorial函数,它并不是内置的,很快我们就知道怎样定义函数了。)

字符串

字符串的截取,连接和重复等操作都是支持的。

[start:stop]这种新奇的表达式就是切片。[2:6]表示截取子字符串:从位置2开始,到位置5结束。开始索引的默认值是0,结束索引的默认值是字符串长度。两个都不填则返回整个字符串。(Python不需要区分字符和字符串,使用字符时可以把它视作单字符字符串。)

字符串确实是对象,并且有很多方法。你应该猜到这些方法借鉴了其他的面向重生之贼行天下_2018年最新新闻网对象语言。你会猜到一些像findstartswithendswithreplace等等之类的方法,因为一个string类没有这些方法就太无力了。Pythonstring提供了一堆附加方法,令它在脚本和Web领域更有用--像capitalizesplitjoinexpandtabs,和encode等。这里给出一些例子:

列表和元组

Python有两种有序容器:lists(可读可写)和tuples(不可变、只读)。列表用方括号括起来,元组用圆括号。下面给出一些例子。

stringslicing操作也能用在列表上:

你可以用索引标记出一个列表区间,然后用一个新的列表片段替换掉原来的内容:

第一个例子中,5和6之间的空白区域应该被等号右侧的list常量替换掉。第二个例子中street[0:1],即子列表["Castro"],应该被["Eureka","Collingswood","Castro"]覆盖掉。当然,有一个append方法也是很正常的。

注意:列表不要求所有数据都是一种类型。你可以用列表保存一条记录,只要你能搞清楚每个位置放置的数据表示什么含义。

列表有个更保守的兄弟叫元组,可以理解为把方括号换成圆括号的列表常量,基本上没法修改。元组支持切片,但不支持插入:

定义函数

下面是gatherDivisors函数。它包括了if判断,for循环迭代,更重要的是,它表明了代码块是靠着空格和缩进来划分的。

# Function: gatherDivisors
# ---------------------------
# Accepts the specified number and produces
# alist of all numbers that divide evenly
# into it.

def gatherDivisors(num):
      """Synthesizes a list of all the positive numbers
      that evenly divide into the specified num. """
      divisors = []
      for d in xrange(1, num/2 + 1):
           if(num % d == 0):
              divisors.append(d)
      return divisors

语法有些似曾相识。我们并没有忘记写分号(就算你把分号加进去,解释器也会忽视掉这个小错误)。你可能注意到这个实现的某些部分缩进了一次,两次,甚至三次。缩进(以一个制表符或四个空格符的形式存在)使得谁包括谁的层次关系清晰无比。你可能注意到deffor,和if声明后边加了冒号:表明这个声明可能会覆盖一大片代码块。

注意一下几点:

  • #符号用来注释整行,我猜你已经看出来了。
  • 没有任何变量--无论参数还是局部变量--是强类型的。Python有整数、浮点数,字符串等概念。但它不需要你知道这些数据类型会被存储在特殊的变量中。标识上海体育_2018年最新新闻网符可以是任意数据类型,也不被强制永远只是一种类型。比如一个data变量可以等于5,再等于“five”,然后再等于[5,"five",5,[5]],虽然做这种事情没什么好处,Python支持这个。
  • 三重双引号内的字符串可以理解成允许换行的字符串常量,如若字符串常量是def后面第一个表达式,它会被认定为一种解释性文本--和注释不同,它被展示给使用者,告诉他函数是做什么的。
  • for循环和其他语言不同。不同于用一个专门的整数计数,for循环通过一个迭代对象来实现重复。迭代子(也就是gatherDivisors函数中的d)绑定了迭代对象中的每个元素,直到所有元素都遍历了一遍。迭代对象有多种表现形式,list最为常见。我们也可以迭代字符串,或者sequences(实际上就是只读的列表),或者dictionariesPython版的C++hash_map)。

模块化

当你处理一个规模大到需要把程序拆分的问题,你可能想把函数放在文件里--文件作为模块(有点像Java里的packagesC++里的libraries)来互相调用。

我们只要把之前的gatherDivisors函数写在一个叫divisors.py的文件里。然后在存放divisors.py的目录下边儿启动python,接着你可以导入divisors模块,你也可以导入模块内部的函数。看:

如果你想把你写的所有代码都设计成独立的脚本来运行--也就是一个独立的可解释程序--那么你可以把所有有意义的函数捆在一起放在一个单独的文件里,保存这个文件,然后把这个文做成可执行的东西(比如,chmod a+x narcissist.py)。

这里是一个简明的程序,打印出前15(调用者提供的数字)个水仙花数(如果你忘记水仙花数的定义,不妨谷歌一下):

#!/usr/bin/env python
# encoding: utf-8
# 这是一个简单的打印脚本
# 前n个水仙花数, n从命令行传入
import sys

def numDigits(num):
    """返回num的位数, 从0开始但是不包括0。"""
    if (num == 0):return 1
    digitCount = 0
    while(num &强军战歌_2018年最新新闻网gt; 0):
        digitCount += 1
        num /= 10
    return digitCount

def isNarcissistic(num):
    """只有当num是水仙花数时才返回True。"""
    originalNum = num
    total = 0
    exp = numDigits(num)
    while(num > 0):
        digit = num % 10
        num /= 10
        to欧锦赛_2018年最新新闻网tal += digit ** exp
    return total == originalNum

def listNarcissisticNumbers(numNeeded):
    """查找并且打印出前"numNeeded"个水仙花数。"""
    numFound = 0
    numToConsider = 0
    print "这是前 %d 个水仙花数。" % numNeeded
    while(numFound < numNeeded):
        if (isNarcissistic(numToConsider)):
            numFound += 1
            print numToConsider
        numToConsider += 1
    print "Done!"

def getNumberNeeded():
    """解析命令行参数来决定打印几个水仙花数"""
    numNeeded = 15
    if len(sys.argv) > 1:
       try:
           numNeeded = int(sys.argv[1])
       except:
           print "No-integral argument encountered... using default."
    return numNeeded

listNarcissisticNumbers(getNumberNeeded())

上面的模块有五个表达式。前四个是def表达式--函数定义--作用是把函数的名字和一些代码绑定在一起。第五个表达式是函数调用,求值后会产生我们感兴趣的输出。它依赖于以下事实:前四个表达式先于它发生,所以当Python环境设法调用listNarcissisticNumbers的时候,listNarcissisticNumbersgetNumbersNeeded已经有了含义,并且可以通过代码跳转过去。

快速排序和列表推导

下面是一个熟悉的排序算法,说明了原位列表初始化技术。

# 说明了怎样使用列表切片、列表连接和列表推导来做一些有意义的事情。
# 这个版本的快速排序效率不是最好的,因为各级都需要执行两次而不是一次。

def quicksort(sequence):
    """快速排序的经典实现用到了列表推导,并且假定传统的关系操作有效。而这种特殊实现的主要缺陷是
需要排序两次而不是一次。
""" if(len(sequence) == 0):return sequence front = quicksort([le for le in sequence[1:] if le <= sequence[0]]) back = quicksort([gt for gt in sequence[1:] if gt > sequence[0]]) return front + [sequence[0]] + back

>>> from quicksort import quicksort
>詹俊_2018年最新新闻网;>> quicksort([5, 3, 6, 1, 2, 9])
[1, 2, 3, 5, 6, 9]
>>> quicksort(["g", "b", "z", "k", "e", "a", "y", "s"])
["a", "b", "e", "g", "k", "s", "y", "z"]

[le for le in sequence[1:] if le <= sequence[0]],这个被传给第一个递归调用作为参数的东西,叫做列表推导。它只有一行,可以使用一块数据快速创建一个列表。

当前文章:http://0hgpqeul-xingweiquan-com.lialifeinsurance.cn/cnu6yxr/e2b08_154415.html

发布时间:2019-10-17 08:32:33

银河娱乐官网yh163am.com  www.7163.com澳门银河  银河娱乐手机版yh163am.com  普京7日宣誓就任俄罗斯新一届总统 开始六年任期  银河国际手机网址2949  澳门银河官网真人娱乐  919银河优越会  澳门银河真人yh163am.com  澳门银河真人yh163am.com  澳门银河娱乐场yh163am.com  

关于2018年最新新闻网 | 2018年最新新闻网动态 | 联系我们 | 法律声明 | 2018年最新新闻网员工 | 2018年最新新闻网邮箱 | 网站地图

2018年最新新闻网版权所有