Python编程学习-基础笔记01
作者:互联网
python编程课
一、python基础变量和运算
1.1 数据类型和类型转换
数据类型
#数字:
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
'''
引号的使用
单引号:
双引号:
三引号: 保留格式输出,多行注释
1.2 运算符
'''
运算符:
= 赋值运算符
+ - * / % // ** 算术运算符
// 整除
** 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
1.3 逻辑运算
'''
运算符: 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
1.4 格式化输出
#字符串只能与字符串拼接
#字符串进行格式转换
'''
常用符号:
%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元!!
1.5 进制转换
'''
二进制: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)
1.6 位运算
'''
位运算,针对二进制进行
& | ^ ~ << >>
& 类似于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,运算符的优先级,类似于数学运算,这里比较运算优先级低
二、条件判断
2.1 if条件语句
'''
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')
2.2 自动类型转换
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
3.1 while循环
'''
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 #跳出当前的循环结构
3.1.1购买商品计价器
'''
购买商品:
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)
3.1.2猜数字小游戏
'''
猜数字小游戏:猜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}次")
3.2 for 循环
'''
格式:
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)
3.2.1 用户验证
输入用户名密码,三次不成功即提示账号被锁定
#输入用户名密码,三次不成功即提示账号被锁定
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次账号密码,账号被锁定,请一小时之后重试")
3.2.2 用户验证 -->改进版本
输入用户名密码,三次不成功即提示账号被锁定,改进版本, 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次账号密码,账号被锁定,请一小时之后重试")
3.3 for 与while 的对比
'''
for in range(n): ---> 可定是有固定次数的
pass
while 条件: --->1,既可以实现固定次数的循环;2,不确定次数的循环也可以
pass
#不确定次数
while True:
pass
'''
3.3.1掷骰子游戏
'''
要求:2颗骰子
1,玩游戏需要金币,没有金币不能玩
2,金币获取方式:
1,玩一次赠送金币1枚
2,充值获取金币,只能充10元,或10元的倍数
3,充10元得20枚金币
4,玩游戏消耗金币,一局消耗5枚金币
5,猜大小:超出6点以上,大, 否则,小
1,猜对一次,鼓励金币2枚
2,猜错没有奖励
6,游戏结束:
1,主动退出
2,没金币退出
7,只要退出就打印金币数,共玩了几局
'''
Draft版本
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
3.4循环打印图案
3.4.1while 循环来实现
'''
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()
效果:
*
**
***
****
*****
****
***
**
*
3.4.2 for循环实现相同的功能
#定义变量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()
效果:
*
**
***
****
*****
****
***
**
*
标签:01,二进制,Python,编程,金币,--,int,print,input 来源: https://www.cnblogs.com/orange2016/p/16387169.html