Python(练习题)——分支和循环的综合应用

一、基础题
1.根据输入的成绩,判断是否及格,成绩范围只允许在0~100之间,输入错误给提示。

score = int(input('请输入成绩(0~100):'))
if 60 <= score <= 100:
	print('及格')
elif 0<= score < 60:
	print('不及格')
else:
	print('输入错误!')

2.根据输入的年纪范围打印“成年”或者“未成年”,如果年龄不在正常范围内(0~150)打印“这不是人类!”

# 方法一:
age = int(input('请输入年龄:'))
if age < 18:
    print('未成年')
elif 18 <= age <= 150:
    print('成年')
else:
    print('这不是⼈')

# 方法二:if嵌套
age = int(input('请输入年龄:'))
if 0 <= age <= 150:
    if age < 18:
        print('未成年')
    else:
        print('成年')
else:
    print('这不是人')

# 方法三:三目运算符
age = int(input('请输入年龄:'))
if 0 <= age <= 150:
	result = '未成年' if age < 18 else '成年'
	print(result)
else:
	print('这不是人类!')

3.输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息“a-b的结果不是奇数 ”。(此后省略“input”)

a = int(input('输入一个整数a:'))
b = int(input('输入一个整数b:'))
c = a - b
if c % 2 != 0:
    print(f'{a}-{b}={c}')
else:
    print('a-b的结果不是奇数')

4.使用while循环输出0~100内所有3的倍数。

number = 0
while 0 <= number <=100:
    if number % 3 == 0:
        print(number)
    number += 1

5.使用while循环输出0~100内所有的偶数。

# 方法一:与第4题类似
number = 0
while 0 <= number <=100:
    if number % 2 == 0:
        print(number)
    number += 1

# 方法二:可以用累加的方式
num_1 = 0
while num_1 <= 98:    # 这里范围要注意,因为我们最大的取值是100,此判断后还要+2,所以范围应该只能到98.
    num_1 += 2
    print(num_1)

二、进阶题
1.使用循环计算 1234…*10 的结果。

# 方法一:for in 循环
num_1 = 1
for i in range(2,11):
    num_1 *= i
print(num_1)

# 方法二:while循环
num_2 = 0
total = 1
while num_2 < 10:
    num_2 += 1
    total *= num_2
print(total)

2.统计100以内个位数是2并且能够被3整除的数的个数。

# 方法一:
count = 0
for i in range(12,100,30):
    count += 1
print(count)

# 方法二:
count_1 = 0
for i in range(101):
    if i % 10 == 2 and i % 3 == 0:
        count_1 += 1
print(count_1)

3.打印出所有的水仙花数,所谓水仙花数是指⼀个三位数,其各位数字立方和等于该数本身。
(例如:153是⼀个水仙花数,因为 1³ + 5³ + 3³ 等于 153。)

# 同方法不同写法一:
for i in range(100,1000):
    gewei = i % 10
    shiwei = i // 10 % 10
    baiwei = i // 100
    if gewei ** 3 + shiwei ** 3 + baiwei ** 3 == i:
        print(f'{i}是水仙花数')

