第12节课 【循环语句编程练习】
练习01 打印数字 I
题目描述
利用循环,寻找规律,打印如下数字模式:
模式A
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
模式B
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
模式C
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
模式D
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
"""
i 行数 j
1 1 1
1 2 2 1 2
1 2 3 3 1 2 3
1 2 3 4 4 1 2 3 4
1 2 3 4 5 5 1 2 3 4 5
1 2 3 4 5 6 6 1 2 3 4 5 6
"""
for i in range(1, 7):
for j in range(1, i + 1):
print(j, end=' ')
print()
"""
i j
1 2 3 4 5 6 1 1~6
1 2 3 4 5 2 1~5
1 2 3 4 3 1~4
1 2 3 4 1~3
1 2 5 1~2
1 6 1~1
"""
for i in range(1, 7):
for j in range(1, 8 - i):
print(j, end=" ")
print()
""" i j k (6 - i)
1 1 1~1 5
2 1 2 2~1 4
3 2 1 3 3~1 3
4 3 2 1 4 4~1 2
5 4 3 2 1 5 5~1 1
6 5 4 3 2 1 6 6~1 0
"""
for i in range(1, 7):
for k in range(6 - i):
print(" ", end = " ")
for j in range(i, 0, -1):
print(j, end=" ")
print()
""" i j 7-i k(i-1)
1 2 3 4 5 6 1 1~6 0
1 2 3 4 5 2 1~5 1
1 2 3 4 3 1~4 2
1 2 3 4 1~3 3
1 2 5 1~2 4
1 6 1~1 5
"""
for i in range(1, 7):
for k in range(i - 1):
print(" ", end=" ")
for j in range(1, 8 - i):
print(j, end=" ")
print()
""" i j k
1 2 3 4 5 6 6 1~6 0
1 2 3 4 5 5 1~5 1
1 2 3 4 4 1~4 2
1 2 3 3 1~3 3
1 2 2 1~2 4
1 1 1~1 5
"""
for i in range(6, 0, -1):
for k in range(6 - i):
print(" ", end=" ")
for j in range(1, i + 1):
print(j, end=" ")
print()
练习02 打印数字 II
题目描述
利用循环,寻找规律,打印如下数字模式:
1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
5 4 3 2 1 2 3 4 5
6 5 4 3 2 1 2 3 4 5 6
7 6 5 4 3 2 1 2 3 4 5 6 7
""" i j k
1 1 i~1, 2~i 6
2 1 2 2 5
3 2 1 2 3 3 4
4 3 2 1 2 3 4 4 3
5 4 3 2 1 2 3 4 5 5 2
6 5 4 3 2 1 2 3 4 5 6 6 1
7 6 5 4 3 2 1 2 3 4 5 6 7 7 0
"""
for i in range(1, 8):
# 打印空格
for k in range(7 - i):
print(" ", end=" ")
# i~1 递减
for j in range(i, 0, -1):
print(j, end=" ")
# 2 ~ i 递增
for j in range(2, i + 1):
print(j, end=" ")
print()
""" i k x(1 - i ~ i - 1)
1 1 6 0~0
2 1 2 2 5 -1~1
3 2 1 2 3 3 4 -2~2
4 3 2 1 2 3 4 4 3 -3~3
5 4 3 2 1 2 3 4 5 5 2 -4~4
6 5 4 3 2 1 2 3 4 5 6 6 1 -5~5
7 6 5 4 3 2 1 2 3 4 5 6 7 7 0 -6~6
"""
for i in range(1, 8):
# 打印空格
for k in range(7 - i):
print(" ", end=" ")
# 打印数字
for x in range(1 - i, i):
print(abs(x) + 1, end=" ")
print()
练习03 打印菱形 I
题目描述
如下所示,是一个高度为9的菱形
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
用户输入菱形高度n,并打印出该高度下的菱形
输入输出描述
输入高度n,n为奇数
输出该高度的菱形
示例
输入:
5
输出:
* * * * * * * * *
"""
i j k
* 1 1 4
* * 2 2 3
* * * 3 3 2
* * * * 4 4 1
* * * * * 5 5 0
i j k
* * * * 1 4 1
* * * 2 3 2
* * 3 2 3
* 4 1 4
"""
for i in range(1, 6):
for k in range(5 - i):
print(" ", end = "")
for j in range(i):
print("*", end = " ")
print()
for i in range(1,5):
for k in range(i):
print(" ", end = "")
for j in range(5 - i):
print("*", end = " ")
print()
""" i k(|i-5|) j
* 1 -4 1
* * 2 -3 1 2
* * * 3 -2 1 2 3
* * * * 4 -1 1 2 3 4
* * * * * 5 0 1 2 3 4 5 j <= i
* * * * 6 1 1 2 3 4
* * * 7 2 1 2 3
* * 8 3 1 2
* 9 4 1 j <= 10 - i
j <= i and j <= 10 - i
"""
n = 9
for i in range(1, n + 1):
for k in range(abs(i - (n // 2 + 1))):
print(" ", end = "")
j = 1
while j <= i and j <= n + 1 - i:
print("*", end = " ")
j += 1
print()
练习04 打印菱形 II
题目描述
如下所示,是一个高度为9的菱形
*
* *
* *
* *
* *
* *
* *
* *
*
用户输入菱形高度n,并打印出该高度下的菱形
输入输出描述
输入高度n,n为奇数
输出该高度的菱形
示例
输入:
5
输出:
* * * * * * * *
""" i j
* 1 1
* * 2 1 2
* * 3 1 2 3
* * 4 1 2 3 4
* * 5 1 2 3 4 5
* * 6 1 2 3 4
* * 7 1 2 3
* * 8 1 2
* 9 1
j == 1 or j == i or i + j == 10
"""
n = int(input("Enter n:"))
for i in range(1, n + 1):
for k in range(abs(i - (n // 2 + 1))):
print(" ", end = "")
j = 1
while j <= i and j <= n + 1 - i:
if j == 1 or j == i or i + j == n + 1:
print("*", end = " ")
else:
print(" ", end = " ")
j += 1
print()
练习05 猜数字
题目描述
计算机随机生成一个[0,100]之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相同
对于用户输入的数字,程序会提示它是过高还是过低
输入输出描述
每次输入一个整数
每次输出该数字是过高还是过低,如果猜中则输出猜中的数字并结束
示例
输入:50
输出:高了
输入:25
输出:低了
输入:42
输出:高了
输入:39
输出:猜中了!答案就是39
# 随机数字
import random
comp_num = random.randint(0,100)
while True:
# 用户输入数字
user_num = int(input("Enter a number:"))
# 对比数字的大小
if user_num < comp_num:
print("low")
elif user_num > comp_num:
print("high")
else:
print("Yes!")
break
练习06 最大公约数 I
题目描述
输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8
输入输出描述
输入两个数字
输出最大公约数
示例1
输入:
16 24
输出:
8
示例2
输入:
7 3
输出:
1
"""
16 24
result = 8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
i
"""
num1, num2 = map(int, input().split(" "))
min_value = min(num1, num2)
max_value = max(num1, num2)
# 暴力破解 枚举所有的可能性
for i in range(min_value, 0, -1):
if min_value % i == 0 and max_value % i == 0:
print(i)
break
# 数学方法怎么去做?
练习07 整数的素因子
题目描述
输入一个正整数,然后找出它所有的最小因子,也称之为素因子
输入输出描述
输入一个正整数
输出多行,每行输出一个素因子
示例1
输入:
120
输出:
2 2 2 3 5
解释:
2 * 2 * 2 *3 * 5 = 120
示例2
输入:
100
输出:
2 2 5 5
"""
120 : 2 3 4 5 6 7 8 ... 120
i
60 : 2 3 4 5 6 7 8 ... 60
i
30 : 2 3 ... 30
i
15 : 2 3 ... 15
i
5 : 2 3 4 5
i
1
2 2 2 3 5
"""
num = 7
while num != 1:
for i in range(2, num + 1):
if num % i == 0:
print(i, end=" ")
num = num // i
break
练习08 剪刀石头布 II
题目描述
延伸【剪刀石头布 I】的问题,利用循环将程序改为,计算机和电脑谁先赢三次,谁就是终极胜利者
import random
# 电脑赢的次数
comp_win_counts = 0
# 用户赢的次数
user_win_counts = 0
while True:
comp_num = random.randint(0, 2)
user_num = int(input(">>>请输入:"))
comp_choice = ""
if comp_num == 0:
comp_choice = "剪刀"
elif comp_num == 1:
comp_choice = "石头"
else:
comp_choice = "布"
user_choice = ""
if user_num == 0:
user_choice = "剪刀"
elif user_num == 1:
user_choice = "石头"
else:
user_choice = "布"
print(f'>>>计算机出的 {comp_choice}')
print(f'>>>用户出的 {user_choice}')
div = user_num - comp_num
if comp_num == user_num:
print(">>>此轮为平局")
elif div == -2 or div == 1:
print(">>>此轮用户赢")
user_win_counts += 1
else:
print(">>>此轮电脑赢")
comp_win_counts += 1
if user_win_counts == 3:
print(">>>最终,用户赢!")
break
if comp_win_counts == 3:
print(">>>最终,电脑赢!")
break
练习09 水仙花数
题目描述
水仙花数,是一个三位数,且这个数的个位、十位和百位的立方和等于该数字本身,例如 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33
编写程序,输出所有的水仙花数
"""
100 -> 999
"""
for num in range(100, 1000):
# 个位
a = num % 10
# 十位
b = num // 10 % 10
# 百位
c = num // 100
if a ** 3 + b ** 3 + c ** 3 == num:
print(num)
练习10 青蛙跳台阶
题目描述
一只青蛙,一次可以跳一个台阶或者两个台阶,现有n个台阶,问该青蛙有多少种不同的跳法?
例如:两个台阶,有两种跳法(1+1,2);四个台阶,有五种跳法(1+1+1+1,2+1+1,1+2+1,1+1+2,2+2)
"""
1 2 3 5 8 13 21 34 55 ...
斐波那契数列
f(x) = f(x - 1) + f(x - 2)
f(1) = 1
f(2) = 2
n = 6
1 2 3 5 8 13
a b c
a b
"""
n = int(input())
if n == 1 or n == 2:
print(n)
else:
a = 1
b = 2
c = 0
for _ in range(n - 2):
c = a + b
a = b
b = c
print(c)