python 运算符及循环语句
help(id)
- id(any)–>内存地址address
内存地址可以复用,可以节省内存
id(obj, /)
Return the identity of an object.
This is guaranteed to be unique among simultaneously existing objects.
(CPython uses the object's memory address.)
单词熟记表2
identity 特征,特点,身份,
statement 语句
simultaneously 同时
unique 独一
guaranteed 提供
import 导入
random 随机
integer 整型
sequence 队列,序列
invalid 无效
syntax 语句
Keyword 关键字
arguments 参数
ignore 忽略
string indices must be integers 字符串索引必须为整数
strip 脱光,扒光
运算符
Operator | 运算符 |
---|---|
连接符 | + |
赋值运算符 | = ,+=,-=,*=,/=,… |
算术运算符 | +加 -减 *乘 /除 , **次方 //整除数 %取整余数 |
关系运算符 | ==,>=,<=,!=,is |
逻辑运算符 | and与 \ or或 \ not非 |
位运算 | 与&,或竖分隔,^按位异或,~反,<<左移,>>右移 |
is 同值在交互式(小整数对象池[-5:256]是能复用,大的是不等的),在py源文件里一次性执行,所以是相等的
- ==比较的是内容,is比较的是地址
二进制位bit------------------->>>>>>>>>>>>>8个bit构成一个字节byte
bin( )二进制0b二的N次方相加转十进制,八进制0o八的N次方相加转十进制,0x是十六进制
b = 0b10111
print(int(b)) # 转十进制
c = -8 # 负数需要取反码+1
print(bin(c)) #0000 1000 取反1111 0111 最后为1111 1000
0o6430>>0b110100011000 # 八进制转二进制
6 4 3 0
110 100 011 000
按位运算
https://www.bilibili.com/video/av69060979/?p=32
按位与运算符(&)
参加运算的两个数,按二进制位进行“与”运算。
运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)
即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。
例:3 &5 即 00000011 & 00000101 = 00000001 ,所以 3 & 5的值为1。
按位或运算符(|)
参加运算的两个数,按二进制位进行“或”运算。
运算规则:参加运算的两个数只要两个数中的一个为1,结果就为1。
即 0 | 0= 0 , 1 | 0= 1 , 0 | 1= 1 , 1 | 1= 1 。
例:2 | 4 即 00000010 | 00000100 = 00000110 ,所以2 | 4的值为 6 。
异或运算符(^)
参加运算的两个数,按二进制位进行“异或”运算。
运算规则:参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
即 0 ^ 0=0 , 0 ^ 1= 1 , 1 ^ 0= 1 , 1 ^ 1= 0 。
例: 2 ^ 4 即 00000010 ^ 00000100 =00000110 ,所以 2 ^ 4 的值为6 。
————————————————
三目运算符
格式 : 表达式 if 真 else 假
a = 10
b = 3
c = (a-b) if a>b else (b-a)
print(c)
语句
- 条件判断语句
username = input('请输入你的账户或手机号')
password = input("请输入你的密码:")
if username =='favourite163': #if 0,None都是False,
print('欢迎favourite163登录本网')
else :
print('请登录你的账户')
print('*'*10,'欢迎来到消消乐','*'*10)
level = input('请输入你的级别(lv1,lv2):')
if level == 'lv1':
print ('免费玩')
else:
print ('已经进入付费级别,充值继续玩')
money = int(input('请充值(必须是100的倍数):'))
if money%100 ==0:
print('充值成功')
print('充值成功,金额为:',money)
else:
print ('充值必须是100的倍数,请重新输入充值金额')
random.randint(1,19) # 随机范围内的数字
- if else 参考链接
https://www.bilibili.com/video/av69060979/?p=35
- for循环语句
for i in range(1,10):
print('for循环第{}次循环测试'.format(i))
添加循环后的消消乐游戏
print('*'*10,'欢迎来到消消乐','*'*10)
level = input('请输入你的级别(lv1,lv2):')
if level == 'lv1':
print ('免费玩')
else:
print ('已经进入付费级别,充值继续玩')
for i in range(1,10):
money = int(input('请充值(必须是100的倍数):'))
if money%100 ==0 and money>0:
print('充值成功')
print('充值成功,金额为:',money)
print('需哦幸福游戏吧')
break
else:
print ('充值必须是100的倍数,请重新输入充值金额')
else:
print('充值次数过多,账户锁定')
else: for else结构
如有数据 ,就执行for语句
如没有数据 ,就执行else
无论怎样,else都会执行
pass 占位保证语法正确性,防止error
break 跳出循环
continue 忽略下面语句,跳回循环
- continue 用法
sum = 0
for i in range(10):
if i%3 ==0:
continue #跳过下方的语句,不执行
sum += i
print (sum)
- while循环
i = 0
while i <=10:
print(i)
i +=1
else:
print('大于10不打印')
死循环:
1.变量不变
2.while True或False
3.往开环方向无限接近
i = 0
while i <= 30:
i +=1
if i%3 ==0:
print(i)
else:
pass
else:
print('overgame')
i = 0
while i <= 30:
i +=1
if i%3 ==0:
print(i)
else:
print('overgame')
累加函数
sumt = 0
result = 0
i = 0
while i <=10:
sumt += i
i+=1
result += sumt
print(sumt)
print(result)
嵌套循环
for i in range(1,10):
for j in range(1,i+1):
print("%2d * %2d = %2d" % (j, i, i * j), end = " ")
print()
赌场小游戏:比大小
import random
print('*'*99)
print('欢迎进入澳门赌场')
print('*'*99)
usrname = input ('请输入大名:')
money = 0
answer = input ('确定进入游戏吗(y/n):')
if answer =='y':
money_t = 0
while money<1 or answer2 =='y' :
print('您现在的游戏币为{}'.format(money_t))
n = int(input(('是否充值(100块钱30个币,充值必须是100的倍数):')))
if n%100==0 and n>99:
money = n//100 *30
print ('{}充值成功{}元,获得{}个币'.format(usrname,n,money))
money_t += money
answer2 = input('请问是否继续充值(y/n):')
if answer2=='y':
print ('{}已充值{}元,获得{}个币'.format(usrname,n,money))
else:
print('请享受你的enjoy life')
print('一局游戏扣除1个币')
else:
print('请充值正确的数额(100块钱30个币,充值必须是100的倍数):')
else:
print ('您的游戏币还有{}欢迎下次再来参与游戏'.format(money_t))
print('现在有{}个币'.format(money_t))
while money > 1:
t1 = random.randint(1,6) #randint包含6,range不包含
t2 = random.randint(1,6)
result = input('请猜大小,大的是哪个(t1\\t2):')
if result=='t1':
if t1>t2:
print('恭喜你答对了,奖励你2个币')
money += 1
else:
print('很遗憾,你答错了呢')
money -= 1
answer3 = input('请问继续下一局么(y\\n):')
if answer3=='y':
pass
else:
print ('您的游戏币还有{}欢迎下次再来参与游戏'.format(money_t))
break
else :
if t2>t1:
print('恭喜你答对了,奖励你2个币')
money += 1
print('继续下一局吧,没输不准停止哦,考验你运气的时间来啦')
else:
print('很遗憾,你答错了呢')
money -= 1
answer3 = input('请问继续下一局么(y\\n):')
if answer3=='y':
pass
else:
print ('您的游戏币还有{}欢迎下次再来参与游戏'.format(money_t))
break
else:
print('金币不足,请充值(100块钱30个币,充值必须是100的倍数')
声明变量的位置在for,while的外层,sum +=i 相当于累加 ,如果在内部 ,相当于每次循环都会执行sum=0
字符串
- 三引号的占用内存空间与单双引号的不同(三引号带有空间格式)
- ==比较的是内容,is比较的是地址
- 字符串+字符串,是拼接符,*是倍数符,in运算符是布尔符
str[ start: end[:方向和步长] ]
正负为方向,数字为步长
0位置开始索引 到-1
切片提取字符串指定位置的字母
[0:10:2]
[1],[1:],[8:-1],[:-1],[1:-1]
[::-1]反序输出
[5:0:-1]反序取值
字符串 | 内建函数 |
---|---|
data.title() | 标题每个字符串的首字母大写 |
data.upper()/capitalize | 仅字符串第一个字母大写 |
data.lower() | 整个字符串全改为小写 |
count | 字符出现的次数 |
len | 字符个数长度(返回一个整型int的数值) |
find(‘byte’,beg,end),rfind(),lfind(),index() | 查找相关,返回-1为没找到,找到的话返回第一个值的位置 |
replace(old,new,[max]) | 替换,可选不超过max次数 |
必须要会的s.encode(‘utf-8’),decode | 编码,解码 |
startswith(),endswith() | 判断是以**开头/结尾,返回值为布尔 |
isalpha(),isdigit() | 是否是字母,是否是数字,返回值为布尔 |
’_’.join(seq) | 将分隔符_连结到seq里 |
’ 大西洋 '.strip(),lstrip(),rstrip() | 去除空格字符,左空格,右空格 |
split(str=’’,num=string.count(str)) | 以’ '()作为分割条件去切割字符串,如有num,仅截取num+1个子字符串 |
- split应用
a = 'hello world english china kroen japan haha lokk spi'
re =a.split(' ',2)
print(re) # ['hello', 'world', 'english china kroen japan haha lokk spi']
s1 = input()
s2 = input()
s3=''
for i in s1:
if i not in s2:
s3 += i
print(s3)
编码utf-8,gbk等,多在网络应用时,中方会涉及编码问题
参考https://baike.so.com/doc/2161876-2287558.html
- 验证码练习
import random
s= 'xinjie1238940576532347581023zhijieSDFOERWPUQEIROTKQMLXCVGGFDYFDSZXMADQQsdfklsdforieutgjyfvnvcmcxpogkhytrewqrebxvczfadfqwe'
leng = len(s)-1
result = ''
for i in range(4):
result += s[random.randint(0,leng)]
print ('验证码为:',result)
usr_input = str(input('请输入验证码:'))
while usr_input.lower() != result.lower():
result = ''
for i in range(4):
result += s[random.randint(0,leng)]
print ('验证码为:',result)
usr_input = str(input('请输入验证码:'))
if usr_input.lower() == result.lower():
print('验证码正确,Bingo')
break
else:
print('验证码正确,Bingo')
- 文件上传(只能上传特定格式文件)
# 文件上传,但只能上传为(jpg,png,bmp)
path = input('请选择上传的文件:') # E:\BaiduNetdiskDownload\py\19py黑马\电子书Python学习手册(第4版).pdf
p = path.rfind('\\')
filename2 = path[p+1:]
print(p,filename2)
if filename2.endswith('jpg') or filename2.endswith('png') or filename2.endswith('bmp'):
print('文件格式正确,已上传')
else:
print('上传失败,文件格式只能上传为(jpg,png,bmp)')
- 文件上传(只能上传特定格式文件,请允许重新上传)
while True:
break
while True:
# 文件上传,但只能上传为(jpg,png,bmp)
path = input('请选择上传的文件:') # E:\BaiduNetdiskDownload\py\19py黑马\电子书Python学习手册(第4版).pdf
p = path.rfind('\\')
filename2 = path[p+1:]
print(p,filename2)
if filename2.endswith('jpg') or filename2.endswith('png') or filename2.endswith('bmp'):
print('文件格式正确,已上传')
break
else:
print('上传失败,文件格式只能上传为(jpg,png,bmp)')
- 输入的必须为数字或字母(错误的pass,不计入循环次数)
sum = 0
i = 1
while i<=3:
num = input('请输入数字:')
if num.isdigit():
num = int(num)
sum += num
print('第{}个数字添加成功'.format(i))
i += 1
else:
#pass
print('不得输入非数字,请重新输入:')
print(sum)
- 生成用户信息表
s = ''
while True:
username = input('请输入用户名:')
password = input('请输入密码:')
email = input('请输入邮箱:')
username = username[0:20]
password = password[0:20]
email = email[0:20]
msg = '{}\t{}\t{}\n'.format(username,password,email)
msg = msg.expandtabs(20)
s += msg
if username==''or password==''or email=='':
break
print(s)