python練習100案例


題目1 :三位數計算
題目2:獎金計算
題目3:完全平方數
題目4:一年中的第幾天
題目5:三數排序
題目6:斐波拉契數列
題目7:列表復制
題目8:九九乘法表
題目9:暫停1秒輸出
題目10:格式化時間
題目11:兔子生孩子
題目12:素數問題
題目13:水仙花數
題目14:分解質因素
題目15:條件嵌套
題目16:指定格式日期
題目17:統計各類字符個數
題目18:重復數相加
題目19:完數
題目20:球的下落
題目21:猴子偷桃
題目22:比賽名單
題目23:打印圖形
題目24:分數序列
題目25:題目相加
題目26:簡單遞歸
題目27:簡單遞歸2
題目28:簡單遞歸3
題目29:分解每一位數
題目30:回文數判斷
題目31:判斷首字母
題目32:反向輸出列表
題目33:連接字符
題目34:函數調用練習
題目35:文本顏色設置
題目36:求100內的素數
題目37:對10個數進行排序
題目38:矩陣運算
題目39:順序插入列表
題目40:逆序輸出列表
題目41:模仿靜態變量用法
題目42:學習auto變量用法
題目43:模仿靜態變量2
題目44:矩陣相加
題目45:累加
題目46:平方運算
題目47:變量值互換
題目48:數字比較
題目49:使用lambda創建函數
題目50:輸出隨機數
題目51:使用按位與&操作
題目52:使用按位或|操作
題目53:使用按位異或^操作
題目54:移位操作
題目55:按位取反
題目56:用Circle畫圓
題目57:用line畫直線
題目58:畫方形
題目59:綜合畫圖
題目60:字符串長度
題目61:楊輝三角
題目62:查找字符串
題目63:畫橢圓
題目64:利用ellipse 和 rectangle 畫圖
題目65:一個最優美的圖案
題目66:按大小順序輸出數字
題目67:數組里的排序練習
題目68:數組數字移動
題目69:圍圈圈游戲
題目70:字符串長度函數
題目1 :三位數計算
有四個數字:1、2、3、4,能組成多少個互不相同且無重復數字的三位數?各是多少?程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。
程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。
total=0
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if (i!=j) and (i!=k) and (k!=j):
                print(i*100+j*10+k*1)
                total+=1
print("There are "+str(total)+" number fitted.")
1
2
3
4
5
6
7
8
題目2:獎金計算
企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可提成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。
Profits=int(input("Please tell me the profit this month:\n"))
arr=[1000000,600000,400000,200000,100000,0]
rat=[0.01,0.015,0.03,0.05,0.075,0.1]
Bonus=0
for i in range(0,6):
    if(Profits>arr[i]):
        Bonus+=(Profits-arr[i])*rat[i]
        print((Profits-arr[i])*rat[i])
        Profits=arr[i]
    else:
        print("0")
print("The Bonus is "+str(Bonus)+"")
1
2
3
4
5
6
7
8
9
10
11
12
題目3:完全平方數
一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
程序分析:假設該數為 x。
1、則:x + 100 = n2, x + 100 + 168 = m2
2、計算等式:m2 - n2 = (m + n)(m - n) = 168
3、設置: m + n = i,m - n = j,i * j =168,i 和 j 至少一個是偶數
4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶數,要么都是奇數。
5、從 3 和 4 推導可知道,i 與 j 均是大於等於 2 的偶數。
6、由於 i * j = 168, j>=2,則 1 < i < 168 / 2 + 17、接下來將 i 的所有數字循環計算即可。
for i in range(1,85):
    if 168%i == 0:
        j=168/i
        if (i>j) and ((i+j)%2==0) and ((i-j)%2==0):
            m=(i+j)/2
            n=(i-j)/2
            x=n*n-100
            print(int(x))
1
2
3
4
5
6
7
8
題目4:一年中的第幾天
輸入某年某月某日,判斷這一天是這一年的第幾天?
程序分析:以3月5日為例,應該先把前兩個月的加起來,然后再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大於2時需考慮多加一天:
year=int(input("Year:"))
month=int(input("Month:"))
day=int(input("Day:"))
months = [0,31,59,90,120,151,181,212,243,273,304,334]
now=months[month-1]+day
if (year%400==0) or (year%4==0)and(year%100!=0):
    leap=1
else:
    leap=0
if (leap==1)and(month>2):
    now+=1
print("It is "+str(now))
1
2
3
4
5
6
7
8
9
10
11
12
題目5:三數排序
題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。
程序分析:
方法一:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,然后再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小,,y同樣操作。
x=int(input("x:"))
y=int(input("y:"))
z=int(input("z:"))
min=x
mid=y
max=z
if(x>y):
    temp=y
    y=x
    x=temp
if(x>z):
    temp=z
    z=x
    x=temp
if(y>z):
    temp=y
    y=z
    z=temp
print('order:'+str(x)+' '+str(y)+' '+str(z))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
方法二:使用列表方法sort

order=[]
for i in range(0,3):
    x=int(input("Number:"))
    order.append(x)
