[python]一起学python(1

发布时间:2019-09-25 08:15:02编辑:auto阅读(1464)

    python

    跟很多前端工作者一样,我也常常打听。作为前端,在要懂js的前提下,还要可以学什么其他语言来增加自己的竞争力。
    我看到最多的是node,很多人说前端真正的学好node。已经可以胜任很多工作了。假如想学后端java是需求最大的。
    不过目前来说java的学习成本很高,相对python是一门很好入门的语言,最近也是很火。
    所以我想用一小段时间,快速了解一下python。(本文用的是python3.x)

    数据类型

    先看数据类型(看我们可以pyhton中写什么。)

    1. 整数
    2. 浮点数
    3. 字符串
    4. 布尔值
    5. 空值

    乍一看基本类型和js的差不多。
    在学习过程中我们会多次用到print();类似于js的console,就是打印输出。

    声明

    python的声明没有关键字,声明和赋值写法一样。

    counter = 100 # 整型变量
    miles = 1000.0 # 浮点型变量
    name = "John" # 字符串变量
    flag = True # 布尔类型变量
    
    print(counter) //100
    print(miles)   //1000.0
    print(name)    //"John"
    print(flag)    //True

    这种常用的是动态语言,与之相反的是静态语言。在声明时规定变量的类型。

    int a = 123; // a是整数类型变量
    a = "ABC"; // 会报错,不能把字符串赋给整型变量

    格式化

    相当于占位符,用%符号调用。

    `'Hello, %s' % 'world'
    // 'Hello, world'

    各种占位符

    1. %d 整数
    2. %f 浮点数
    3. %s 字符串
    4. %x 十六进制整数

    其中当用到%时,需要转义一下。%%

    >>> 'growth rate: %d %%' % 7
    'growth rate: 7 %'

    list

    list很像js中的数组。这里叫列表。其实也差不多,就是一个有序的存放数据的表。

    >>> classmates = ['Michael', 'Bob', 'Tracy']
    print(classmates)
    //['Michael', 'Bob', 'Tracy']

    用len()可以查看list的长度(同时也能看字符的长度)

    classmates = ['Michael', 'Bob', 'Tracy']
    name = 'Michael'
    print(len(classmates)) //3
    print(len(name)) //7

    因为是有序的,list中的数据都有自己的索引。索引从0开始。超出后会报错。

    >>> classmates[0]
    'Michael'
    >>> classmates[1]
    'Bob'
    >>> classmates[2]
    'Tracy'
    >>> classmates[3]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list index out of range

    !!比js方便的是list可以调用索引-1直接访问最后一位。

    >>> classmates[-1]
    'Tracy'
    >>> classmates[-2]
    'Bob'
    >>> classmates[-3]
    'Michael'
    >>> classmates[-4]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list index out of range

    list方法

    append在list最后添加数据

    >>> classmates.append('Adam')
    >>> classmates
    ['Michael', 'Bob', 'Tracy', 'Adam']

    insert可以在list指定位置插入数据

    >>> classmates.insert(1, 'Jack')
    >>> classmates
    ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

    pop直接使用删除list最后一位。带上索引删除指定位置。

    >>> classmates.pop()
    'Adam'
    >>> classmates
    ['Michael', 'Jack', 'Bob', 'Tracy']
    
    >>> classmates.pop(1)
    'Jack'
    >>> classmates
    ['Michael', 'Bob', 'Tracy']

    tuple

    tuple是类似list的,可是一旦定义了就不能修改。定义写法用的是()。

    >>> classmates = ('Michael', 'Bob', 'Tracy')
    >>> classmates
    ('Michael', 'Bob', 'Adam')

    一旦尝试通过classmates[1]="tom"。修改tuple,会报错。tuple可以保证一些不需要修改的数据被无意修改。

    dict

    dict类似于js的对象。也就是key-value对的形式存数据。可以用名字快速地找到数据内容。
    写法

    >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
    # js的是用. python用[]
    >>> d['Michael']
    95

    当数据多了之后list的查找速度会变慢,而dict几乎不受影响。可是dict会占用大量空间,是用空间来换取时间的一种方法。
    如果key不存在,dict就会报错:

    >>> d['Thomas']
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'Thomas'

    这时可以用in或者get()来判断该key是否存在。

    # in
    >>> 'Thomas' in d
    False
    # get()
    >>> d.get('Thomas')
    >>> d.get('Thomas', -1)
    -1

    用pop()可以删除dict中一项包括key和value

    >>> d.pop('Bob')
    75
    >>> d
    {'Michael': 95, 'Tracy': 85}

    set

    set与dict类型相似,可是set只存key。可以用add(),remove()来增减。

    # 通过list来传入
    >>> s = set([1, 2, 3])
    >>> s
    {1, 2, 3}
    
    # add()
    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    
    # remove()
    >>> s.remove(4)
    >>> s
    {1, 2, 3}

    if判断

    来到了逻辑判断了,if。条件判断。首先于js不同python的分块不用{}而是用缩进和:(这个要注意)

    age = 20
    if age >= 18:
        print('your age is', age)
        print('adult')
    
    # 加入else
    age = 3
    if age >= 18:
        # 符合条件走这里
        print('your age is', age)
        print('adult')
    else:
        # 不符合条件走这里
        print('your age is', age)
        print('teenager')

    对于else if,python有它的专用缩写

    age = 3
    if age >= 18:
        print('adult')
    elif age >= 6:
        print('teenager')
    else:
        print('kid')

    变量判断

    if x:
        print('True')

    只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。

    input

    终于出现了第一个交互功能--input。用input()程序会让用户输入文本并存放在对应位置,继续完成代码。

    birth = int(input('birth: '))
    # input()参入的字符,为输入时的提醒文本
    # 输入的值会被定义为birth的值,参与if判断。
    if birth < 2000:
        print('00前')
    else:
        print('00后')

    注意input输入的文本类型是字符,字符不能直接用<,>对比。必须要先转成数字。用int()可以把字符转成整数。

    循环

    white

    只要满足white的条件,即为true。就会一直跑循环里的代码。

    sum = 0
    n = 99
    while n > 0:
        sum = sum + n
        n = n - 2
    print(sum)

    在循环内部变量n不断自减,直到变为-1时,不再满足while条件,循环退出。

    循环里的方法

    break
    break可以提前结束循环。

    n = 1
    while n <= 100:
        if n > 10: # 当n = 11时,条件满足,执行break语句
            break # break语句会结束当前循环
        print(n)
        n = n + 1
    print('END')

    continue
    continue是跳过某次的代码直接进入下一次循环。

    n = 0
    while n < 10:
        n = n + 1
        if n % 2 == 0: # 如果n是偶数,执行continue语句
            continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
        print(n)

    for...in..

    for in 可以枚举list或tuple里的数据.

    names = ['Michael', 'Bob', 'Tracy']
    for name in names:
        print(name)
    #顺序输出'Michael', 'Bob', 'Tracy'

    某些场景,python是有提供基本方法的,不需要循环生成。list()可以让有序数据转换为list。range()可以生成一个整数序列

    >>> list(range(5))
    [0, 1, 2, 3, 4]

    场景

    我们可以利用目前了解到的python语法做一款弱智的游戏。猜数字

    import random
    # 用一个dict存放需要的数据
    config = {'maxNum': 100,'minNum': 0,'count':0}
    # 用模块生成随机数,模块是python中很重要的一环
    target = random.randint(config['minNum'],config['maxNum'])
    # 让循环持续发生
    while  True:
        config['count'] += 1
        num = int(input('请输入 %d 至 %d 的整数:' % (config['minNum'],config['maxNum'])))
        if num == target:
            # 当猜对时break跳出循环
            break
        elif num < target:
            config['minNum'] = num
            print('不对,猜小了')
        elif num > target:
            config['maxNum'] = num
            print('不对,猜大了')
    print('猜对了答案是 %d。一共猜了 %d 次' % (target,config['count']))

关键字