zoukankan      html  css  js  c++  java
  • python入门之与用户交互、运算符

    一、程序与用户交互

    1.1 什么是与用户交互

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

    1.2 为什么要与用户交互

    为了让计算机像人一样和用户交流

    例如,当你去ATM机上取钱,那ATM机需要提示你输入用户名和密码,如果密码正确,则告诉你登录成功,如果密码错误,则告诉你失败。

    1.3 如何与用户交互

    交互的本质就是输入和输出的过程

    # 输入
    name = input('请输入你的用户名:')  # 请输入你的登录名
    age = input('请输入你的年龄:')  # 请输入你的年龄
     
    # 输出
    print(name)  # 输出用户名
    print(age)  # 输出年龄
    

    1.3.1 输入input

    # 在python3中input功能会等待用户的输入,用户输入任何内容,都存成字符串类型,然后赋值给等号左边的变量名
    >>> username=input('请输入您的用户名:')
    请输入您的用户名:jack # username = "jack"
    >>> password=input('请输入您的密码:')
    请输入您的密码:123 # password = "123"
     
    # 了解知识:
    # 1、在python2中存在一个raw_input功能与python3中的input功能一模一样
    # 2、在python2中还存在一个input功能,需要用户输入一个明确的数据类型,输入什么类型就存成什么类型
    >>> l=input('输入什么类型就存成什么类型: ')
    输入什么类型就存成什么类型: [1,2,3]
    >>> type(l)
    <type 'list'>
    

    1.3.1 输出print

    >>> print('hello world')  # 只输出一个值
    hello world
    >>> print('first','second','third')  # 一次性输出多个值,值用逗号隔开
    first second third
     
    # 默认print功能有一个end参数,该参数的默认值为"
    "(代表换行),可以将end参数的值改成任意其它字符
    print("aaaa",end='')
    print("bbbb",end='&')
    print("cccc",end='@')
    #整体输出结果为:aaaabbbb&cccc@
    

    1.3.3 输出之格式化输出

    把一段字符串里面的某些内容替换掉之后再输出,就是格式化输出

    1.3.3.1 占位符格式化输出

    占位符类型的格式化输出有%s和%d

    %s可以接收任意类型的变量

    name = 'sean'
    age = 50
     
    print('my name is %s,my age is %s.' % (name, age))  # 利用占位符格式化输出
    my name is sean,my age is 50.
     
    # 尝试调换括号里面的数值
    print('my name is %s,my age is %s.' % (age, name))
    my name is 50,my age is sean.  # 发现结果也更改了
    

    %d只能接收数字类型的变量

    name = 'sean'
    age = 50
     
    print('my name is %s,my age is %s.' % (name, age))  # 利用占位符格式化输出
    my name is sean,my age is 50.
     
    # 尝试调换括号里面的数值
    print('my name is %s,my age is %s.' % (age, name))
    my name is 50,my age is sean.  # 发现结果也更改了
    

    1.3.3.2 .format()方法

    name = input('请输入你的名字:')
    age = input('请输入你的年龄:')
     
    print('my name is {},my age is {}.'.format(name, age))
    my name is kody,my age is 21.
     
    # 尝试更换后面的name和age位置,看前面传入的值是否会调换位置
    print('my name is {},my age is {}.'.format(age, name))
    my name is 21,my age is kody.  # 值得位置确实调换了
     
    # 思考,如何让值得位置不受name和age接收的限制?
    print('my name is {names},my age is {ages}.'.format(ages=age, names=name))
    请输入你的名字:kody
    请输入你的年龄:21
    my name is kody,my age is 21.
    

    1.3.3.3 f-string方法

    此方法是在python3.6以后才有的新特性

    name = input('请输入你的名字:')
    age = input('请输入你的年龄:')
     
    print(f'my name is {name}, my age is {age}.')
    请输入你的名字:kody
    请输入你的年龄:21
    my name is kody, my age is 21.
    

    1.3.3.4 扩展:保留几位小数

    保留两位小数

    a = 12345.2487
     
    print('%.2f' % a)
    12345.25
    

    保留三位小数

    a = 12345.2487
    print('%.3f' % a)
     
    12345.249
    

    1.4 python2和python3中input的区别

    1.4.1 python3中的input()

    python3中input接收用户的输入,无论用户输入的是什么,最终返回的一定是字符串

    name = input('请输入你的用户名:')
    age = input('请输入你的年龄:')
     
    print(name)
    print(type(name))  # 打印name的类型
    print(age)
    print(type(age))  # 打印age的类型
     
    请输入你的用户名:kody
    请输入你的年龄:21
    kody
    <class 'str'>  # 姓名返回的是字符串
    21
    <class 'str'>  # 年龄返回的是字符串
     
    Process finished with exit code 0
    

    1.4.2 python2中的input()

    python2中,我们使用input函数必须先声明要输入的类型

    >>> name = input("请输入你的姓名:")
    请输入你的姓名:sean  # 直接输入姓名,发现下面报错
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "<string>", line 1, in <module>
    NameError: name 'sean' is not defined
    
    >>> input("请输入你的姓名:")
    请输入你的姓名:"sean"  # 在输入的时候加上双引号,声明输入内容为字符串
    'sean'  # 没有报错,正常输出,返回的结果为字符串
     
    >>> input(">>:")
    >>:1  # 直接输入数字1
    1  # 返回结果为数字类型
     
    >>> input(">>:")
    >>:[1,2]  # 输入列表
    [1, 2]  # 返回结果为列表
    

    python2中的raw_inputpython3input()作用相同,返回结果是字符串

    >>> raw_input(">>:")
    >>:sean  # 输入sean
    'sean'  # 返回结果为字符串
     
    >>> raw_input(">>:")
    >>:12  # 输入数字
    '12'  # 返回结果为字符串
    

    1.4.3 总结

    python2中的raw_inputpython3input作用相同 **

    二、基本运算符

    2.1 算数运算符

    基本的加减乘除和数学上的加减乘除使用符号是一致的

    # // 取整
    >>> 9 // 3
    3
    >>> 9 // 2
    4
    >>>
     
    # % 取模(取余数)
    >>> 9 % 3
    0
    >>> 9 % 2
    1
    >>>
     
    # ** 求平方
    >>> 2 ** 2
    4
    >>> 2 ** 3
    8
    

    2.2 比较运算符

    用来对两个值进行比较,返回的是bool值

    2.3、赋值运算符

    2.3.1 增量赋值

    # +=
    a = 1
    a += 3  # a = a + 3
    print(a)
    4
     
    # -=
    a = 1
    a -= 1  # a = a -1
    print(a)
    0
     
    # *=
    a = 2
    a *= 3  # a = a * 3
    print(a)
    6
     
    # /=
    a = 4
    a /= 2  # a = a / 2
    print(a)
    2
    

    2.3.2 链式赋值

    x = y = z = 1
    print(x, y, z)
    1 1 1
    

    2.3.3 交叉赋值

    a = 1
    b = 2
    a, b = b, a
    print(a, b)
    2 1
    

    2.3.4 解压赋值

    l1 = [1, 2, 3, 4, 5, 6]
    a, b, c, d, e, f = l1
    print(a, b, c, d, e, f)
    1 2 3 4 5 6
     
    # 当我们的字母没有数字多呢?
    l1 = [1, 2, 3, 4, 5, 6]
    a, b, c, d = l1
    print(a, b, c, d)  # 报错
     
    Traceback (most recent call last):
      File "G:/python项目/test/test.py", line 2, in <module>
        a, b, c, d = l1
    ValueError: too many values to unpack (expected 4)
     
    # 如何解决?在后面添加*_
    l1 = [1, 2, 3, 4, 5, 6]
    a, b, c, d, *_ = l1
    print(a, b, c, d)
    1 2 3 4
     
    # 在前面添加*_
    l1 = [1, 2, 3, 4, 5, 6]
    *_, a, b, c, d = l1
    print(a, b, c, d)
    3 4 5 6
    

    2.4 逻辑运算符

    逻辑运算符返回的也是bool值

    """
    与 或 非
     
    and or not
    """
     
    a = 1
    b = 2
    c = 3
     
    print(a < b and b > c)  # and:如果有一个式子不符合条件,整条式子都为False
    print(a > b and b < c)
     
    print(a < b or b < c)   # or:只要有一个式子符合条件,整条式子都为True
    print(a > b or b < c)
     
    print(not a < b)  # 取反
     
    print(a < b and b < c or a > c)  # True
     
    print(a > b or b < c and a > c)  # False
    

    2.4.1 连续多个and

    可以用and连接多个条件,会按照从左到右的顺序依次判断,一旦某一个条件为Fase,则无需再往右判断,可以立即判定最终结果就为Fae,只有在所有条件的结果都为True的情况下,最终结果才为True。

    >>> 2 > 1 and 1 != 1 and True and 3 > 2 # 判断完第二个条件,就立即结束,得的最终结果为False
    False
    

    2.4.2 连续多个or

    连续多个相同的or,会按照从左到右的顺序依次判断,一旦某一个条件为True,则无需再往右判断,可以立即判定最终结果为True,只有在所有条件的结果都为False的情况下,最终结果才为False

    >>> 2 > 1 or 1 != 1 or True or 3 > 2 # 判断完第一个条件,就立即结束,得的最终结果为True
    True
    

    2.4.3 混用and、or、not

    not > and > or

    三者混用,需要按照优先级和短路操作符(惰性求值)来运算

    逻辑操作符and 和or 也称作短路操作符(short-circuitlogic)或者惰性求值(lazy evaluation):它们的参数从左向右解析,一旦结果可以确定就停止。例如,如果A 和C 为真而B 为假, A and B and C 不会解析C 。作用于一个普通的非逻辑值时,短路操作符的返回值通常是最后一个变量。因此,逻辑运算符的理解也与C语言中不同。举个例子:

    >>> 3 and 4
    4
    >>> 4 and 3
    3
    >>> 4 or 3
    4
    >>> 3 or 4
    3
    

    在以上例子中,按照C语言对的思维,3 and 4即3与4为3,但是由于是短路操作符,结果为4,是因为and运算符必须所有的运算数都是true才会把所有的运算数都解析,并且返回最后一个变量,即为4;改变一下顺序4 and 3 ,结果也不一样,即为3.

    简而言之:

    多个and条件下都为True,就返回最后一个值

    多个and条件下若是有一个False,就返回False

    而或逻辑(or),即只要有一个是true,即停止解析运算数,返回最近为true的变量,即 3 or 4,值为3;改变顺序4 or 3 即为4.

    简而言之:

    多个or条件下都为True,就返回第一个值

    多个or条件下若是有一个True,就返回True

    2.5 成员运算符

    注意:虽然下述两种判断可以达到相同的效果,但我们推荐使用第二种格式,因为 not in语乂更加明确

    2.6 身份运算符

    需要强调的是:==双等号比较的是value是否相等,而is比较的是i是否相等

    #1. id相同,内存地址必定相同,意味着type和value必定相同
    #2. value相同type肯定相同,但id可能不同,如下
    >>> x='Info Tony:18'
    >>> y='Info Tony:18'
    >>> id(x),id(y) # x与y的id不同,但是二者的值相同
    (4327422640, 4327422256)
     
     
    >>> x == y # 等号比较的是value
    True
    >>> type(x),type(y) # 值相同type肯定相同
    (<class 'str'>, <class 'str'>)
    >>> x is y # is比较的是id,x与y的值相等但id可以不同
    False
    

    2.7 所有运算符的优先级比较

  • 相关阅读:
    solr中facet、group查询
    Solr开发文档
    Java的Properties类和读取.properties文件
    CentOS RPM安装MySQL-5.6
    C#中的 IList, ICollection ,IEnumerable 和 IEnumerator
    Linq to Xml
    Linq查询
    XDocument和XmlDocument的区别
    关于扩展方法
    今天刚刚开通了园子
  • 原文地址:https://www.cnblogs.com/cnhyk/p/11783637.html
Copyright © 2011-2022 走看看