Python学习记录 - 03 - 条件语句、循环语句(练习:质数问题、斐波那契数列、百马百担、珠峰问题)

本节内容:条件判断语句、循环语句,以及对应的练习:质数问题、斐波那契数列、百马百担、珠峰问题。

一、条件判断语句 - if / if…else

python中的条件判断语句:if / if … else / if … elif…elif…else

age = int(input('请输入您的年龄:'))

if age < 18:
    print('未满十八岁,禁止入内')  # 条件成立时执行的代码
else:
    print('欢迎')  # 条件不成立时,执行的代码

案例1:判断一个数是否能被4 和 6 同时整除,并且打印对应的结果

num = int(input('请输入数字'))

if num % 4 ==0 and num % 6 ==0:
    print(num,'能被4和6同时整除')
else:
    print(num,'不能被4或6同时整除')

案例2:判断一个年份是否是闰年(能被4整除,但是不能被100整除)

year = int(input('please enter the year:'))
if year % 4 == 0 and year % 100 != 0:
    print(year,'是闰年')
else:
    print(year,'不是闰年')
# --> please enter the year:2019
# --> 2019 不是闰年
# --> please enter the year:2020
# --> 2020 是闰年

案例3:将3718秒按照XX小时XX分钟XX秒的形式输出

x = 3718
hour  = x // 3600 #一个小时3600秒
minute = x % 3600 // 60 # 小鼠剩下的秒数除以60得到分钟
second = x % 60 #不能被60除尽的部分为秒数
print(hour,'小时',minute,'分钟',second,'秒')
# -->1 小时 1 分钟 58 秒

案例4:输入身高体重,判断身材是否正常【多个变量计算结果判断】
公式:体重(KG)/ 身高(m) 的平方值,在18.5-24.9之间属于正常

weight = float(input('请输入您的体重(kg)'))
height = float(input('请输入您的身高(m)'))
BMI = weight / height **2
if 18.5 <= BMI <= 24.9:
    print('您的身材正常')
else:
    print('您的身材不正常')
# 请输入您的体重(kg)56
# 请输入您的身高(m)1.65
# 您的身材正常

案例5:判断成绩水平【if…elif… elif… else…】

score = float(input('请输入你的成绩'))
if score>=80:
    print('优秀')
elif score >= 70:
    print('良好')
elif score >= 60:
    print('及格')
else:
    print('不及格')
# 请输入你的成绩78
# 良好

案例6:买票成功可以进站,安检通过可以进入候车室【if语句嵌套】

ticket = input('是否买票 Y/N')
if ticket == 'Y':  # 先进行买票判断
    print('已经买票,可以进站')
    safe = input('是否通过安检 Y/N') #再进行安检判断
    if safe == 'Y':
        print('买票成功,安检通过,请进入候车室')
    else:
        print('安检不通过,不得进入候车室')
else:
    print('请先买票')
# 是否买票 Y/NY
# 已经买票,可以进站
# 是否通过安检 Y/NN
# 安检不通过,不得进入候车室

案例7:通过三元表达式简写if语句【三元表达式】

num1 = int(input('请输入一个数字:'))
num2 = int(input('请再次输入一个数字:'))
x = num1 if num1 > num 2 else num2  #三元表达式
print('两个数里面较大的是', x)

二、循环语句 - while

while 条件成立:
	输出结果

案例1:打印5遍 ‘hello’

 x = 0
while x <5:
    print('hello')
    x +=1
# hello
# hello
# hello
# hello
# hello

案例2:求1-100的和

x = 0
sum = 0 #定义一个变量来保存所有数字之和
while x < 100:
    x +=1
    sum = sum + x
print(sum)
# 5050

案例3:求1-100所有偶数的和

x = 0
sum = 0
while x < 100:
    x +=1 #第一个数字是0,此处加1,再进行判断
    if x % 2 ==0:  #偶数才被添加到结果中
        sum = sum + x
print(sum)
# 2550

三、循环语句 - for 循环(遍历)

