day3:运算符和变量

1.变量

1.什么是变量

变量是在程序开辟空间存储数据用的

2.怎么声明变量

1)语法

变量名 = 值

2)说明

变量名 - 程序员自己命名;
(要求)是标识符,不能是关键字
(规范)遵守PEP8命名规范-变量名中所有的字母都小写,如果变量名由多个单词组成,单词之间
由下划线隔开
见名知意 - 看见变量名大概知道变量中存储的是什么数据
= - 赋值符号,将右边的值赋给左边的变量
值 - 任何有结果的表达式,可以是具体的数据也可以是赋值过的变量。也可以是运算表达式。
"""
第一次给变量赋值,第二次叫修改变量的值

abc = 'abc'
print(abc)
print('abc')

同一个变量可以存储不同类型的值

变量必须先声明/赋值在使用

3)同时声明多个变量,赋相同的值:变量名1= 变量名2 = 变量名3 = 。。。= 100
a = b = c = 100
print(a,b,c)
4)同时声明多个变量,赋不同的值(注意:变量的个数要和值的个数保持一致)
name, age, gender = '小明', '18', '女'
5)声明变量和给变量赋值的原理

先在内存中开辟空间存储数据(内存空间的大小由数据的大小动态分配),然后再将保存数据的内存空间的地址赋给变量
用一个变量给另一个变量赋值的时候,实质是将变量中的地址赋给新的变量

num = 100
print(id(num)) # 获取变量中数据在内存中的地址
num = 'abc'
print(id(num))
name = 19,18,17#此时name为一个元组
print(name)

2.运算符

1.逻辑运算符:(所有的逻辑运算符的运算对象是bool,结果也是bool)

"""

1)and:逻辑与运算

a.如果两个都为True结果才是True,只要有一个是False结果就是False
True and True ->True
True and False ->False
False and True ->False
False and False ->False
用一个变量保存学生的绩点,一个变量保存学生的操评分;写一个条件来判断学生是否能拿奖学金
1)奖学金条件:绩点不低于3.5,操评分至少90分
grade = 4
score = 88
条件1:grade >= 3.5 条件2:score >= 90
b.什么时候用:当希望多个条件同时满足的时候,就用and将多个条件连接。and相当于生活中的并且

2)or :逻辑或运算

a.运算规则:两个条件都为False结果才是False,只要有一个是True结果就是True
True and True ->True
True and False ->True
False and True ->True
False and False ->False
b.什么时候用:当希望多个条件只要有一个满足的时候,就用or将多个条件连接,or相当于生活中的或者

3)not:逻辑非运算

a.运算规则:True变False,False变成True
not True -> False
not False -> True
b.什么时候使用:对某个条件进行否定

4)短路操作

逻辑与运算的短路操作:当and前面的表达式的值是False的时候,程序不会再去执行and后面的表达式
逻辑或运算的短路操作:当or前面的表达式的值是True的时候,程序不会再去执行or后面的表达式
"""
num = input()
num % 2 == 0 or num % 5 == 0
num % 2 == 0 and num % 5 == 0 # 如果能同时被两个数整除,那么一定能被两个数的最小公倍数整除。
(num % 3 == 0 or num % 7 == 0) and num % 10 !=3

2.赋值运算符:=, +=, -=, *=, /=, %=, **=, //=

"""
不管是什么样的赋值运算符,最终的操作都是给变量赋值;所以赋值运算的左边必须是变量。
1)=:将右边的值赋给左边的变量
2)复合的赋值运算符:先将赋值符号左边变量中的值取出来然后进行指定的运算,最后将运算结果再重新赋值给左边的变量。
注意:复合赋值运算符的左边必须是已经赋值过的变量。
"""

3.位运算

位运算操作是数字补码的每一位;位运算因为是直接操作计算机存储空间的每一位,所以执行效率比一般的运算高

1.位运算:&(按位与运算),|(按位或运算),~(按位取反),^(按位异或),<<(左移),>>(右移)

"""

