python例題(while、for迴圈的典型例題 一)
一、先了解一些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、索引糅合):
題目: 要求不定長的列表分割。
程式碼:
#