一、基础题
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批小马
'''