# 同方法不同写法二:
for x in range(100, 1000):
    if (x // 100) ** 3 + (x // 10 % 10) ** 3 + (x % 10) ** 3 == x:
        print(f'{x}是水仙花数')

'''
输出结果均如下:
153是水仙花数
370是水仙花数
371是水仙花数
407是水仙花数
'''

4.输入任意⼀个正整数,求他是几位数?

# 方法一:
a = int(input('输⼊任意⼀个正整数:'))
counter = 0
while a > 0:
    a //= 10
    counter += 1
print(f'{a_copy}的长度为{counter}')

# 方法二:
num = int(input('输⼊任意⼀个正整数:'))
length = 0
num_copy = num
while True:
    if num == 0:
        break
    else:
        num //= 10
        length += 1
print(f'{num_copy}的长度为{length}')

三、挑战题
1.求斐波那契数列中第n个数的值:1,1,2,3,5,8,13,21,34…。
(这的n可以是任意正整数,可以通过输入来确定)
首先大家要知道斐波那契数列的规律为前两个数相加等与后面的数。

'''
规律:
a = 1
b = 1
c = a + b
a = b
b = c
c = a + b
'''
N = 8         # 假设算第八个数是几,根据规律我们可以发现计算第N个数算的次数是N-2次。
if N == 1 or N == 2:
    print(1)
else:
    a = 1
    b = 1
    for _ in range(1, N - 1):     # 因为range是所闭右开区间,所以相当于右边自动帮我们减去1次,那么范围只需要写到N-1次即可。这里的for in循环实际上是循环的次数。
        c = a + b
        a = b
        b = c
    print(f'斐波那契数列中第{N}个数字是{c}')
    
'''
解析:
如果要取第一位或者第二位数字是直接输出1,
其他情况时,首先a赋值1,b赋值1,
当N赋值8时,通过range可以知道要循环6次:
for第⼀次循环,获取出1,
            进⼊代码块判断c=a+b=2,
            此时a=b一开始的赋值1,
            b=c第一次循环计算的2,
            此时得到结果c=2;
for第二次循环,获取出2,
            进⼊代码块判断c=a第一次循环赋值的1+b第一次循环赋值的2=3,
            此时a=b第一次循环赋值的2,
            b=c第二次循环计算赋值的3,
            此时得到结果c=3;
for第三次循环,获取出3,
            进⼊代码块判断c=a第二次循环赋值的2+b第二次循环赋值的3=5,
            此时a=b第二次循环赋值的3,
            b=c第三次循环计算赋值的5,
            此时得到结果c=5;
            ……
for第六次循环,获取出6,
            进⼊代码块判断c=a第五次循环赋值的8+b第五次循环赋值的13=21,
            此时a=b第五次循环赋值的13,
            b=c第六次循环计算赋值的21,
            此时得到结果c=21;
输出结果:21
'''

2.输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

for i in range(1, 10):
    for j in range(1, i + 1):
        result = f'{i} * {j} = {i * j}'
        print(result, end='\t')
    print()

'''
解析:
i 控制行
在第一个for循环里i的取值范围是1~9。即一共9行
j 控制列
在第二个for循环里j的取值范围是1~i的取值。即当i取值1时,j只有1列;当i取值2时,j有2列···当i取值9时,j有9列。
第一个for第⼀次循环,获取出1,(第一行)
            进⼊代码块执行第二个for的第一次循环,取值1
            此时得到结果为1×1=1 (只有一列)
第一个for第二次循环,获取出2,(第二行)
            进⼊代码块执行第二个for的第一次循环,取值1
            此时得到结果为2×1=2 (第一列)
            进入代码块执行第二个for的第二次循环,取值2
            此时得到结果为2×2=4 (第二列)
第一个for第三次循环,获取出3,(第三行)
            进⼊代码块执行第二个for的第一次循环,取值1
            此时得到结果为3×1=3 (第一列)
            进入代码块执行第二个for的第二次循环,取值2
            此时得到结果为3×2=6 (第二列)
            进入代码块执行第二个for的第三次循环,取值3
            此时得到结果为3×3=9 (第三列)
······
第一个for第九次循环,获取出9,即第9行,
            进入代码块执行第二个for循环,取值1~9,共9次即有9列
输出结果:
1 * 1 = 1	
2 * 1 = 2	2 * 2 = 4	
3 * 1 = 3	3 * 2 = 6	3 * 3 = 9	
4 * 1 = 4	4 * 2 = 8	4 * 3 = 12	4 * 4 = 16	
5 * 1 = 5	5 * 2 = 10	5 * 3 = 15	5 * 4 = 20	5 * 5 = 25	
6 * 1 = 6	6 * 2 = 12	6 * 3 = 18	6 * 4 = 24	6 * 5 = 30	6 * 6 = 36	
7 * 1 = 7	7 * 2 = 14	7 * 3 = 21	7 * 4 = 28	7 * 5 = 35	7 * 6 = 42	7 * 7 = 49	
8 * 1 = 8	8 * 2 = 16	8 * 3 = 24	8 * 4 = 32	8 * 5 = 40	8 * 6 = 48	8 * 7 = 56	8 * 8 = 64	
9 * 1 = 9	9 * 2 = 18	9 * 3 = 27	9 * 4 = 36	9 * 5 = 45	9 * 6 = 54	9 * 7 = 63	9 * 8 = 72	9 * 9 = 81
'''

3.这是经典的“百马百担”问题,有⼀百匹马,驮⼀百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)

# 方法一:三元一次方程
for x in range(0, 35):
    for y in range(0, 51):
        for z in range(0, 101):
            if x + y + z == 100 and 3*x + 2*y + 0.5*z == 100:
                print(f'有{x}批大马,{y}批中马,{z}批小马')

# 方法二:二元一次方程
for x in range(0, 34 + 1):
    for y in range(0, 50 + 1):
        if 3 * x + 2 * y + 0.5 * (100 - x - y) == 100:
            print(f'有{x}批大马,{y}批中马,{100 - x - y}批小马')

'''
解析:
第一个for进行第一次循环取值x=0时:
    进入代码块判断第二个for循环,进行第一次循环取值y=0
        此时if条件=3×0+2×0+0.5×100<100,不符合执行条件,继续循环
    进入代码块判断第二个for循环,进行第二次循环取值y=1
        此时if条件=3×0+2×1+0.5×(100-1)<100,不符合执行条件,继续循环   
······
第一个for进行第三次循环取值x=2时:
    ······
    进入代码块判断第二个for循环,进行第31次循环取值y=30
        此时if条件=3×2+2×30+0.5×(100-2-30)=100,符合执行条件,得到结果;
        ······
输出结果:
有2批大马,30批中马,68批小马
有5批大马,25批中马,70批小马
有8批大马,20批中马,72批小马
有11批大马,15批中马,74批小马
有14批大马,10批中马,76批小马
有17批大马,5批中马,78批小马
有20批大马,0批中马,80批小马
'''
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值