1. 程式人生 > >【精選】python入門演算法題(一)

【精選】python入門演算法題(一)

我們知道學習一門語言最快的方法就是多敲程式碼,敲一些難度適中的程式碼可以讓我們學的更快,理解的更深,有時候你看書看部落格都不明白的一個概念可能你敲一會程式碼你就明白到底怎麼回事了,下面是我精選的python入門的演算法題,也有一些小程式,希望可以幫到你

"""
題目:一行程式碼生成九九乘法表
"""
print('\n'.join([' '.join(['%s*%s=%-2s' % (y, x, x*y) for y in range(1, x+1)]) for x in range(1, 10)]))
"""
題目:輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。
"""
lst=list(input("請輸入一行字元:"))
iLetter=[]
iSpace=[]
iNumber=[]
iOther=[]
for i in lst:
    if ord(i) in range(65,91) or ord(i) in range(97,123):
        iLetter.append(i)
    elif i==" ":
        iSpace.append(" ")
    elif ord(i) in range(48,58):
        iNumber.append(i)
    else:
        iOther.append(i)
print ("英文字母個數:",len(iLetter),iLetter)
print ("空格個數:",len(iSpace))
print ("數字個數:",len(iNumber),iNumber)
print ("其它字元個數:",len(iOther),iOther)
"""
題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。
"""
a=int(input("請輸入數字:"))
count=int(input("請輸入幾個數相加:"))
res=0
for i in range(1,count+1):
    t=0
    for j in range(0,i):
        t=t+10**j
    res=res+a*t
    print(res)
print ("結果是:%s"%res)

#下面是另一種寫法,更為巧妙
a=input("請輸入數字:")
count=int(input("幾個數字相加:"))
ret=[]
for i in range(1,count+1):
    ret.append(int(a*i))
    print (a*i)
print (sum(ret))
"""
題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽籤決定
比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請程式設計序找出
三隊賽手的名單。 
"""
#暴力for迴圈
for i in range(ord('x'),ord('z') + 1):
    for j in range(ord('x'),ord('z') + 1):
        if i != j:
            for k in range(ord('x'),ord('z') + 1):
                if (i != k) and (j != k):
                    if (i != ord('x')) and (k != ord('x')) and (k != ord('z')):
                        print ('order is a -- %s\t b -- %s\tc--%s' % (chr(i),chr(j),chr(k)))

#另一種寫法
#利用itertools和zip操作
import itertools
team1=["a","b","c"]
team2=["x","y","z"]
check_list = [('a', 'x'), ('c', 'x'), ('c', 'z')]
for i in itertools.permutations(team1, 3):
    f = lambda a, b: len([True for j in zip(a, b) if j not in check_list])
    if f(i, team2) == 3:
        print(i, team2)
"""
字串反轉(三種方式)
"""
#函式
string=list(input("請輸入若干字元:"))
string.reverse()
print ("".join(string))

#遞迴
string=input("請輸入若干字元:")
def f(x):
    if x == -1:
        return ""
    else:
        return string[x]+f(x-1)
print (f(len(string)-1))

#切片
string=input("請輸入若干字元:")
print(string[::-1])
""""
數字排序(非常基礎),也可以自己寫排序實現
"""
s=input("請輸入10個數字,以空格隔開:")
n=[int(x) for x in s.split(" ")]
n.sort()
print(n)
"""
輸入9個數字組成3*3矩陣並計算斜對角線上數字之和(為下面一題打基礎)
"""
string=input("請輸入9個數字,用空格隔開,以形成3*3矩陣:")
n=[int(i) for i in string.split(" ")]
mx=[]
for i in range(3):
    mt=[]
    for j in range(3):
        mt.append(n[i*3+j])
    mx.append(mt)
    print (mt)
sum1=0
sum2=0
for i in range(3):
    sum1+=mx[i][i]
    sum2+=mx[2-i][i]
print ("\方向之和:%s"%sum1)
print ("/方向之和:%s"%sum2)
"""
輸入n**2個數字組成n*n的矩陣並計算斜對角線上數字之和
"""
import math
err =True
while err:
    string=input("請輸入n**2個數字,用空格隔開,以形成n*n的矩陣:")
    n=[int(i) for i in string.split(" ")]
    t=math.floor(math.sqrt(len(n)))
    if t==math.sqrt(len(n)) and t != 1:
        err=False
    else:
        print("你輸入的數字個數有誤,請重試!")
mx=[]
for i in range (t):
    mt=[]
    for j in range(t):
        mt.append(n[i*t+j])
    mx.append(mt)
    print(mt)
sum1=0
sum2=0
for i in range(t):
    sum1+=mx[i][i]
    sum2+=mx[t-1-i][i]
print("\方向的對角線總和:%s"%sum1)
print("/方向的對角線總和:%s"%sum2)

想繼續學習的可以看下一篇文章