[[列表]]

  • Python支持复合赋值方式

     >>> a,b = 0,1
     >>> a
     0
     >>> b
     1
    • 于是,Pyhon中,交换变量可以这样写

       >>> a,b = b,a
       >>> a
       1
       >>> b
       0
  • While循环

    • 斐波那契数列

       >>> a,b  = 0,1
       >>> while a <10:    #注意要最后加上冒号
               print(a)    #缩进四格
               a,b = b,a+b 
       ​
           
       0
       1
       1
       2
       3
       5
       8
    • 循环语句用缩进来判断循环体

  • Print()函数输出给定参数的值,与表达式不同

    • 它可以处理多个参数

    • 它输出的字符串不带引号,且各参数之间会插入一个空格————这样更有利于格式化操作

    •  >>> i = 256*256
       >>> print('The value of i is',i)
       The value of i is 65536

    • Pyhon函数会默认输出一个回车但关键字参数'end'可以取消输出后面的换行,或者用另一个字符串结尾

       >>> a,b = 0,1
       >>> while a <10:
           print(a,end=', ')
           a,b = b,a+b
       ​
           
       0, 1, 1, 2, 3, 5, 8,
  • Pyhon有类似C++中三目运算符的语句

     >>> x = 0
     >>> y = 'zero' if x == 0 else 'not zero'
     >>> y
     'zero'
  • if语句

     >>> x = int(input("Please enter an integer :"))
     Please enter an integer :42
     >>> x
     42
     >>> if x < 0:
             x = 0
             print('Negative changed to zero')
         elif x == 0:    #不是C++中的 else if 而是elif
             print('zero')
         elif x == 1:
             print('single')
         else:
             print('More')
     ​
     More
  • map函数

    • 会根据提供的函数对指定序列做映射

    • 用法

      • map(function,iterable,...)

        • 第一个参数function对参数序列中每一个元素调用function函数,返回包含每次function函数返回值的新列表

        • interable 和... 为一个或多个序列

    • 用处:

      • 若输入为一行,例如 6 24 ,将它们分别赋值到a,b中

         >>>a,b = map(int,input().split(' '))
      • >>>def square(x)
        return x ** 2
        >>>map(square,[1,2,3,4,5])
        [1,4,9,16,25]

  • for语句

    • Python的for语句与C或者Pascal中的不同,Pyhton的for语句不迭代算数递增数值,或是给予用户定义迭代步骤和暂停条件的能力(如C)。而是迭代列表或字符串等任意序列,元素的迭代顺序与在序列中出现的顺序一致

      >>> words = ['cat','windows','defenestrate']
      >>> for w in words: #python的for循环只能枚举一堆东西,不能像C++中可以用算术表达式
      	print(w,len(w))
      
      	
      cat 3
      windows 7
      defenestrate 12
  • 要再遍历某个集合时修改集合的内容,应该遍历该集合的副本或创建新的集合

    >>> users = {'Hans': 'active', 'Éléonore': 'inactive', '景太郎': 'active'}#数据结构:字典
    >>> for idx in users:
    	print(idx,users[idx])
    
    	
    Hans active
    Éléonore inactive
    景太郎 active
    • 或者使用字典的函数 items()

    >>> users.items()
    dict_items([('Hans', 'active'), ('Éléonore', 'inactive'), ('景太郎', 'active')])
    >>> for key,value in users.items(): 	#遍历字典
    	print(key,value)
    
    	
    Hans active
    Éléonore inactive
    景太郎 active
  • 字典、集合不能边遍历边修改本身,应该遍历该集合的副本或者创建新的集合

    • 遍历副本

      >>> for user,status in users.copy().items(): #浅拷贝
      	if status == 'inactive':
      		del users[user] #删除值为'inactive'的key
      
      		
      >>> users
      {'Hans': 'active', '景太郎': 'active'}
    • 创建新集合

      >>> active_users = {}
      >>> for user,status in users.items():
      	if status == 'active':
      		active_users[user] = status
      
      		
      >>> active_users
      {'Hans': 'active', '景太郎': 'active'}
  • range()函数

    • 内置函数range()常用于遍历数字列表,该函数可以生成算数极数

      >>> range(1,2)
      range(1, 2)
      >>> list(range(1,10))
      [1, 2, 3, 4, 5, 6, 7, 8, 9]
      >>> for i in range(0,10):
      	print(i)
      
      	
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
    • 倒叙输出

      >>> list(range(9,0,-1))
      [9, 8, 7, 6, 5, 4, 3, 2, 1]
      >>> list(range(9,0,-1))
      [9, 8, 7, 6, 5, 4, 3, 2, 1]
      >>> list(range(9,-1,-1))
      [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
      >>> list(range(9,-1))
      []
      >>> range(10)
      range(0, 10)
      >>> sum(range(4))
      6
      >>> list(range(0,10,3)) 	#第三个参数为步长
      [0, 3, 6, 9]
    • 注意,在向某列表赋值时,这两种方式看似没区别,实则有区别

      • 第一种,使用range()函数

        >>>a = [0 for i in range(10)]
        >>> a
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      • 第二种,使用*

        >>> b = [0]*10
        >>> b
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      • 这两种方式的不同处

        >>> c = [0]
        >>> a = [c for i in range(10)] 	#a列表中的十个元素都是指向c的地址
        >>> a
        [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
        >>> a[0][0] = 1 	#c也被更改了,a列表中的所有元素也被更改了
        >>> a
        [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
        >>> c
        [1]
        >>> b = [c*10] 	#这种方式则不会出现上面的的情况
        >>> b
        [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
        >>> b[0][0] = 2
        >>> b
        [[2, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
        >>> a = [[0] for i in range(10)] #这种写法,a中的元素所指向的地址都不同
        >>> a
        [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
        >>> a[0][0] = 1
        >>> a
        [[1], [0], [0], [0], [0], [0], [0], [0], [0], [0]]

  • **循环中的break,continue语句及else子句

    • 示例——使用for语句与使用break,else子句

      • 使用for语句——输出2到10 的质约数

        >>> for i in range(2,10):
        	flag = False
        	for j in (2,i):
        		if i % j == 0:
        			flag = True
        	if not flag: #注意缩进位置
        		print(i)
        
        		
        2
        3
        5
        7
      • 使用break,else子句——输出2到10 的质约数

        >>> for i in range(2,10):
        	for j in range(2,i):
        		if i % j == 0:
        			break
        	else: #注意缩进位置
        		print(i)
        
        		
        2
        3
        5
        7
    • break语句和C中的类似,用于跳出最近的for或者while循环

    • else子句:循环语句支持else子句;for循环中,可迭代对象中的元素全部循环完时,或while循环循环条件为假时,执行该子句;break语句终止循环时不会执行该语句

      • 示例

        >>> for n in range(2,10):
        	for x in range(2,n):
        		if n %x == 0:
        			print(n,'equals',x,'x',n//x)
        			break
        		else:
        			print(n,'is a prime number')
        
        			
        3 is a prime number
        4 equals 2 x 2
        5 is a prime number
        5 is a prime number
        5 is a prime number
        6 equals 2 x 3
        7 is a prime number
        7 is a prime number
        7 is a prime number
        7 is a prime number
        7 is a prime number
        8 equals 2 x 4
        9 is a prime number
        9 equals 3 x 3
    • continue语句借鉴C语言,表示继续执行下一次迭代:

      >>> for num in range(2, 10):
              if num % 2 == 0:
                  print("Found an even number", num)
                  continue
              print("Found an odd number", num)
      
      Found an even number 2
      Found an odd number 3
      Found an even number 4
      Found an odd number 5
      Found an even number 6
      Found an odd number 7
      Found an even number 8
      Found an odd number 9