1)数字1 & 数字2 -> 两个数字补码上相同位置上的数,如果都是1结果就是1,如果有一个是0结果就是0

1 & 1 -> 1
1 & 0 / 0 & 1 / 0 & 0 -> 0

2)按位或运算

数字 1 | 数字2 -> 两个数字补码上相同位置上的值如果都是0结果才是0,只要有一个1结果就是1
1 | 1 / 1 | 0 / 0 | 1 -> 1
0 | 0 -> 0

3)按位取反

~数字 -> 将数字补码上每一位的值由0变成1,1变成0.

4)按位异或

数字1 ^ 数字2 ->两个数补码上相同位置上的值,如果相同结果是0,不同结果是1
一个数异或同一个数两次,结果就是这个数本身(可以做简单的加密应用,比如先将密码与它异或,再将其异或密码还原)

5)左移

数字 << N -> 让数字的补码整体向左移动N位,低位用0补充 -> 数字 * (2**N)

6) 右移

数字 >> N -> 让数字的补码整体向右移动N位,正数高位补0,负数高位补一 ->数字 //(2**N)
"""

2.运算符的优先级:

数学 -> 比较 -> 逻辑-> 赋值
** > *,/,//,% > +,-
如果有(),先算()里面的

应用:

1.乘以2的次方或者整除2的次方的操作(<<,>>)

  1. 任何数跟1 & 结果不是1就是0,可以用来判断奇偶数。

4.作业

  1. 写出判断一个数是否能同时被3和7整除的条件语句
def decide(num): # 判断能否同时被3和7整除的函数
    if num % 21 == 0:
        return '能够被3和7同时整除'
    else:
        return '不能够被3和7同时整除'
  1. 写出判断一个数是否能够被3或者7整除,但是不能同时被3或者7整除
def other_decide(num): # 判断一个数是否能够被3或者7整除,但是不能同时被3或者7整除
    if ( num % 3 == 0 or num % 7 == 0 ) and num % 21 != 0:
        return '满足条件'
    else:
        return '不满足条件'
  1. 输入年,写代码判断输入的年是否是闰年,如果是输出'True',否则输出'False'
def decide_year(year): # 判断是否是闰年
    if year % 400 == 0 or (year >> 2 == 0 and year % 100 != 0):
        return True
    else:
        return False
  1. 今天上课讲了15000秒的课,编程计算今天上课时间是多少小时,多少分钟,多少秒;以‘XX时XX分XX秒’的方式表示。
    例如: 时间67秒 —> 0时1分7秒
def count_time(time): # 判断时间
    sec = time % 60 # 计算秒数
    hor = time // 60 // 60 # 计算小时
    min = time // 60 % 60 # 计算分钟
    return '今天上课时间是%d小时,%d分钟,%d秒'%(hor,min,sec)
  1. 定义两个变量保存一个人的身高和体重,编程实现判断这个人的身材是否正常!
    公式: 体重(kg)/身高(m)的平方值在18.5 ~ 24.9之间属于正常。
def health(weight,height): # 判断是否健康的函数
    if 18.5 <= weight/ height ** 2 <= 24.9:
        return '正常'
    else:
        return '不正常'

  1. 位运算练习题
    1)表达式0x13 & 0x17的值( 19 )
    2)表达式0x13 | 0x17的值( 23 )
    3)表达式0x13 ^ 0x17的值( 4 )
    1. 若x=12,y=13则x&y的结果是( 12 )
    2. 在位运算中,操作数每右移一位,其结果相当于(B )
      A.操作数乘以2 B.操作数除以2
      C.操作数除以4 D.操作数乘以4
      6).设x 是一个整数(16bit).若要通过x|y使x低度8位置1,高8位不变,则y的二进制数是(0b0000000011111111)

你可能感兴趣的:(day3:运算符和变量)