Python入门——与用户交互、运算符

程序与用户交互

什么是与用户交互?

  • 用户交互就是人往计算机中input/输入数据,计算机print/输出结果

为什么要与用户交互?

  • 为了让计算机能够与用户沟通交流

如何与用户交互?

交互的本质就是输入输出

  • 输入(input)和输出(print)

    # 在python3:input会将用户输入的所有内容都存成字符串类型
    	 
    '''
    >>> age = input('age:')
    age:18
    >>> print(age,type(age))
    18 <class 'str'>
    >>>
    >>> print(int(age),type(int(age)))
    18 <class 'int'>
    >>>
    '''
    
    # 在python2:raw_input(),用法与python3的input一摸一样
    
    ```
     # input():要求用户必须输入明确的数据类型,输入的什么类型就存成什么类型
    ```
    
    '''
    > > > age = input('age:')
    > > >      age:18
    > > > print(age,type(age))
    > > >      (18, <type 'int'>)
    '''
    
  • 输出之字符串的格式化输出

    • 什么是格式化输出

      • 把一段字符串中的某些内容用自己定义的内容替换掉之后再输出
    • 为什么要格式化输出

      • 由于经常用到要输出固定格式的内容,普通的输出已经无法满足需求所以需要格式化输出
    • 如何格式化输出

      • 运用占位符来实现格式化输出,如:%、str.format、f''

        # %s 可以接收任意类型的值
        # %d 只能接收int
        print("Life is short, I play %s,%d", %('python', 114514))
        # 以字典的形式传值,打破位置的限制
        res = "我的名字是 %(name)s 我的年龄是 %(age)s" % {"age": 18, "name": 'Umi'}
        print(res)
        
        # str.format python2.6后引入的(兼容性好,推荐使用)
        # 按照位置取值
        res = "我的名字是 {0} 我的年龄是 {1}".format('Umi', 18)
        print(res)
             
        # 按照key=value传值
        name = input('your name:')
        age = input('your age:')
        res = "我的名字是 {name} 我的年龄是 {age}".format(age=age, name=name)
        print(res)
             
        # f'' python3.5后推出
        name = input('your name:')
        age = input('your age:')
        res = f"我的名字是 {name} 我的年龄是 {age}"
        print(res)
        
      • 字符串的格式化输出补充知识

        # f的新用法(了解):{}内的字符串可以被当作表达式运行
        res=f'{10+3}'
        print(res)
        
        f'{print("aaa")}'
        
        # format新增(了解)
        
        # 我的名字是 {Umi} 我的年龄是 18
        print("我的名字是 {{{name}}} 我的年龄是 {age}".format(age=18, name='Umi'))
        
        print('{x}======'.format(x='开始执行'))# 开始执行======
        print('{x}:=<10'.format(x='开始执行')) # 开始执行======
        print('{x}:=>10'.format(x='开始执行')) # ======开始执行
        print('{x:=^10}'.format(x='开始执行')) # ===开始执行===
        # 保留小数后几位
        print('{salary:.3f}'.format(salary=12321.123456)) # 12321.123
        

基本运算符

算数运算符

'''
+、-、*、/(结果带小数)、//(地板除,只保留整数部分)、%(取余、取模)、**(次方)
'''
print(10 + 3.1)
print(10 ** 3) # 十的三次方

比较运算符

'''
>、>=、<、<=、==、!=
'''
# 用于条件判断、返回值是True或者False

