数据类型
#数字: int整型,long 长整型,float浮点型,complex 复数, #布尔:主要用于开发中的判断,True, False 是关键字,加粗的深蓝色 booleam 布尔 --> True, False string字符串,list列表,tuple元组,dict字典 #数据类型转换
数据类型转换
print('hello world') name = Forrest print(name) #input()阻塞型函数,在终端输入值后,程序才往下运行, 输入的值赋给变量 username = input('请输入用户名:') print('哈哈') print(username) print(type(username)) #< class 'str'> #键盘输入的值都是字符串类型 str money = input('请输入金额:') print(int(money)+1000) #将money转化为整型,数字相加 print(money+str(1000)) #将数字转化为字符串,字符串拼接 ''' 以变量名a str --> int int(a), 但如果是‘9.9’而且是字符串类型转int就报错了 srt --> float float(a) int --> str str(a) float --> str str(a) int --> float float(a) float --> int int(a), 浮点型小数点后的数被抹掉了 boole --> int True = 1, False = 0 int,str --> bool : 变量值为:0,''空字符串,转换结果为False,其余为True '''
引号的使用
单引号: 双引号: 三引号: 保留格式输出,多行注释
''' 运算符: = 赋值运算符 + - * / % // ** 算术运算符 // 整除 ** m**n,表示m的n次幂 % 余数,取模,算奇数偶数或倍数时使用 ''' a = 2 b = 3 c = a + b #先计算 a +b, 然后赋值给c #输入一个3位整数,然后打印个位,十位和百位 number = int(input("请输入一个3位整数:")) print("个位数:",number%10) print("十位数:",number//10%10) print("百位数:",number//100) ''' 赋值运算: = , +=, -=, *=,/=, //= , **=, %= ''' a = 5 b = 3 c = 0 a +=1 # a = a+1 print(a,b,c) -->6 3 0 b +=a print(a,b,c) --> 6 9 0 ''' 关系运算符:结果只能位 True, False >, <, >=, <=, ==, !=, is ''' a = 6 b = 8 print(a>b) --> False #字符串的比较,按照ascii码表数值进行 x = 'abc' y = 'abf' print(x == y) #False print(x<y) #True
''' 运算符: and, or, not 结果: ''' a = 1 b = 3 print(a and b) #and两边都是非零数字,结果取and之后的值 --> 3 c = 0 print(c and b)#and两边只要有一个为0,结果都为0 --> 0 print(a>c and a < b) --> True print(a or c) #第一个为真,输出第一个值 -->1 print(c or b) #第一个为加,继续向后判断 -->3
#字符串只能与字符串拼接 #字符串进行格式转换 ''' 常用符号: %s 字符串str %d 整数 digit %f 浮点型 float ''' name = 'Forrest' age = 33 money = 9999.98 # 33岁的Forrest一天挣了9999.98元!! print("%d岁的%s一天挣了%.2f元!!"%(age,name,money)) print("%d岁的%s一天挣了%f元!!"%(age,name,money)) print(f"{age}岁的{name}一天挣了{money}元!!") #output 33岁的Forrest一天挣了9999.98元!! 33岁的Forrest一天挣了9999.980000元!! 33岁的Forrest一天挣了9999.98元!!
''' 二进制:0-1 八进制:0-7 十进制:0-9 十六进制:0-9 a-f 前缀: ob 二进制,0o 八进制,0x十六进制,默认十进制 ''' #十进制转二进制,除2取余数,倒着取数 n = 149 result = bin(n) print(result) --》0b10010101 #十进制转八进制,除8取余数,倒着取数 result = oct(n) print(result) --> 0o225 #十进制转十六进制,除8取余数,倒着取数 result = hex(n) print(result) --》0x95 ''' 十六进制数 n = 0x558 1,如何转成十进制输出 2,如何转成二进制和八进制 已知二进制转十六进制,将二进制从右往左,4位一组分,最后不够4位的补0 已知二进制转八进制,将二进制从右往左,3位一组分,最后不够3位的补0 ''' m = 0X558 #转十进制 result = int(m) print(result) #转二进制 result = bin(m) print(result) #转八进制 result = oct(m) print(result)
''' 位运算,针对二进制进行 & | ^ ~ << >> & 类似于and | 类似于or ^ 按位异或运算,当对应的二进制位相异,结果为1 ~ 按位取反运算,对数据的每个二进制位取反,把1变0,0变1,~x,类似于-x-1 << 左移运算符,运算<<的二进制位全部左移若干位,由<<右边的数字指定了移动位数,高位丢弃,低位补0, a<<2 >> 右移运算符,运算>>的二进制位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移),a>>2 ''' ''' 二进制负数表示: 原码 0110 反码 1001 补码 反码+1 = 1010 1, 已知十进制负数 -7, 求二进制负数 1,正数的原码 ;2,原码取反;3,加1 --》得到的二进制就是二进制负数 -7的进制: 1,先求+7的二进制:0000 0111 原码 2,反码 1111 1000 3,加1 1111 1001 -7的二进制: 1111 1001 2,已知二进制的负数,判断是否是负的二进制的依据,看二进制的最高位:1111 1001,最高位是1则为负数,最高位是0则为正数,求对应十进制 1,二进制 (负的);2,二进制减1 ;3,取反; 4,原码 5,将原码转为十进制,在十进制前面添加负号:- 1111 1010 补码 - 1 ----------------- 1111 1001 --》反码 0000 0110 原码 0000 0110 --》6 -6 3,~5 --》 就是将5 的二进制取反 ''' #移位,一个int整数是32位 n = 12 #左移,数据换算位二进制,类似放到一个隧道中,假如隧道中要保持8位,数据往左移动,最右边空出来的补0 print(n<<1) #24 12*2 print(n<<2) #48 12*2*2 print(n<<3) #96 12*2*2*2 #右移,数据换算位二进制,类似放到一个隧道中,假如隧道中要保持8位,数据往右移动,最左边空出来的补0 print(n>>1) #6 12//2 -->12//2 print(n>>2) #3 12//2//2 --> 12//4 print(n>>3) #1 12//2//2//2 --> 12//8
1,算术运算符 2,赋值运算符 = += -= 3,比较运算符 > < == != 4,逻辑运算符 and or not 5,位运算 6,运算符的优先级,类似于数学运算,这里比较运算优先级低
''' if if ... else .... if ...elif ... else ... ''' 格式1: if 条件: 条件成立执行 格式2: if 条件1: 条件1True,执行语句 elif 条件2: 条件2True,执行语句 elif 条件3: 条件3True,执行语句 else: 1,2,3 条件都不满足,执行语句 ''' if 嵌套结构:可以在每个if条件下都嵌套 if 条件1: #条件1满足,执行下面的if嵌套语句 if 条件1.1: 条件1.1 True,执行语句 else: 条件1.1 False,执行语句 elif 条件2: 条件2 True,执行语句 elif 条件3: 条件3True,执行语句 else: 1,2,3 条件都不满足,执行语句 ''' n =10 m =5 if m >3: print('111111111111') if n < 10: print("9<10") else: print('Not 9<10') print('2222222222222222') else: print('333333333333')
if语句需要一个判断条件,这个判断条件的结果需要一个布尔值。如果此时输入的条件结果不是一个布尔值,在代码执行的过程中,会将这个值自动转换为一个布尔值。
if 1<2: #if语句判断条件需要一个布尔值 print('1小于2') if 'hello': #if 判断条件后没有传入布尔值,会自动把它转为布尔值 print('是否打印这段代码')
提示:python 中转换成为布尔值时,只有0, ' '," ",None,(),[],{} 会被转换为False,其余都会转换为True。
场景:
1,用户名和密码,反复输入
2,计算1-100之间的数字
3,游戏中从重生
4,............
方式:
1,while
2,for
''' while 条件: 要循环执行的代码 #布尔类型的条件 ''' #打印1-10之间的数字 #初始值 n =1 #结束条件 while n <= 10: print('-------n=%d'% n) #变量一定要变化 n += 1 #打印1-50之间能被3整除的数 n = 1 while n < 50: n += 1 if n % 3 == 0: print(n) # break跳出当前循环 count = 0 while True: print('*>'*20) count += 1 if count ==5: break #跳出当前的循环结构
''' 购买商品: 1,手动输入价格和数量 2,累计商品总价 3,累计买了多少件商品 ''' total = 0 count = 0 while True: #先购买商品 price = float(input('请输入价格:')) number = int(input('请输入购买数量:')) #累加计算总价 total += price*number #累加商品件数 count += number #判断是否继续购买 answer = input('当前商品总价:%.2f,是否继续添加商品,按e不再购买'% total) if answer == 'e': #跳出while循环 break print('所有商品总价为:%.2f'% total) print('一共购买了%d件商品'% count)
''' 猜数字小游戏:猜1-100 之间的整数 1,可以猜多次,直到猜对为止,如果猜错了,给出提示 2,统计猜了几次 3,如果1次就猜中,提示:猜对了,运气爆棚,赶快买彩票 如果2-5次猜对,提示:猜对了,运气还可以 6次以上,提示:猜对了,运气一般啊 ''' import random #生成一个随机的整数 ran = random.randint(1,100) #将次数置为零 count = 0 #循环猜数字 while True: #输入猜想值,并转换为整型 guess = int(input("请输入你猜的数字1-100:")) #累加猜测次数 count += 1 if guess == ran : if count ==1: print('猜对了,运气爆棚,赶快买彩票!!') if 2<= count <=5 : print("猜对了,运气还可以!!") if count >=6: print("对了,运气一般啊") #跳出循环 break elif guess < ran: print("你猜小了,请再大一点") else: print("你猜大了,请再小一点") print(f"你共猜了{count}次")
''' 格式: for 变量名 in range(n): 循环体中的内容 range(n), 默认从0开始取值,到n-1结束,默认step是1 range(start,end,[step]), 从start开始,到stop-1结束,step步长,[start,stop) ''' #求1~50 的累加和 sum = 0 for i in range(1,51): sum += i print(sum)
输入用户名密码,三次不成功即提示账号被锁定
#输入用户名密码,三次不成功即提示账号被锁定 username = 'Forrest' password = '123456' count = 0 for i in range(4): count += 1 i += 1 if count <= 3: input_user = input('请输入用户名:') input_passd = input('请输入密码:') if input_user == username and input_passd == password: print('登录成功') break else: print('用户名或密码不正确,%d次错误'% i) continue else: print("你已经输出3次账号密码,账号被锁定,请一小时之后重试")
输入用户名密码,三次不成功即提示账号被锁定,改进版本, python 特有的for ... else,while...else 结构。
else 的特点: 不被中断才会执行
#输入用户名密码,三次不成功即提示账号被锁定,改进版本 ''' for i in range(n): 循环体 else: 如果上面的for循环从0~n-1一直没有被打断,即没有执行break,则执行该语句 ''' username = 'Forrest' password = '123456' for i in range(3): input_user = input('请输入用户名:') input_passd = input('请输入密码:') if input_user == username and input_passd == password: print('登录成功') break else: print(f'用户名或密码不正确,{i+1}次错误') #for循环没有被打断,则执行下面的else语句 else: print("你已经输出3次账号密码,账号被锁定,请一小时之后重试")
''' for in range(n): ---> 可定是有固定次数的 pass while 条件: --->1,既可以实现固定次数的循环;2,不确定次数的循环也可以 pass #不确定次数 while True: pass '''
''' 要求:2颗骰子 1,玩游戏需要金币,没有金币不能玩 2,金币获取方式: 1,玩一次赠送金币1枚 2,充值获取金币,只能充10元,或10元的倍数 3,充10元得20枚金币 4,玩游戏消耗金币,一局消耗5枚金币 5,猜大小:超出6点以上,大, 否则,小 1,猜对一次,鼓励金币2枚 2,猜错没有奖励 6,游戏结束: 1,主动退出 2,没金币退出 7,只要退出就打印金币数,共玩了几局 '''
import random #初始化金币 coins = 0 #初始化计数器 count = 0 if coins < 5 : # 提示金币不够,充值 print('金币不足,请充值再玩!') choice = input('请选择是否充值Y/N:') if choice == 'Y': while True: #开始充值 money = int(input("请输入充值金额:")) if money%10 == 0 and money > 0: coins += money//10 * 20 print(f'充值成功,你现在的金币数{coins}') #充值之后可以开始玩游戏了 print('~~~~~~~~开始进入游戏,Loading>>>>>>>>>~~~~~~~~~') #确认是否开始 answer = input('请确认是否开始游戏y/n:') while coins >= 5 and answer == 'y': #选择开始或退出按钮,一旦开始就扣除金币,退出不扣 #扣除5枚金币 coins -=5 #奖励1枚金币 coins += 1 #生成随机数,2颗骰子,每个都是随机的1~6点 ran1 = random.randint(1,6) ran2 = random.randint(1,6) print('洗骰子完毕,请猜大小') #猜大小,两颗骰子点数相加大于6为大,小于等于6为小 guess = input('请输入你的猜测大还是小:') if (ran1 + ran1 > 6 and guess == '大') or (ran1 + ran1 <= 6 and guess == '小'): print('恭喜你猜对了,你赢得2个金币') coins += 2 else: print('很遗憾,你输了!!') count += 1 print(f'当前还剩下{coins}个金币') answer = input('是否继续游戏y/n:') print(f'退出游戏,欢迎下次光临,你一共玩了{count}次,还剩下{coins}个金币!') break #输入的金额不是10的整数,请重新输入 else: print('输入的金额不是10的整数,请重新输入') else: print('再见,欢迎下次光临!')
import random #初始化金币 coins = 0 #初始化计数器 count = 0 if coins < 5 : # 提示金币不够,充值 print('金币不足,请充值再玩!') choice = input('请选择是否充值Y/N:') if choice == 'Y': while True: #开始充值 money = int(input("请输入充值金额:")) if money%10 == 0 and money > 0: coins += money//10 * 20 print(f'充值成功,你现在的金币数{coins}') #充值之后可以开始玩游戏了 print('~~~~~~~~开始进入游戏,Loading>>>>>>>>>~~~~~~~~~') #确认是否开始 answer = input('请确认是否开始游戏y/n:') while coins >= 5 and answer == 'Y': #选择开始或退出按钮,一旦开始就扣除金币,退出不扣 #扣除5枚金币 coins -=5 #奖励1枚金币 coins += 1 #生成随机数,2颗骰子,每个都是随机的1~6点 ran1 = random.randint(1,6) ran2 = random.randint(1,6) print('洗骰子完毕,请猜大小') #统计玩了几次游戏 count += 1 #猜大小,两颗骰子点数相加大于6为大,小于等于6为小 guess = input('请输入你的猜测大还是小:') if (ran1 + ran1 > 6 and guess == '大') or (ran1 + ran1 <= 6 and guess == '小'): print('恭喜你猜对了,你赢得2个金币') coins += 2 elif coins < 5 : print('当前金币不足5个,请充值') break else: print('很遗憾,你输了!!') print(f'当前还剩下{coins}个金币') answer = input('是否继续游戏Y/N:') print(f'退出游戏,欢迎下次光临,你一共玩了{count}次,还剩下{coins}个金币!') break #输入的金额不是10的整数,请重新输入 else: print('输入的金额不是10的整数,请重新输入') else: print('再见,欢迎下次光临!')
3.3.2跳出循环
break和continue都会出现循环中,不同的是遇到break会跳出整个循环结构,而遇到continue是跳出本次循环,继续下一次的循环
#打印10以内不能被3整除的数 for i in range(1,10): if i%3==0: #跳过本次循环 continue print(i) #结果 1 2 4 5 7 8 #打印10以内不能被3整除的数 for i in range(1,10): if i%3==0: #跳过整个循环 break print(i) #结果 1 2
''' while 循环来实现 ''' n = 1 #n控制行数 while n <=5: #m 控制* 的数量 m = 0 while m < n: #print默认最后换行,加end 去掉换行 print('*',end='') m += 1 n+=1 #打印一行之后换行 print() n = 1 while n <=5: #m 控制* 的数量 m = 5 while m > n: #print默认最后换行,加end 去掉换行 print('*',end='') m -= 1 n+=1 #打印一行之后换行 print() 效果: * ** *** **** ***** **** *** ** *
#定义变量i在1~6之间,即控制行数为5行,不含后边界 for i in range(1,6): j = 0 for j in range(i): print('*',end='') j+=1 i += 1 print() for i in range(1,6): #总行数为5,这里变量值控制在5 j = 5 #引入新的变量来控制打印次数 for k in range(j-i): print('*',end='') j-=1 i += 1 print() 效果: * ** *** **** ***** **** *** ** *