for 临时变量 in 列表或字符串等可迭代对象:#注意,in后面一定要为可迭代对象
	满足条件时执行的代码

#注意,in后面一定要为可迭代对象
目前接触的可迭代对象:字符串,列表,字典,元组,集合,range

for s in 'hello':
    print(s,end =' * ')
# h * e * l * l * o * 
result = 0
for i in range(1,101): #计算1-100的和
    result += i
print(result)
# 5050 

四、循环语句 - break、continue

break - 用来结束整个循环
continue - 用来结束本轮循环,开启下一次循环

i = 0
while i <5:
    if i == 3:  #当i=3的时候,自动加1,同时跳出当前循环进入下一次循环,所以输出的结果中没有3
        i +=1
        continue
    print(i,end = '  ')
    i +=1
# 结果为: 0  1  2  4  
i = 0
while i <5:
    if i == 3:
        i +=1
        break  # 当i=3的时候,结束循环,不在进行后续循环,所以不会输出3和4
    print(i,end = '  ')
    i +=1
# 结果为: 0  1  2  

案例: 不断的让用户输入用户名和密码,只要用户名不是zhangsan,密码不是123123,就一直询问

username = input('请输入用户名:')
password = input('请输入密码:')
while True:
    username = input('请输入用户名:')
    password = input('请输入密码:')
    if username == 'zhangsan' and password == '123123':
        break 

五、循环嵌套

案例:打印九九乘法表

# 打印5个 *, 并且空格隔开
i = 0 
while i < 5:
    i +=1
    print('*',end=' ')
# * * * * * 
# 打印一个三角形
i = 0 
while i < 5:
    i +=1
    print('*'*i)
# *
# **
# ***
# ****
# *****
#打印乘法表
j = 0
while j<9: #外循环用来控制行数
    j +=1
    i = 0 
    while i < j: #内循环用来控制列数
        i +=1
        print(i,"*",j,"=",i*j, end = '   ') #最终输出结果
    print() #用来换行

Python学习记录 - 03 - 条件语句、循环语句(练习:质数问题、斐波那契数列、百马百担、珠峰问题)_第1张图片

六、本节练习

  1. 根据输入的百分之成绩打印 ‘及格’或者‘不及格’,60分以下为不及格
score = float(input('请输入你的成绩'))
if score >= 60:
    print("恭喜你,及格了")
else:
    print("不好意思,没有及格") 
  1. 根据用户输入的年龄判断成年,未成年,如果年龄不在正常范围(0-150岁),则打印不是人
age = int(input('请输入你的年龄'))
if 0<=age<=18:
    print("恭喜你,未成年")
elif 18< age <=150:
    print("恭喜你,成年了")
else:
    print("不是人")
  1. 输入两个整数,如果两个数相减的结果为奇数,则输出该结果,否则输出提示信息:结果不是奇数
num1 = int(input('请输入一个整数:'))
num2 = int(input('请再输入一个整数:'))
gap = num1 - num2
if gap % 2 ==1:
    print(gap)
else:
    print("结果不是奇数")

4.使用for循环输出0-100内所有的奇数

for i in range(0,100):
    i +=1
    if i % 2 != 0:
        print(i)
for i in range(0,100):
    i +=1
    if i % 2 == 0:
        continue # 当 i是偶数的时候跳出循环
    print(i)
  1. 使用while循环输出0-100内所有的偶数
j = 0
while j <= 100:
    if j % 2 ==0:
        print(j)
    j +=1
  1. 统计100以内个位数是2并且能够被3整除的数的个数
# 查看有哪些数字满足要求
for i in range(0,101):
    if i % 10 ==2 and i % 3 ==0:
        print(i,end=' ')
# 12 42 72
# 引入变量统计个数
count = 0
for i in range(0,101):
    if i % 10 ==2 and i % 3 ==0:
        count += 1
print('满足条件的数字的个数是',count,'个')
# 满足条件的数字的个数是 3 个
  1. 输入任意一个正整数,判断它是几位数
