zoukankan      html  css  js  c++  java
  • python入门2

    1.if 语句

    计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。

    比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现:

    1 age = 20
    2 if age >= 18:
    3     print 'your age is', age
    4     print 'adult'
    5 print 'END'

    注意: Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的3,4行 print 语句就构成一个代码块(但不包括第5行的print)。如果 if 语句判断为 True,就会执行这个代码块。

    缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。

    注意: if 语句后接表达式,然后用:表示代码块开始。

    如果你在Python交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车:

    >>> age = 20
    >>> if age >= 18:
    ...     print 'your age is', age
    ...     print 'adult'
    ...
    your age is 20
    adult

    if...else语句

    if age >= 18:
        print 'adult'
    else:
        print 'teenager'

    利用 if ... else ... 语句,我们可以根据条件表达式的值为 True 或者 False ,分别执行 if 代码块或者 else 代码块。

    注意: else 后面有个“:”。

    if age >= 18:
        print 'adult'
    else:
        if age >= 6:
            print 'teenager'
        else:
            print 'kid'

    多个if else嵌套,可以用elif。elif 意思就是 else if。这样一来,我们就写出了结构非常清晰的一系列条件判断。

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

    注意: 这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行了

    2,for循环

    list或tuple可以表示一个有序集合。如果我们想依次访问一个list中的每一个元素呢?比如 list:

    L = ['Adam', 'Lisa', 'Bart']
    print L[0]
    print L[1]
    print L[2]

    如果list只包含几个元素,这样写还行,如果list包含1万个元素,我们就不可能写1万行print。

    这时,循环就派上用场了。

    Python的 for 循环就可以依次把list或tuple的每个元素迭代出来:

    L = ['Adam', 'Lisa', 'Bart']
    for name in L:
        print name

    注意:  name 这个变量是在 for 循环中定义的,意思是,依次取出list中的每一个元素,并把元素赋值给 name,然后执行for循环体(就是缩进的代码块)。

    这样一来,遍历一个list或tuple就非常容易了。

    3.while循环

    while 循环不会迭代 list 或 tuple 的元素,而是根据表达式判断循环是否结束。

    比如要从 0 开始打印不大于 N 的整数:

    N = 10
    x = 0
    while x < N:
        print x
        x = x + 1

    while循环每次先判断 x < N,如果为True,则执行循环体的代码块,否则,退出循环。

    在循环体内,x = x + 1 会让 x 不断增加,最终因为 x < N 不成立而退出循环。

    如果没有这一个语句,while循环在判断 x < N 时总是为True,就会无限循环下去,变成死循环,所以要特别留意while循环的退出条件。

    利用while循环计算100以内奇数的和。

    sum = 0
    x = 1
    while x < 100:
        sum = sum + x
        x = x + 2
    print sum

    4.break退出循环

    用 for 循环或者 while 循环时,如果要在循环体内直接退出循环,可以使用 break 语句。

    比如计算1至100的整数和,我们用while来实现:

    sum = 0
    x = 1
    while True:
        sum = sum + x
        x = x + 1
        if x > 100:
            break
    print sum

    咋一看, while True 就是一个死循环,但是在循环体内,我们还判断了 x > 100 条件成立时,用break语句退出循环,这样也可以实现循环的结束。

     5.continue继续循环

    continue跳过后续循环代码,继续下一次循环。

    假设我们已经写好了利用for循环计算平均分的代码:

    L = [75, 98, 59, 81, 66, 43, 69, 85]
    sum = 0.0
    n = 0
    for x in L:
        sum = sum + x
        n = n + 1
    print sum / n

    现在老师只想统计及格分数的平均分,就要把 x < 60 的分数剔除掉,这时,利用 continue,可以做到当 x < 60的时候,不继续执行循环体的后续代码,直接进入下一次循环:

    for x in L:
        if x < 60:
            continue
        sum = sum + x
        n = n + 1

     对已有的计算 0 - 100 的while循环进行改造,通过增加 continue 语句,使得只计算奇数的和:

    sum = 0
    x = 0
    while True:
        x = x + 1
        if x > 100:
            break
        if x % 2 == 0:
            continue
        sum = sum + x
    print sum

    6.多重循环

    在循环内部,还可以嵌套循环,我们来看一个例子:

    
    
    for x in ['A', 'B', 'C']:
        for y in ['1', '2', '3']:
            print x + y
    x 每循环一次,y 就会循环 3 次,这样,我们可以打印出一个全排列:

    A1
    A2
    A3
    B1
    B2
    B3
    C1
    C2
    C3

    7.dict

    我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学的名字:

    ['Adam', 'Lisa', 'Bart']

    或者考试的成绩列表:

    [95, 85, 59]

    但是,要根据名字找到对应的成绩,用两个 list 表示就不方便。

    如果把名字和分数关联起来,组成类似的查找表:

    'Adam' ==> 95
    'Lisa' ==> 85
    'Bart' ==> 59

    给定一个名字,就可以直接查到分数。

    Python的 dict 就是专门干这件事的。用 dict 表示“名字”-“成绩”的查找表如下:

    d = {
        'Adam': 95,
        'Lisa': 85,
        'Bart': 59
    }

    我们把名字称为key,对应的成绩称为value,dict就是通过 key 来查找 value

    花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。

    由于dict也是集合,len() 函数可以计算任意集合的大小:

    >>> len(d)
    3

    注意: 一个 key-value 算一个,因此,dict大小为3。

    我们已经能创建一个dict,用于表示名字和成绩的对应关系.那么,如何根据名字来查找对应的成绩呢?

    可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key:

    >>> print d['Adam']
    95
    >>> print d['Paul']
    Traceback (most recent call last):
      File "index.py", line 11, in <module>
        print d['Paul']
    KeyError: 'Paul'

    注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。

    要避免 KeyError 发生,有两个办法:

    一是先判断一下 key 是否存在,用 in 操作符:

    if 'Paul' in d:
        print d['Paul']

    如果 'Paul' 不存在,if语句判断为False,自然不会执行 print d['Paul'] ,从而避免了错误。

    二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:

    >>> print d.get('Bart')
    59
    >>> print d.get('Paul')
    None

    请打印出:

    Adam:95

    Lisa:85

    Bart:59

    d = {
        'Adam': 95,
        'Lisa': 85,
        'Bart': 59
    }
    print 'Adam:'+str(d.get('Adam'))
    print 'Lisa:'+str(d.get('Lisa'))
    print 'Bart:'+str(d.get('Bart'))

    注意:

    第一,由于dict是按 key 查找,所以,在一个dict中,key不能重复。

    第二,dict内部存放的顺序和key放入的顺序是没有关系的。dict内部是无序的,不能用dict存储有序的集合。

    第三,dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key,最常用的key是字符串

    和list比较,dict有以下几个特点:

    1. 查找和插入的速度极快,不会随着key的增加而变慢;
    2. 需要占用大量的内存,内存浪费多。

    而list相反:

    1. 查找和插入的时间随着元素的增加而增加;
    2. 占用空间小,浪费内存很少。

    所以,dict是用空间来换取时间的一种方法。

    更新dict

    dict是可变的,也就是说,我们可以随时往dict中添加新的 key-value。比如已有dict:

    d = {
        'Adam': 95,
        'Lisa': 85,
        'Bart': 59
    }

    要把新同学'Paul'的成绩 72 加进去,用赋值语句:

    >>> d['Paul'] = 72

    再看看dict的内容:

    >>> print d
    {'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 59}

    如果 key 已经存在,则赋值会用新的 value 替换掉原来的 value:

    >>> d['Bart'] = 60
    >>> print d
    {'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 60}

    遍历dict

    由于dict也是一个集合,所以,遍历dict和遍历list类似,都可以通过 for 循环实现。

    直接使用for循环可以遍历 dict 的 key:

    >>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
    >>> for key in d:
    ...     print key
    ... 
    Lisa
    Adam
    Bart

    由于通过 key 可以获取对应的 value,因此,在循环体内,可以获取到value的值。

    请用 for 循环遍历如下的dict,打印出 name: score 来。

    d = {
        'Adam': 95,
        'Lisa': 85,
        'Bart': 59
    }
    for key in d:
        print key+':',d[key]

    set

    set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。

    创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:

    >>> s = set(['A', 'B', 'C'])

    可以查看 set 的内容:

    >>> print s
    set(['A', 'C', 'B'])

    请注意,上述打印的形式类似 list, 但它不是 list,仔细看还可以发现,打印的顺序和原始 list 的顺序有可能是不同的,因为set内部存储的元素是无序的。

    因为set不能包含重复的元素,所以,当我们传入包含重复元素的 list 会怎么样呢?

    >>> s = set(['A', 'B', 'C', 'C'])
    >>> print s
    set(['A', 'C', 'B'])
    >>> len(s)
    3

    结果显示,set会自动去掉重复的元素,原来的list有4个元素,但set只有3个元素。

    由于set存储的是无序集合,所以我们没法通过索引来访问。

    访问 set中的某个元素实际上就是判断一个元素是否在set中。

    例如,存储了班里同学名字的set:

    >>> s = set(['Adam', 'Lisa', 'Bart', 'Paul'])

    我们可以用 in 操作符判断:

    >>> 'Bart' in s
    True
    
    >>> 'Bill' in s
    False
    
    >>> 'bart' in s
    False

    看来大小写很重要,'Bart' 和 'bart'被认为是两个不同的元素。

    set的特点

    set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。

    set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。

    最后,set存储的元素也是没有顺序的。

    set的这些特点,可以应用在哪些地方呢?

    星期一到星期日可以用字符串'MON', 'TUE', ... 'SUN'表示。

    假设我们让用户输入星期一至星期日的某天,如何判断用户的输入是否是一个有效的星期呢?

    可以用 if 语句判断,但这样做非常繁琐:

    x = '???' # 用户输入的字符串
    if x!= 'MON' and x!= 'TUE' and x!= 'WED' ... and x!= 'SUN':
        print 'input error'
    else:
        print 'input ok'

    注意:if 语句中的...表示没有列出的其它星期名称,测试时,请输入完整。

    如果事先创建好一个set,包含'MON' ~ 'SUN':

    weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])

    再判断输入是否有效,只需要判断该字符串是否在set中:

    x = '???' # 用户输入的字符串
    if x in weekdays:
        print 'input ok'
    else:
        print 'input error'

    这样一来,代码就简单多了。

  • 相关阅读:
    627. Swap Salary
    176. Second Highest Salary
    596. Classes More Than 5 Students
    183. Customers Who Never Order
    181. Employees Earning More Than Their Managers
    182. Duplicate Emails
    175. Combine Two Tables
    620. Not Boring Movies
    595. Big Countries
    HDU 6034 Balala Power! (贪心+坑题)
  • 原文地址:https://www.cnblogs.com/Yimi/p/7682821.html
Copyright © 2011-2022 走看看