# 表达式格式化
'''
print(f'1*1这道计算题答案是{1*1}')
print('1*1这道计算题答案是%d'%1*1)
#这个知识点内容较简单,大致就是说:如果不需要存储变量,直接用这种方式也可以
'''
# 股价计算小程序(p26课后)
'''
name = "传智播客"
stock_price = 19.99
stock_code = "003032"
stock_price_daily_growth_factor = 1.2
growth_days = 7
print(f'公司:{name},股票代码:{stock_code},当前股价:{stock_price}')
print("每日增长系数是:%.1f,经过%d天的增长后,股价达到了:%.2f" % (stock_price_daily_growth_factor,growth_days , stock_price * stock_price_daily_growth_factor ** growth_days))
# 实际做题时,在第二句中的出现了报错 TypeError:格式字符串的参数不足。查完资料发现是字符串格式输出了一些问题
# 原因是如果需要写入多个占位时,后面应写成%( 第一个,第二个,......)
'''
# input语句 从键盘读取输入
'''
print("请告诉我你是谁?")
name=input()
print("I know, you are:%s" %name)
# 第一行的print提示也可以省略!
name=input("请告诉我你是谁")
print("噢原来你是:%s" %name)
# print("噢原来你是:%d" %name)可以尝试在这里用%d占位发现会报错 通过type查看可知 无论你输入的时什么类型,input通通看成字符串
'''
# 欢迎登录小程序(p29课后)
'''
user_name=input() #获取用户名称
user_type=input() #获取用户类型
print("您好,%s, 您是尊贵的:%s 用户,欢迎您的光临"%(user_name,user_type))
'''
# 布尔类型
'''
# 定义变量储存布尔类型的数据
bool_1=True
bool_2=False
print(f"bool_1变量的内容是:{bool_1},类型是{type(bool_1)}")
print(f"bool_2变量的内容是:{bool_2},类型是{type(bool_2)}")
#比较预运算符
num_1=1
num_2=2
print(f'1==2的结果是:{num_1==num_2}') #同样也可判断字符串是否相等
'''
# 判断语句
'''
"""if 条件 :
条件成立要做的事情 #缩进四空格(tab)"""
age = 30
if age >= 18:
print("我成年了 我%d岁了" % age)
print("时间过的好快!") #无缩进就和if同级
'''
# 判断语句_课后练习(成年人判断)
'''
age=input("欢迎来到儿童游乐园,儿童免费,成人收费\n请输入你的年龄:")
age=int(age) #注意input输入的是字符串 为了后续能和18进行比较 需要转换格式
if age>=18:
print("您已成年,游玩需补票10元。")
print("祝您游玩愉快。")
'''
# 判断语句_if else语句
'''
age = input("欢迎来到儿童游乐园,儿童免费,成人收费\n请输入你的年龄:")
age = int(age)
if age >= 18:
print("您已成年,游玩需补票10元。")
else:
print("你还未成年,可以免费游玩")
print("祝您游玩愉快。")
'''
#判断语句_if else语句_课后练习(我要买票吗)
'''
height=input("欢迎来到动物园。\n请输入你的升高(cm):")
if int(height)>120:
print("你的身高超出120cm,游玩需要补票10元。")
else:
print("您的身高未超过120cm,可以免费游玩。")
print("祝您游玩愉快。")
'''
# 判断语句_if elif else语句
'''
#和上节课大差不差 可以在else前在加入多个elif的判断语句 不同的是这些判断语句后面都需要加上判断条件
#判断的顺序是if->elif1->elif2 if成立就不执行elif1,后面同理
height=input("欢迎来到动物园。\n请输入你的升高(cm):")
vip_leval=int(input("输入您的vip等级:"))
if int(height)<120:
print("您的身高未超过120cm,可以免费游玩")
elif vip_leval >3:
print("尊贵的vip 您可以免费游玩")
else:
print("不好意思 您所有条件都不满足 滚去补票")
print("祝您游玩愉快。")
'''
# 判断语句_if elif else语句_课后练习(猜数字)
'''
number=16 #随机设定一个数字
number_guess1=int(input('请输入第一次猜想的数字:'))
if number_guess1==number:
print("恭喜一次就猜对啦!")
elif int(input('不对,再猜一次:')) ==number:
print("恭喜第二次就猜对啦!")
elif int(input('不对,最后再猜一次:'))==number:
print("恭喜猜对!")
else:
print(f"sorry,全猜错啦,我想的是:{number}")
'''
#嵌套判断
'''
#少用!少用!少用!
#重点是注意缩进和逻辑
#例子:公司中18-30的成年人可以领取礼物,同时需要是入职时间>2,级别>3
age=18
year=1
leval=4
if age>=18:
print("你是成年人")
if age<30:
print("你的年龄达标!")
if year>2:
print("恭喜,年龄和入职时间都满足,可以领取")
elif leval>3:
print("恭喜,年龄和级别达标,可以领取")
else:
print("不好意思,年龄达标,但入职时间和级别都不达标")
else:
print("不好意思,年纪太大了")
else:
print("小朋友不能领取")
'''
#判断语句综合练习(猜数字)
'''
import random
num=random.randint(1,10)
guess1=int(input("第一次机会:"))
if guess1==num:
print("恭喜第一次就猜对了")
elif guess1!=num:
if guess1>num:
print("猜大了")
elif guess1<num:
print("猜小了")
guess2=int(input("第二次机会:"))
if guess2 == num:
print("恭喜第二次就猜对了")
elif guess2 != num:
if guess2 > num:
print("猜大了")
elif guess2 < num:
print("猜小了")
guess3=int(input("第三次机会:"))
if guess3 == num:
print("恭喜第三次猜对了")
else:
print("没有猜中噢")
#其实通过案例是可以发现嵌套不是很方便且容易出现逻辑的错误
'''
#while循环
'''
i=0
while i<100:
print("evering will be OK")
i+=1
#print(i)
'''
#while循环_课后练习(1-100求和)
'''
i=1
num=0
while i<=100:
num = num + i
i+=1
print(i,num)
'''
#while循环_课后练习(猜数字)
'''
import random
num=random.randint(1,100)
print(num)
#偷看一眼
guess_num=int(input("输入猜测的数字:"))
i=1
while guess_num!=num: #如果猜错就进入while循环
if guess_num>num:
print("太大了")
else:
print("太小了")
guess_num=int(input("输入猜测的数字:"))
i+=1
print(f"猜对了 就是{num}") #跳出while循环时候输出,或者没进入循环也会输出
print("总共猜了%d次"%i)
'''
#while循环的嵌套_课后练习(九九乘法表)
'''
# 基于缩进的嵌套
# \t表示对齐,表示补齐到8个长度
print('xx', end='')
print('yy') #可以不换行输出 使输出都在一行
i=1
while i<=9:
#定义内层循环的控制变量
j = 1
while j<=i:
print(f'{j} * {i} ={j*i}\t',end='')
j+=1
i+=1
print() #输出空内容 也就是换行
'''
#for循环
'''
#遍历序列类型 比如 字符串,列表 元组等
#定义字符串name
name='pengyuyan'
#for循环处理字符串
for x in name: #x是临时变量 遍历name 和c语言的for循环完全不一样
print(x)
'''
#for循环_课后练习(数字符串中有几个a)
'''
name='ithema is a brand of itcast'
num=0
for x in name:
if x=='a':
num+=1
print("name中共有:%d个字母a" %num)
'''
#range 语句
'''
#语法1
# range(num) #num 填数字,这段语句代表获取一个从0开始到num(不包含num)的数字序列
range(10)
for x in range(10):
print(x)
#语法2
# range(num1,num2) #获得一个从num1到num2的数字序列(不包含num2本身),其实2和3本质一样,不写步长默认就是1
range(5,10)
for x in range(5,10):
print(x)
#语法3
# range(num1,num2,step)#获得一个从从num1到num2的数字序列(不包含num2本身) 数字间的步长是step
range(1,10,2)
for x in range(1,10,2):
print(x)
'''
#range 语句_课后练习(有几个偶数)
'''
num=0
for x in range (1,100):
if x %2==0:
num+=1
print(num)
'''
#理解临时变量
'''
x=1 #range后x会被覆盖
for x in range(3):
print(x)
print()
print(x) #不要这么做,容易造成错误,也影响可读性
'''
#for循环嵌套
'''
#!!!同之前的嵌套,重点就是用用好缩进
i=0
for i in range(1,101):
print(f"今天是学习的第{i}天,加油")
#嵌套
for j in range(0,25):
print(f'学习到今天的{j}点了')
print('休息')
print(f'在{i}天时候学会啦')
#while和for俩个相互嵌套都行
'''
#再次试试输出九九乘法表
'''
for x in range(1,10):
for y in range(1,x+1):
print(f"{y}*{x}={x*y}\t",end='')
print()
'''
#breake和continue
'''
##循环中断语句continue
# for i in range(1,6):
# print(1)
# continue
# print(2) #这句没有被执行,因为continue代表结束本次循环进入下一次
##continue的嵌套(只能对自己所在的循环起作用)
# for i in range(1,6):
# print(1)
# for j in range(1,6):
# print(2)
# continue
# print(3)
#
# print(4)
#break直接跳出循环
# for i in range(1,101):
# print(1)
# break
# print(2)
# print(3)
#break的嵌套(同样只能对自己所在的循环起作用)
for i in range(1,6):
print(1)
for j in range(1,100):
print(2)
break #原本内层循环应该执行99次,但break跳出了循环
print(3)
print(4)
'''
#循环练习案例(p50发工资)
'''
#________写了一个 但是很奇怪,我希望是余额为0之后输出”工资发完了“然后break 但是一直修改无法做到
#————————之后发现在进入for循环前增加一个if判断total的值就可以实现上面的需求
import random
total = 10000 # 账户余额total
# 用for循环员工1-20
for x in range(1, 21):
num = random.randint(1, 10)
if num < 5:
print(f"员工{x}, 绩效分{num}, 不发工资,下一位")
continue
elif total >= 1000:
total -= 1000
print(f"向员工{x}发放工资1000元,账户余额还剩{total}")
else:
print("工资发完了,账户余额不足")
break
# 在每次发放工资后检查total是否足够支付后续员工的工资
if total < 1000:
print("还有剩余员工,但账户余额不足,停止发放工资")
break
'''