一、先了解一些python内部模块:
1、生成随机数(随机参数):
(1)利用集合set可变的的性质转化为随机的列表。
set1 = {1,2,3,4,'a'}
list1 = list(set1) # set是可迭代的,每次for遍历结果顺序不一样。
print(list1[0]) # 随机参数产生。
(2)利用random模块来生成:
详情见 while 语句文章。
二、比较典行的例题:
1、程序判断四个数的最大值:
# 一定要搞清楚 if elif else 语句(满足一个,退出条件,不执行其他所有条件代码) 与 同级 并列 if 的区别。
a = int(input('请输入数字1:'))
b = int(input('请输入数字1:'))
c = int(input('请输入数字1:'))
d = int(input('请输入数字1:'))
max = 0
if a > b:
max = a
else:
max = b
if c > max:
max = c
if d > max :
print('输出最大值是:',d)
else:
print(max)
2、 打印图形:
1、方法:一层一层分析,先里后外,寻找循环次数与打印图形的关系。
略
i = 5
for j in range(1, 14, 2): # 设置步长为2
if j <= 7:
print(('*' * j).center(20)) # 利用str.center方法居中
else:
print(('*' * i).center(20))
if i == 1: # 这个位置可以整合为双for循环
break
i -= 2
2、绝对值的妙用:
代码:
for i in range(-6,7):
for j in range(-6,7):
if abs(i) + abs(j) == 6: #
print('*',end='')
else:
print(' ', end='')
print()
提示 : 双重循环的变种。
3、与电脑的猜拳游戏(用到random模块):
(1)第一种:穷举法(多层循环嵌套):即 (玩家 3 * 电脑 3):
(2)分类解决:
# 第一种:
import random
list1 = ['石头','剪刀','布']
tag = 1
while tag : # 标签,比break,continue灵活。
people = input('请输入石头、剪刀、布:\n')
computer = random.choice(list1) # 生成随机参数
if people == computer:
print('平局,再来!')
# 这种 相等 的多个逻辑判断可以用 : in 列表 的方式,如第二种方法:
elif (people == '石头' and computer == '剪刀') or (people == '剪刀' and computer == '布') or \(people == '布' and computer == '石头') :
print('你赢了,恭喜!!!!!!!!!!')
tag = 0
else:
print('你输了,哈哈哈哈!')
# 第二种方法:
import random
list1 = ['石头','剪刀','布']
tag = 1
while tag :
people = input('请输入石头、剪刀、布:\n')
computer = random.choice(list1)
list2 = [['石头','剪刀'],['剪刀','布'],['布','石头']] # 定义了判断列表
if people == computer:
print('平局,再来!')
elif [people,computer] in list2: # in 的方式简单判断。
print('%s赢了%s' %(people,computer))
print('你赢了,恭喜!!!!!!!!!!')
tag = 0
else:
print('你输了,哈哈哈哈!')
4、100元 买 鸡的问题
(1)穷举法的典型例题(穷举法往往使用多层循环):
# 买 小鸡问题 (穷举法用的是多层循环!)
x = 0
while x <= 100: # 穷举公鸡的数量
y = 0
while y <= 100: # 穷举母鸡的数量
z = 0
while z <= 100: # 穷举小鸡的数量
if (x + y + z == 100) and (5*x + 3*y + z/3 == 100): # python3 除法有余数,所以不用考虑小数点。
print(x,y,z)
z += 1
y += 1
x += 1
#方法二: for
for x in range(0,21):
for y in range(0,34):
z = 100 - x - y # 减少重复项
if 5*x+3*y+z/3==100:
print(x,y,z)
五、 for循环、换行、print( , end=' ')用法:
题目: 输入一个数值,输出从1到这个数的所有奇数,并且每隔10个数换一行
num = input('请输入数字:\n')
m = 0
for i in range(1,int(num) + 1,2):
if m % 10 != 0 or m == 0:
print(i,end=' ')
m += 1
else:
m += 1 # 易错点,m变化不要忘记 i 会自动加1
print()
六、双for循环找出规律:
题目: 使用for循环如何实现99乘法表
# 第一种
for i in range(1,10):
for j in range(1,11):
if i >= j:
if j <= 9:
print('%d X %d = %d' %(i,j,i*j),end=' ')
elif j == 9:
print()
else:
print()
break
#第二种:
#2. 使用for循环如何实现99乘法表
for i in range(1,10):
for j in range(1,i+1):
print('%d*%d=%d'%(i,j,i*j),end=' ')
print()
七、n*n 列表矩阵问题:
题目1:
代码:
m = [[1,2,3],
[4,5,6],
[7,8,9]]
n = [[2,2,2],
[3,3,3],
[4,4,4]]
# 列表解析:
list1 = [m[i][j]*n[i][j] for i in range(0,3) for j in range(0,3)]
# for 循环
for i in range(0,3):
for j in range(0,3):
print(m[i][j]*n[i][j])
题目2:
N * N 双层矩阵,注意其 下标的关系: 0.0 0.1 0.2
1.0 1.1 1.3
2.0 2.1 2.2 注意前后 和差 绝对值得规律。
#
# m = [[1,2,3],[11,22,33],[111,222,333]]
#第一道:
# list1 = [m[i][j] for i in range(0,3) for j in range(0,3) if i == j or abs(i - j) == 2]
# print(sum(list1))
# 第二道
# list2 = [m[i][j] for i in range(0,3) for j in range(0,3) if i == j == 1 or abs(i - j) == 2]
# list3 = [m[i][j] for i in range(0,3) for j in range(0,3) if i == j]
# print(sum(list2),sum(list3))
八、输入一个整数,将整数分解为质因数的积:
(例:90》》 2*3*3*5 = 90)
质因数:1、因数 2、除了 1 和本身没有其他的因数。
1、数学方法:
2、代码:
num = int(input('请输入数字:\n'))
for i in range(2,num + 1): # 从最小质数2开始, 前闭后开 >>> num+1
while True:
if num % i == 0:
print(i)
num = num/i # 商
else:
break
九、冒泡排序法:
像冒泡一样,多层循环,每循环一次将最大值放在最右边。
代码:
list1 = [4,3,5,8,10,2,89,1]
for j in range(1,len(list1)): #注意前闭后开(取值为1、2、3 .. 7)# 确定循环次数。
for i in range(0,len(list1)-1): # 确定长度,遍历索引, # 将最大放在最右边。
if list1[i] < list1[i + 1]:
pass
else:
list1[i + 1],list1[i] = list1[i],list1[i+1] # 交换
print(list1)
十、列表的分割(for循环、切片、append、索引糅合):
题目: 要求不定长的列表分割。
代码:
num=[0,0,0,1,1,2,3,3,3,2,3,3,0,0,22,22,33,33,33,33,44,44]
b=[]
start=0
for i in range(0,len(num)-1):
if num[i]!=num[i+1]:
b.append(num[start:i+1])
start=i+1
b.append(num[start:])
print(b)