1. 程式人生 > >python例題(while、for迴圈的典型例題 一)

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、索引糅合):

            題目:   要求不定長的列表分割。

                   

           程式碼:

                          #