赋值运算符

  • 变量的赋值(=)

  • 增量赋值

    '''
    *=、/=、-=、%=、**=、//=
    '''
    age = 18
    # age = age + 1
    age += 1
    print(age)
    
  • 链式赋值

    '''
    x = 10
    y = x
    z = y
    '''
    z = y = x = 10 # 链式赋值
    print(x,y,z)
    print(id(x),id(y),id(z))
    
  • 交叉赋值

    m = 10
    n = 20
    print(m, n)
    '''
    temp = m
    m = n
    n = temp
    print(m, n)
    '''
    m, n = n, m # 交叉赋值
    print(m, n)
    
  • 解压赋值

    salaries=[11,22,33,44,55]
    # 把五个月的工资取出来分别赋值给不同的变量
    '''
    mon0=salaries[0]
    mon1=salaries[1]
    mon2=salaries[2]
    mon3=salaries[3]
    mon4=salaries[4]
    '''
    mon0, mon1, mon2, mon3, mon4 = salaries
    print(mon0, mon1, mon2, mon3, mon4)
    
    # *_ 指后续的值会被*存称一个列表赋值给_,
    # _ 通常指被废弃掉的变量,做一个占位符而已,约定熟成 
    # *_ 只能取两端的值,不能够取中间值,且*在解压赋值中只能出现一次
    mon0, mon1, *_ = salaries # 只取前两个值
    *_, mon0, mon1= salaries # 只取后两个值
    mon0, *_, mon1= salaries # 只取开头第一个值跟最后一个值
    print(mon0, mon1)
    
    # 解压字典默认解压出来的是字典的key
    x,y,z=dic={'name':'Umi','age':18,'sex':'male'}
    print(x,y,z)
    

逻辑运算符

  • 连续多个and:判断条件全为True最终为True,有一个为False,结果就为False

    print(2 > 1 and 1 != 1 and True and 3 > 2)
    # 判断完第二个条件,就立即结束,得的最终结果为False
    
  • 连续多个or:判断条件只要有一个为True最终为True,当条件全为False,结果才为False

    print(2 > 1 or 1 != 1 or True or 3 > 2)
    # 判断完第一个条件,就立即结束,得的最终结果为True
    
  • 优先级not>and>or

    #1、三者的优先级关系:not>and>or,同一优先级默认从左往右计算。
    print(3>4 and 4>3 or 1==3 and 'x' == 'x' or 3 >3) # False
    
    #2、推荐使用括号来区别优先级(方便看)
    '''
    原理为:
    (1) not的优先级最高,就是把紧跟其后的那个条件结果取反,所以not与紧跟其后的条件不可分割
    
    (2) 如果语句中全部是用and连接,或者全部用or连接,那么按照从左到右的顺序依次计算即可
    
    (3) 如果语句中既有and也有or,那么先用括号把and的左右两个条件给括起来,然后再进行运算
    '''
    print((3>4 and 4>3) or (1==3 and 'x' == 'x') or 3 >3) # False
    
  • 短路运算(了解):只要能够确定逻辑运算的结果,后面的判断条件就不会执行,直接返回最终结果

    # 即假设全为and,只要有一个条件为False,那么最终结果就为False,False之后的判断条件均不执行
    # 假设全为or,只要有一个条件为True,那么最终结果就为True,True之后的判断条件均不执行
    

成员运算符(in、not in)

print('Umi' in 'hello Umi') # 判断一个字符串是否存在于一个大字符串中
print(11 in [11,22,33]) # 判断元素是否存在于一个列表中

# 判断key是否存在于字典
print('k1' in {"k1":111,"k2":222}) 

# not in
print(not 'lili' in ['jack','tom','robin']) # 不推荐
print('lili' not in ['jack','tom','robin']) # 推荐,更符合逻辑

身份运算符(is、not is)

  • 比较两个值的id是否相同

    #1. id相同,内存地址必定相同,意味着type和value必定相同
    #2. value相同type肯定相同,但id可能不同,如下
    x='Info Tony:18'
    y='Info Tony:18'
    print(id(x),id(y)) # x与y的id不同,但是二者的值相同
    # (4327422640, 4327422256)
    
    
    print(x == y) # 等号比较的是value
    
    print(type(x),type(y)) # 值相同type肯定相同
    # (<class 'str'>, <class 'str'>)
    print(x is y) # is比较的是id,x与y的值相等但id可以不同
    # False
    
posted @ 2020-03-05 12:47  群青-Xi  阅读(142)  评论(0编辑  收藏  举报