order.sort()
print("The order from small to big:")
for j in order:
    print(j)
1
2
3
4
5
6
7
8
題目6:斐波拉契數列
題目:斐波那契數列。
程序分析:斐波那契數列(Fibonacci sequence),又稱黃金分割數列, 指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……。
在數學上,費波那契數列是以遞歸的方法來定義:
F1 = 1 (n=1)
F2 = 1 (n=2)
Fn = F[n-1]+ F[n-2](n=>2)

方法一:可看成a,b為幽魂附在該數列的最初相鄰的兩個數上(1,1),每循環一次,就共同前進一個數字(1,2),(2,3)等等。求的第n個數的話,則a前進n-1次就會附身在那個數上。
def fib(n):
    a,b = 1,1
    for i in range(n-1):
        a,b = b,a+b
    return a
print(fib(100))
1
2
3
4
5
6
方法二:通過公式,進行遞歸(運算時間會較長,不信你試試)

def fib(n):
    if(n==1)or(n==2):
        return 1
    return fib(n-1)+fib(n-2)
print(fib(60))
1
2
3
4
5
方案三:如果要求出第n個數時的斐波拉契數列,可以這樣。

def fib(n):
    if(n==1):
        return [1]
    if(n==2):
        return [1,1]
    fibs = [1,1]
    for i in range(2,n):
        fibs.append(fibs[-1]+fibs[-2])
    return fibs
  print(fib(100))
1
2
3
4
5
6
7
8
9
10
題目7:列表復制
題目:將一個列表的數據復制到另一個列表中。
程序分析:使用列表[:]。
a=[1,2,3]
b=a[:]
print(b)
1
2
3
題目8:九九乘法表
題目:輸出 9*9 乘法口訣表。
程序分析:分行與列考慮,共9行9列,i控制行,j控制列。注意print之后會自動換行,需要用end=' '控制一下。
for i in range(1,10):
    for j in range(1,i+1):
        print(str(i)+'*'+str(j)+'='+str(i*j),end=' ')
    print('\n')
1
2
3
4
題目9:暫停1秒輸出
題目:暫停一秒輸出。
程序分析:使用 time 模塊的 sleep() 函數。
import time
myD={1:'a',2:'b'}
for key,value in dict.items(myD):
    print(key,value)
    time.sleep(1)
1
2
3
4
5
題目10:格式化時間
題目:暫停2秒輸出,並格式化當前時間。
import time
print(time.strftime('%Y-%m-%d %H:%M:%S',
              time.localtime(time.time())))
# 暫停2秒
time.sleep(2)
print(time.strftime('%Y-%m-%d %H:%M:%S',
              time.localtime(time.time())))
1
2
3
4
5
6
7
題目11:兔子生孩子
題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
程序分析:兔子的規律為數列1,1,2,3,5,8,13,21.... (斐波拉契數列)
def fib(n):
    if(n==1):
        return[1]
    elif(n==2):
        return[1,1]
    fibs=[1,1]
    for i in range(n-2):
        fibs.append(fibs[-1]+fibs[-2])
    return fibs
print(fib(5))
1
2
3
4
5
6
7
8
9
10
題目12:素數問題
題目:判斷101-200之間有多少個素數,並輸出所有素數。
程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。這里解釋一下:
已知n=(√n)*(√n),假設n=x*y
如果x與y都不是√n,那么當中必定有一個小於√n,一個大於√n。
所以如果n在(2,√n)不能被整除(不存在那個小於√n的數),那么在(√n,n)內也一定不能被整除(也不存在對應大於√n的數)。因此只需判斷在(2,√n)就可以了。
from math import sqrt
def prime_judge(n):
    """素數判定"""
    sign=True
    for i in range(2,int(sqrt(n)+1)):
        if(n%i==0):
            sign=False
    return sign

prime_101_200=[]
total=0
for j in range(101,201):
    if(prime_judge(j)):
        prime_101_200.append(j)
        total+=1
print("There are "+str(total)+" prime number.")
print(prime_101_200)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
題目13:水仙花數
題目:打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。
for i in range(100,1000):
    a=int(i/100)
    b=int(i/10)%10
    c=(i%10)
    if(i == a**3+b**3+c**3):
        print(i)