num = int(input('请输入一个正整数'))
count = 0
while True:
    count +=1
    num //= 10  #每次除以10,计算到0需要除几次
    if num == 0:
        break  #当最后商为0的时候,停止循环
print('您输入的数字是',count,"位数")
# 请输入一个正整数836453
# 您输入的数字是 6 位数
  1. 打印所有的水仙花数
    水仙花数:个位的立方+ 十位的立方 + 百位的立方 = 数字本身
for i in range(100,1000):
    ge = i % 10
    shi = i // 10 % 10
    bai = i // 100
    if ge **3 + shi **3 + bai **3 ==i:
        print(i)
# 153  370 371 407    
  1. 写一个程序可以不断的输入内容,如果输入的内容是exit,打印’程序结束’后结束该程序
while True:
    content = input("请输入内容")
    if content =='exit':
        print('程序结束')
        break
  1. 统计101-150中素数的个数,并且输出所有的素数 (素数,只能被自己和1整除)
count = 0
for i in range(100,150):
    for j in range(2,int(i**0.5)+1):
        if i % j ==0: # 2到i-1之间的某一个数值是i的约数,跳出循环
            break  # break放在内循环中,用来结束内循环
    else:  #for else 语句:当循环里的break没有被执行的时候,就会执行slse
        print(i,end='  ')
        count +=1
print('素数的个数是',count)
# 101  103  107  109  113  127  131  137  139  149  素数的个数是 10

拓展:用假设成立法求质数

count = 0
for i in range(100,150):
    flag  = True    #每次都假设i是一个质数
    for j in range(2,int(i ** 0.5)+1):
        if i % j ==0:
            flag = False  #除尽了,说明 i是一个合数,对应将flag调整为False
            break  #跳出循环
    if flag:  #默认 if flag = True
        print(i, '是质数')  # 如果flag没有发生变化,则i确认为一个质数
        count += 1
print('一共有',count,'个质数')

拓展:使用计数方法求质数

for i in range(100,150):
    count = 0
    for j in range (2, int(i **0.5)+1):
        if i % j ==0:
            count +=1  #如果有约数,就统计约数的个数
    if count ==0:  #如果约数的个数大于0,则表示不仅仅能被1和本身整除,否则为质数
        print(i,'是一个质数')
  1. 求斐波那契数列中第n个数的值(第12个值)
    *斐波那契数列:1,1,2,3,5,8,13,21,34,55,89,144…
n = int(input('请输入你要查看第几个斐波那契数'))
num1 = 1
num2 = 1
for i in range(0,n-2):
    a = num1
    num1 = num2
    num2 = a + num2
print(num2)

输出前n+2位数的数列

n = int(input('请输入你要查看第几个斐波那契数'))
num1 = 1
num2 = 1
print(num1, end= ' ')
print(num2, end= ' ')
for i in range(0,n-2):
    a = num1
    num1 = num2
    num2 = a + num2
    print(num2, end ='  ')
#--> 请输入你要查看第几个斐波那契数10
#--> 1 1 2  3  5  8  13  21  34  55  
  1. '百马百担’问题:一匹大马能驼3担货,一匹中马能驼2担货,两匹小马能驼1担货,如果用100匹马来驼100担货,请问大马、中马、小马各几匹?
#假设大马有x个,中马有y个,小马为100-x-y
for x in range(0,100 // 3 + 1):
    for y in range(0,100 // 2 + 1):
        if 3*x + 2*y+(100-x-y)*0.5 ==100:
            print('大马:',x,'中马:',y,'小马:',100-x-y)

大马: 2 中马: 30 小马: 68
大马: 5 中马: 25 小马: 70
大马: 8 中马: 20 小马: 72
大马: 11 中马: 15 小马: 74
大马: 14 中马: 10 小马: 76
大马: 17 中马: 5 小马: 78
大马: 20 中马: 0 小马: 80

  1. 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13m)
height = 0.08 / 1000
count =0
while True:
    height *= 2
    count += 1
    if height > 8848.13:
        break
print(count)
#--> 27

你可能感兴趣的:(Python,python)