1
2
3
4
5
6
題目14:分解質因素
題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
程序分析:對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:
(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,打印出即可。
(2)如果n<>k,但n能被k整除,則應打印出k的值,並用n除以k的商,作為新的正整數你n,重復執行第一步。
(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。
from math import sqrt
def prime_judge(n):
    """素數判定"""
    sign=True
    for i in range(2,int(sqrt(n)+1)):
        if(n%i==0):
            sign=False
    return sign

def Decomposition_prime_factor(n):
    """分解質因素"""
    prime_factor=[]
    print(str(n)+"=",end='')
    if prime_judge(n):
        print(n)
    else:
        i=2
        while(i<=int(n/2)+1):
            if n%i==0 and prime_judge(i):
                prime_factor.append(i)
                n = n/i
                i=1
            i+=1
        #以n=a*b*c形式輸出
        for j in range(len(prime_factor)):
            if j==len(prime_factor)-1:
                print(prime_factor[j])
            else:
                print(str(prime_factor[j])+"*",end='')

Decomposition_prime_factor(2018888)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
方法二:進行遞歸,可簡化代碼.但只做到90=2×3×3×5里等號后面的式子,哪位高人指點一下讓我可以按標准格式輸出。

from math import sqrt
def prime_judge(n):
    """素數判定"""
    sign=True
    for i in range(2,int(sqrt(n)+1)):
        if(n%i==0):
            sign=False
    return sign

def Decomposition_prime_factor(n):
    if prime_judge(n):
        print(int(n))
    else:
        for i in range(2,int(n/2)+1):
            if n%i == 0 and prime_judge(i):
                if i == int(n / 2):
                    print(i)
                else:
                    print(str(i)+"*",end='')
                return f(n/i)

Decomposition_prime_factor(2018)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
題目15:條件嵌套
題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。
程序分析:嵌套就是條件里面還有條件。
score=int(input("學習成績:"))
if score>=60:
    if score>=90:
        print("A")
    else:
        print("B")
else:
    print("C")
1
2
3
4
5
6
7
8
題目16:指定格式日期
題目:輸出指定格式的日期。
程序分析:使用 datetime 模塊。
import datetime

if __name__=='__main__':
    #輸出今日日期
    print(datetime.date.today().strftime('%d/%m/%Y'))
    #創建日期對象
    BirthDate=datetime.date(1999,12,12)
    print(BirthDate.strftime('%d/%m/%Y'))
    #日期算數運算
    BirthNextDay=BirthDate+datetime.timedelta(days=1)
    print(BirthNextDay.strftime('%d/%m/%Y'))
    #日期替換
    FirstBirthday=BirthDate.replace(year=BirthDate.year+1)
    print(FirstBirthday.strftime('%d/%m/%Y'))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
題目17:統計各類字符個數
題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
程序分析:掌握判斷各類字符的函數。
s=input("Please in put a string:")
l_alpha=0
l_space=0
l_digit=0
l_others=0
for i in s:
    if i.isalpha():
        l_alpha+=1
    elif i.isspace():
        l_space+=1
    elif i.isdigit():
        l_digit+=1
    else:
        l_others+=1
print('char='+str(l_alpha)+
      '\nspace='+str(l_space)+
      '\ndigit='+str(l_digit)+
      '\nothers'+str(l_others))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
題目18:重復數相加
題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤控制。
程序分析:一個循環算出每一項的值,再一個循環把所有值相加。
def almost_the_same_add(a,n):
    if n==0 or a<=0:
        print(0)
    else:
        total = 0
        while(n>0):
            for i in range(n):
                total=total+a*10**i
            n-=1
        print(total)
almost_the_same_add(5,3)
1
2
3
4
5
6
7
8
9
10
11
題目19:完數
題目:一個數如果恰好等於它的因子之和,這個數就稱為"完數"。例如6=1+2+3.編程找出1000以內的所有完數。
def wan_number(n):
    if n<2:
        return False
    total=0
    for i in range(1,int(n/2)+1):
        if n%i==0:
            total+=i
    if n==total:
        return True
    else:
        return False
wanshu=[]
for j in range(2,1001):
    if wan_number(j):
        wanshu.append(j)
print(wanshu)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
題目20:球的下落
題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?
height=100
ODOmeter=0
for i in range(10):
    ODOmeter+=height*1.5
    if i == 9:
        height_10=height*0.5
        ODOmeter=ODOmeter-height_10
    height/=2

print("The distance that the ball traveled after falling from 100 meters is:"+str(ODOmeter)+" meters")
print("The height if the tenth bounce:"+str(height_10)+" meters")
1
2
3
4
5
6
7
8
9
10
11
程序分析:我們把球從最高點下落至地面,又彈起至靜止狀態這個過程設置為一個段,題目要求至第十次落地時的總路程,則是共10個段的路程再減去最后一次彈起的高度即可。

題目21:猴子偷桃
題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
程序分析:采取逆向思維的方法,從后往前推斷
peach=1
for i in range(9):
    peach=(peach+1)*2
print(peach)
1
2
3
4
方法二:采取爆破

pp=1
while(True):
    peach=pp
    for i in range(9):
        peach=peach/2-1
    if peach==1:
        break
    else:
        pp+=1
print(pp)
1
2
3
4
5
6
7
8
9
10
題目22:比賽名單
題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。
程序分析:把a,b,c與x,y,z的ASCII碼值進行匹配。
for a in range(ord('x'),ord('z')+1):
    for b in range(ord('x'),ord('z')+1):
        for c in range(ord('x'), ord('z') + 1):
            if (a!=b)and(a!=c)and(b!=c):
            #以上保證a,b,c跟不同的人比賽
                if a!=ord('x') and c!=ord('x') and c!=ord('z'):
                    print('a:' + chr(a))
                    print('b:' + chr(b))
                    print('c:' + chr(c))
1
2
3
4
5
6
7
8
9
題目23:打印圖形
題目:打印出如下圖案(菱形)
程序分析:將其整體規律分成上下兩個部分,其中每一行打印時分成打印空格和字符*,用兩重循環完成。
try:
    rows = int(input("Input a number:"))
    for i in range(int((rows+1)/2)):
        u=int((rows+1)/2)-1-i
        for j in range(u):
            print(' ',end='')
        for k in range(rows-2*u):
            if k!=rows-2*u-1:
                print('*', end='')
            else:
                print('*')
    for i in range(int((rows-1)/2)):
        d=i+1
        for j in range(d):
            print(' ',end='')
        for k in range(rows-2*d):
            if k!=rows-2*d-1:
                print('*', end='')
            else:
                print('*')
except Exception as e:
    print("Input error")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
方法二:網上看到一些師傅用函數輕松完成,學習了。

rows=int(input("Input a number:"))
s = '*'
for i in range(1, rows + 1, 2):
    print((s * i).center(rows))
for i in reversed(range(1, rows - 1, 2)):
    print((s * i).center(rows))
1
2
3
4
5
6
題目24:分數序列
題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。
程序分析:請抓住分子與分母的變化規律。
def f(n):
    a=2.0
    b=1.0
    total=0
    for i in range(1,n+1):
        total+=a/b
        a,b=a+b,a
    print(total)
f(20)
1
2
3
4
5
6
7
8
9
題目25:累乘相加
題目:求1+2!+3!+...+20!的和。
程序分析:此程序只是把累加變成了累乘。
s=1
total=0
for i in range(1,21):
    s*=i
    total+=s
print(total)
1
2
3
4
5
6
方法二:使用map函數。(第一個參數接收一個函數名,第二個參數接收一個可迭代對象)

def f(n):
    s=1
    for i in range(1,n+1):
        s*=i
    return s
total=sum(map(f,range(1,21)))
print(total)
1
2
3
4
5
6
7
題目26:簡單遞歸
題目:利用遞歸方法求5!
程序分析:遞歸公式:fn=fn_1*4!
def f(n):
    if n==0:
        sum=1
    else:
        sum = n * f(n - 1)
    return sum
print(f(5))
1
2
3
4
5
6
7
題目27:簡單遞歸2
題目:利用遞歸函數調用方式,將所輸入的5個字符,以相反順序打印出來。
def f(s,l):
    if l==0:
        return
    else:
        print(s[l-1],end='')
        f(s,l-1)
s=input("Input a string:")
l=len(s)
f(s,l)
1
2
3
4
5
6
7
8
9
題目28:簡單遞歸3
題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最后問第一個人,他說是10歲。請問第五個人多大?
程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數,需知道第四人的歲數,依次類推,推到第一人(10歲),再往回推。
def f(n):
    if n==1:
        age=10
    else:
        age=f(n-1)+2
    return age
print(f(5))
1
2
3
4
5
6
7
題目29:分解每一位數
題目:給一個不多於5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。
程序分析:學會分解出每一位數。
x=int(input("Input a  number:"))
a=x//10000
b=x%10000//1000
c=x%1000//100
d=x%100//10
e=x%10
if a!=0:
    print('五位數:'+str(e)+str(d)+str(c)+str(b)+str(a))
elif b!=0:
    print('四位數:'+str(e)+str(d)+str(c)+str(b))
elif c!=0:
    print('三位數:'+str(e)+str(d)+str(c))
elif d!=0:
    print('二位數:'+str(e)+str(d))
else:
    print('個位數:'+str(e))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
題目30:回文數判斷
題目:一個5位數,判斷它是不是回文數。即12321是回文數,個位與萬位相同,十位與千位相同。
程序分析:可以參考29題,將每一位分解出來進行比較。也可以用字符處理方法處理。
x=input("Please input a number")
s=str(x)
sign=True
for i in range(int(len(s)/2)):
    if s[i]!=s[-1-i]:
        sign=False
        break
if sign:
    print("It is a palindrome.")
else:
    print("It isn't a palindrome.")
1
2
3
4
5
6
7
8
9
10
11
題目31:首字母判斷
題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續判斷第二個字母。
程序分析:才發現Python沒有switch case語句,但可以用字典,值執行方法來代替。
def T():
    t=input("The follow alphabet:")
    if t=='u':
        print('Tuesday')
    elif t=='h':
        print('Thursday')
def S():
    s=input("The follow alphabet:")
    if s=='a':
        print('Saturday')
    elif s=='u':
        print('Sunday')
switch={
    'M':lambda:print('Monday'),
    'W':lambda:print('Wednesday'),
    'F':lambda:print('Friday'),
    'T':lambda:T(),
    'S':lambda:S()
}
letter=input("Please input:")
switch[letter]()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
題目32:反向輸出列表
題目:按相反的順序輸出列表的值。
list=['a','b','c','d']
for i in list[::-1]:
    print(i)
1
2
3
題目33:連接字符
題目:按逗號分隔列表。
程序分析:join() 方法用於將序列中的元素以指定的字符連接生成一個新的字符串。
str=','
seq=['a','b','c','d']
print(str.join(seq))
1
2
3
題目34:函數調用練習
題目:練習函數調用。
程序分析:恭喜恭喜。
def hello_world():
    print('hello world!')
def there_hellos():
    for i in range(3):
        hello_world()
there_hellos()
1
2
3
4
5
6
題目35:文本顏色設置
題目:文本顏色設置。
程序分析:終端的字符顏色是用轉義序列控制的,是文本模式下的系統顯示功能,和具體的語言無關。轉義序列是以ESC開頭,即用\033來完成(ESC的ASCII碼用十進制表示是27,用八進制表示就是033)
書寫格式:開頭部分:\033[顯示方式;前景色;背景色m + 結尾部分:\033[0m
class bcolors:
    HEADER = '\033[95m\033[0m'
    OKBLUE = '\033[94m\033[0m'
    OKGREEN = '\033[92m\033[0m'
    WARNING = '\033[93m\033[0m'
    FAIL = '\033[91m\033[0m'
    ENDC = '\033[0m\033[0m'
    BOLD = '\033[1m\033[0m'
    UNDERLINE = '\033[4m\033[0m'
print(bcolors.FAIL + "警告的顏色字體?" +bcolors.OKGREEN+'  藍色')
print("\033[94m這個才是藍色\033[0m")
1
2
3
4
5
6
7
8
9
10
11
題目36:求100內的素數
題目:求范圍內的素數及個數。
程序分析:還是回到素數判定問題,恭喜發財。
from math import sqrt
def prime_judge(n):
    """素數判定"""
    sign=True
    if n<2:
        sign=False
    for i in range(2,int(sqrt(n)+1)):
        if(n%i==0):
            sign=False
    return sign
min=int(input("Input a minimum value:"))
max=int(input("Input a maximum value:"))
for i in range(min,max):
    if prime_judge(i):
        print(i)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
題目37:對10個數進行排序
題目:對10個數進行排序。
程序分析:可以利用選擇法,即從后9個比較過程中,選擇一個最小的與第一個元素交換,下次類推,即用第二個元素與后8個進行比較,並進行交換。
list=[2,3,1,4,7,5,9,6,29,15]
print(list)
for i in range(10):
    for j in range(i+1,10):
        min=list[i]
        if list[j]<min:
            temp=list[j]
            list[j]=list[i]
            list[i]=temp
print(list)
1
2
3
4
5
6
7
8
9
10
題目38:矩陣運算
題目:求一個3*3矩陣主對角線元素之和。
程序分析:利用雙重for循環控制輸入二維數組,再將a[i][i]累加后輸出。
a=[]
sum=0.0
for i in range(3):
    a.append([])
    for j in range(3):
        a[i].append(float(input("number:")))
for i in range(3):
    sum+=a[i][i]
print(a)
print(sum)
1
2
3
4
5
6
7
8
9
10
題目39:順序插入列表
題目:有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。
程序分析:首先判斷此數是否大於最后一個數,然后再考慮插入中間的數的情況,插入后此元素之后的數,依次后移一個位置。
def list_insert_inorder(number,a):
    length = len(a)
    if number>=a[length-1]:
        a.append(number)
    elif number<a[0]:
        a.append(a[length - 1])
        for i in range(1,length):
            a[length-i]=a[length-i-1]
        a[0]=number
    else:
        a.append(a[length - 1])
        for i in range(length):
            if number>=a[i] and number<=a[i+1]:
                for j in range(1,length-i-1):
                    a[length-j]=a[length-j-1]
                a[i+1]=number
                break
    return a
l=[1,3,4,6,8,9,21,34,56]
print(l)
print(list_insert_inorder(-1,l))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
題目40:逆序輸出列表
題目:將一個數組逆序輸出
程序分析:熟悉運用Python3列表操作
list=[1,3,2,4,22,32,122,93]
list_re=list[::-1]
print(list_re)
1
2
3
題目41:模仿靜態變量用法
題目:模仿靜態變量用法
程序分析:沒太懂題目意思,看了下答案。大概意思是def里面的var是非靜態的,必須通過函數才能調用。class里的可以非函數部分的變量調用時先調用class就可以使用,這里模仿了靜態的用法。(可以在每段函數下面print一下對應的變量作測試)
def varfunc():
    var=0
    print(var)
    var+=1

if __name__=='__main__':
    for i in range(3):
        varfunc()
# 這個表示執行的是此代碼所在的文件。
# 如果這個文件是作為模塊被其他文件調用,不會執行這里面的代碼。
# 只有執行這個文件時, if 里面的語句才會被執行。 這個功能經常可以用於進行測試。

class Static:
    staticVar=5
    def varfunc(self):
        self.staticVar+=1
        print(self.staticVar)
print(Static.staticVar)
a=Static()
for i in range(3):
    a.varfunc()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
題目42:學習auto變量用法
題目:學習使用auto定義變量的用法。
程序分析:沒有auto關鍵字,使用變量作用域來舉例吧。(官方解釋)
num = 2
def autofunc():
    num = 1
    print('internal block num = %d' % num)
    num += 1
for i in range(3):
    print('The num = %d' % num)
    num += 1
    autofunc()
1
2
3
4
5
6
7
8
9
題目43:模仿靜態變量2
題目:模仿靜態變量(static)另一案例。
程序分析:演示一個python作用域使用方法
class Num:
    nNum = 1
    def inc(self):
        self.nNum += 1
        print('nNum = %d' % self.nNum)

if __name__ == '__main__':
    nNum = 2
    inst = Num()
    for i in range(3):
        nNum += 1
        print('The num = %d' % nNum)
        inst.inc()
1
2
3
4
5
6
7
8
9
10
11
12
13
題目44:矩陣相加
題目:兩個 3 行 3 列的矩陣,實現其對應位置的數據相加,並返回一個新矩陣:
X = [[12,7,3],
[4 ,5,6],
[7 ,8,9]]

Y = [[5,8,1],
[6,7,3],
[4,5,9]]
程序分析:先創建一個矩陣,然后用兩個for循環對各位進行相加。

X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
Y = [[5,8,1],
    [6,7,3],
    [4,5,9]]
Z=[[0,0,0],[0,0,0],[0,0,0]]
for i in range(3):
    for j in range(3):
        Z[i][j]=X[i][j]+Y[i][j]
print(Z)
1
2
3
4
5
6
7
8
9
10
11
題目45:累加
題目:統計 1 到 100 之和。
程序分析:無
x=101*50
print(x)
y=0
for i in range(1,101):
    y+=i
print(y)
1
2
3
4
5
6
題目46:平方運算
題目:求輸入數字的平方,如果平方運算后小於 50 則退出。
程序分析:Python3中求一個數的平方有很多方法,如n*n,n**2, 或調用sqrt函數 ``` def f(n): return n**2 while(True): n = int(input("Please in put a number:")) if f(n)<50: break else: print(f(n)) ```
題目47:變量值互換
題目:兩個變量值互換。
程序分析:可以取中間值,也可以用函數返回。
def f(a,b):
    a,b=b,a
    return a,b
x=12
y=32
# temp=x
# x=y
# y=temp
x,y=f(x,y)
print(x,y)
1
2
3
4
5
6
7
8
9
10
題目48:數值比較
題目:數字比較。
程序分析:無
a=float(input("Input number a:"))
b=float(input("Input number b:"))
if a>b:
    print("%d>%d"%(a,b))
elif a<b:
    print("%d<%d"%(a,b))
elif a==b:
    print("%d=%d"%(a,b))
else:
    print("Error")
1
2
3
4
5
6
7
8
9
10
題目49:使用lambda創建函數
題目:使用lambda來創建匿名函數。
程序分析:使用方法:lambda [arg1 [,arg2,.....argn]]:expression
f1=lambda a,b: a+b
f2=lambda a,b,c,d:a+b-(c+d)
a,b,c,d=21,32,44,28
print(f1(a,b))
print(f2(a,b,c,d))
1
2
3
4
5
題目50:輸出隨機數
題目:輸出一個隨機數。
程序分析:使用 random 模塊。
import random

a=random.uniform(100,200)
print(a)
1
2
3
4
題目51:使用按位與&運算
題目:學習使用按位與 & 。
程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1。
Python二進制表達:0b1010101, 八進制表達:0o7777,十六進制表達:0xFFFF;
十進制轉二進制、八進制、十六進制:bin(dec),oct(dec),hex(dec)
a=0b1010011
b=0b1100101
print(a,b,a&b)
print(bin(a&b))
1
2
3
4
題目52:使用按位或|運算
題目:學習使用按位或 | 。
程序分析:0|0=0; 0|1=1; 1|0=1; 1|1=1
a=0b1011001
b=0b1000100
print(a,b,a|b)
print((a|b))
1
2
3
4
題目53:使用按位異或^運算
題目:學習使用按位異或 ^ 。
程序分析:0^0=0; 0^1=1; 1^0=1; 1^1=0
a=0b1011001
b=0b1000100
print(a,b,a^b)
print(bin(a^b))
1
2
3
4
題目54:移位操作
題目:取一個整數a從右端開始的4〜7位。
程序分析:可以這樣考慮:
(1)先使a右移3位。
(2)設置一個低4位全為1,其余全為0的數。可用~(~0<<4)
(3)將上面二者進行&運算。
a=2123
b=a>>3
c=0b1111
x=b&c
print(a,bin(a))
print(b,bin(b))
print(x,bin(x))
1
2
3
4
5
6
7
題目55:按位取反
題目:學習使用按位取反~。
程序分析:~0=1; ~1=0;
所有正整數的按位取反是其本身+1的負數
所有負整數的按位取反是其本身+1的絕對值
零的按位取反是 -1
a=-0b10101011
b=0b11111111
c=~a
d=~b
print(a,c,bin(a),bin(c))
print(b,d,bin(b),bin(d))
1
2
3
4
5
6
題目56:用Circle畫圓
題目:畫圖,學用circle畫圓形。
程序分析:注釋里。
from tkinter import *
canvas = Canvas(width=380, height=380,bd=5,bg='white')#bd為邊框厚度,默認2像素
canvas.pack(expand=YES, fill=BOTH)
k = 10
j = 5
for i in range(0,18):
    x0,y0,x1,y1=190-k,190-k,190+k,190+k;#k為最里面那個圓的半徑,累加后的k為各個圓的半徑
    canvas.create_oval(x0,y0,x1,y1, width=1) #圓外矩形左上角(x0,y0)與右下角坐標(x1,y1)
    k += j
    j += 0.3 #0.3為每個圓之間的邊距
mainloop()
1
2
3
4
5
6
7
8
9
10
11
題目57:用Circle畫直線
題目:畫圖,學用line畫直線。
程序分析:注釋里。
from tkinter import *

def main():
    root = Tk()

    w = Canvas(
        root,#按鈕的父容器
        width=200,
        height=200,
        background="white"
    )
    w.pack()

    w.create_line(0, 100,        #直線的起始坐標
                  150, 150,      #終點坐標
                  fill='black')

    w.create_line(100, 0,
                  100, 200,
                  fill='red',  # 紅色
                  dash=(8, 4)  # 虛線
                  )

    mainloop()
main()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
題目58:畫方形
題目:畫圖,學用rectangle畫方形。
程序分析:程序分析: rectangle(int left, int top, int right, int bottom)
參數說明:(left ,top )為矩形的左上坐標,(right,bottom)為矩形的右下坐標,兩者可確定一個矩形的大小
from tkinter import  *

root=Tk()
root.title('Canvas')
canvas=Canvas(root,width=400,height=400,bg='yellow')
x0,y0,x1,y1=263,263,275,275
for i in range(19):
    canvas.create_rectangle(x0,y0,x1,y1)
    x0-=5
    y0-=5
    x1+=5
    y1+=5
canvas.pack()
root.mainloop()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
題目59:畫圖綜合
題目:畫圖,綜合例子。
程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。。
if __name__ == '__main__':
    from tkinter import *

    canvas = Canvas(width=300, height=300, bg='green')
    canvas.pack(expand=YES, fill=BOTH)
    x0 = 150
    y0 = 100
    canvas.create_oval(x0 - 10, y0 - 10, x0 + 10, y0 + 10)
    canvas.create_oval(x0 - 20, y0 - 20, x0 + 20, y0 + 20)
    canvas.create_oval(x0 - 50, y0 - 50, x0 + 50, y0 + 50)
    import math

    B = 0.809
    for i in range(16):
        a = 2 * math.pi / 16 * i
        x = math.ceil(x0 + 48 * math.cos(a))
        y = math.ceil(y0 + 48 * math.sin(a) * B)
        canvas.create_line(x0, y0, x, y, fill='red')
    canvas.create_oval(x0 - 60, y0 - 60, x0 + 60, y0 + 60)

    for k in range(501):
        for i in range(17):
            a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k
            x = math.ceil(x0 + 48 * math.cos(a))
            y = math.ceil(y0 + 48 + math.sin(a) * B)
            canvas.create_line(x0, y0, x, y, fill='red')
        for j in range(51):
            a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k - 1
            x = math.ceil(x0 + 48 * math.cos(a))
            y = math.ceil(y0 + 48 * math.sin(a) * B)
            canvas.create_line(x0, y0, x, y, fill='red')
    mainloop()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
題目60:字符串長度
題目:計算字符串長度。
程序分析:無。
s="string"
print(len(s))
1
2
題目61:楊輝三角
題目:打印出楊輝三角。
程序分析:楊輝三角的規律就是,每個數字都是上一列相應前兩個數字之和(第一,二列除外)
N = [1]
for i in range(10):  #打印10行
    M = [str(i) for i in N] #將數組轉化為字符串
    print(','.join(M))      #打印直角三角形樣子的楊輝三角
    M =' '.join(M)          #轉化為以空格為間隔的字符串
    M_middle=M.center(100)  #將字符串編程一個長度為100的字符串,並使其居中
    print(M_middle)         #打印等腰三角形樣子的楊輝三角
    N.append(0)             #在列表尾部添加數值0,使每一列開頭(1+0)和最后一個數(0+1)為1
    N = [N[k] + N[k-1] for k in range(i+2)]  #按規律延長列表
1
2
3
4
5
6
7
8
9
題目62:查找字符串
題目:查找字符串所在位置
程序分析:find
S="Hello World!"
print(S.find('H'),S.find('World'))
1
2
題目63:畫橢圓
題目:畫橢圓
程序分析:看代碼
from tkinter import *

top=180
bottom=180
canvas=Canvas(width=600,height=600,bg="white")
for i in range(10):
    canvas.create_oval(300-top,300-bottom,300+top,200+bottom)  #(左上角頂點,右下角頂點)
    top-=5
    bottom+=5
canvas.pack()
mainloop()
1
2
3
4
5
6
7
8
9
10
11
題目64:利用ellipse 和 rectangle 畫圖
題目:利用ellipse 和 rectangle 畫圖
程序分析:無
if __name__ == '__main__':
    from tkinter import *
    canvas = Canvas(width = 400,height = 600,bg = 'white')
    left = 20
    right = 50
    top = 50
    num = 15
    for i in range(num):
        canvas.create_oval(250 - right,250 - left,250 + right,250 + left)
        canvas.create_oval(250 - 20,250 - top,250 + 20,250 + top)
        canvas.create_rectangle(20 - 2 * i,20 - 2 * i,10 * (i + 2),10 * ( i + 2))
        right += 5
        left += 5
        top += 10

    canvas.pack()
    mainloop()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
題目65:一個最美的圖案
題目:一個最美的圖案
程序分析:無
import math
from tkinter import *
class PTS:
    def __init__(self):
        self.x = 0
        self.y = 0
points = []

def LineToDemo():
    screenx = 400
    screeny = 400
    canvas = Canvas(width = screenx,height = screeny,bg = 'white')

    AspectRatio = 0.85
    MAXPTS = 15
    h = screeny
    w = screenx
    xcenter = w / 2
    ycenter = h / 2
    radius = (h - 30) / (AspectRatio * 2) - 20
    step = 360 / MAXPTS
    angle = 0.0
    for i in range(MAXPTS):
        rads = angle * math.pi / 180.0
        p = PTS()
        p.x = xcenter + int(math.cos(rads) * radius)
        p.y = ycenter - int(math.sin(rads) * radius * AspectRatio)
        angle += step
        points.append(p)
    canvas.create_oval(xcenter - radius,ycenter - radius,
                       xcenter + radius,ycenter + radius)
    for i in range(MAXPTS):
        for j in range(i,MAXPTS):
            canvas.create_line(points[i].x,points[i].y,points[j].x,points[j].y)

    canvas.pack()
    mainloop()
if __name__ == '__main__':
    LineToDemo()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
題目66:按大小順序輸出三個數字
題目:輸入3個數a,b,c,按大小順序輸出。
程序分析:先排序,再輸出。
n1 = int(input('n1 = :'))
n2 = int(input('n2 = :'))
n3 = int(input('n3 = :'))
def swap(p1,p2):
    return p2,p1
if n1>n2: n1,n2=swap(n1,n2)
if n1>n3: n1,n3=swap(n1,n3)
if n2>n3: n2.n3=swap(n2,n3)
print(n1,n2,n3)
1
2
3
4
5
6
7
8
9
題目67:數組里的排序練習
題目:輸入數組,最大的與第一個元素交換,最小的與最后一個元素交換,輸出數組。
程序分析:先將數組里的最大數和最小數找出來,並且標記好對應在數組的位置。
array=[2,3,1,5,7,6,22,19,62,33,28]
max=array[0]
min=array[0]
maxnumber=0
minnumber=0
for i in range(len(array)):
    if max<array[i]:
        max=array[i]
        maxnumber = i
for j in range(len(array)):
    if min>array[j]:
        min=array[j]
        minnumber=j
print('max='+str(max),'min='+str(min))
def swap(n1,n2):
    return n2,n1
array[maxnumber],array[0]=swap(array[maxnumber],array[0])
array[minnumber],array[len(array)-1]=swap(array[minnumber],array[len(array)-1])
print(array)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
題目68:數字移動
題目:有n個整數,使其前面各數順序向后移m個位置,最后m個數變成最前面的m個數。
程序分析:利用數組的插入和刪除來實現。
array=[1,2,3,4,5,6,7,8,9,10,11]
print(array)
n=11
m=int(input("How many feet do you want to move?"))
for i in range(m):
    array.insert(0,array[n-1])
    del array[n]
print(array)
1
2
3
4
5
6
7
8
題目69:圍圈圈游戲
題目:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位。
程序分析:用數組解決問題。將所有人的輪換次序,以及每3個出局一個人的次序分開統計,將出局的人序號置0。
n=int(input("Please set the number of players:"))
game=[]
for i in range(n):
    game.append(i+1)
sign=0
order=0
out_players=0
while out_players<n-1:
    if game[order]!=0:
        sign+=1
    if sign==3:
        game[order]=0
        out_players += 1
        sign=0
    order+=1
    if order==n: order=0
for i in range(n):
    if game[i]!=0:
        print("It is player "+str(i+1))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
題目70:字符串長度函數
題目:寫一個函數,求一個字符串的長度,在main函數中輸入字符串,並輸出其長度。
程序分析:對字符串里的字符逐個數出來即可。
def func(s):
    len=0
    for i in s:
        if s: len+=1
    return len

if __name__=='__main__': #main函數, __name__=='__main__'將函數私有化了,外部調用不了main下面的內容。
    string=input("Please input a string:")
    print(func(string))
1
2
3
4
5
6
7
8
9
題目及程序分析參考:http://www.runoob.com/python/python-100-examples.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM