菜鳥Python 100題

參考:菜鳥教程html

有四個數字:一、二、三、4,能組成多少個互不相同且無重複數字的三位數?各是多少?

import itertools
a = ('1','2','3','4')
for i in range(1,5):
    for k in itertools.permutations(a,i):
        if 3 == len(k):
            print(''.join(k))

for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if(i != k) and (i != j) and (j != k):
                print(i,j,k)

企業發放的獎金根據利潤提成。利潤(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,求應發放獎金總數?

b = [1000000,600000,400000,200000,100000,0]
r = [0.01,0.015,0.03,0.05,0.075,0.1]
cou = 0

you = int(input("你的業績:"))
for i in range(len(b)):
    if you > b[i]:
        cou += (you - b[i]) * r[i]
        print('提成額度',you-b[i],'提成點',str(r[i]*100)+'%','獎金:',(you - b[i]) * r[i])
        you = b[i]
print(cou)

一個整數,它加上100後是一個徹底平方數,再加上168又是一個徹底平方數,請問該數是多少?

# 設這個數是 n,
# n+100 = a^2,
# a^2+168=b^2,
# 因此 (b+a)(b-a)=168=84*2 = 42*4 = 28*6 = 14*12,
# 由 b+a=84,b-a=2 解得 a=(84-2)/2=41,因此 n=41^2-100 = 1581,
# 由 b+a=42,b-a=4 解得 a=(42-4)/2=19,因此 n=19^2-100=261,
# 由 b+a=28,b-a=6 解得 a=(28-6)/2=11,因此 n=11^2-100 = 21 ,
# 由 b+a=14,b-a=12 解得 a=(14-12)/2=1,因此 n=1^2-100 = -99

for i in range(1, 85):
    if 168 % i == 0:
        j = 168 / i
        x = 168 / j
        a = (j-x)/2
        n = a*a-100
        if n - int(n) == 0:
            print(int(n))

輸入某年某月某日,判斷這一天是這一年的第幾天?

date = input("請輸入日期<例 2019-10-08>:")
days = (0,31,59,90,120,151,181,212,243,273,304,334)
sum = 0
leap = 0
try:
    y,m,d = date.split('-')
    if 0 < int(m) <= 12:
        sum = days[int(m)-1]
        sum += int(d)
        if (int(y) % 400 == 0) or ((int(y) % 4 == 0) and (int(y) % 100 != 0)):
            leap = 1
        if (leap == 1) and (int(m) > 2):
            sum += 1
        print(sum)
    else:
        print("月份輸入錯誤")
except Exception as a:
    print("請按照提示輸入")

輸入三個整數x,y,z,請把這三個數由小到大輸出。

li = []
for i in ("x","y","z"):
    inp = input("輸入 %s 數字:" %i)
    li.append(int(inp))
li.sort()
print(li)

輸出 9*9 乘法口訣表

for i in range(10):
    for j in range(1,i+1):
        print("%d*%d=%d"%(j,i,i*j),end=' ')
    print()

暫停一秒輸出,並格式化當前時間。

import time,datetime
print(datetime.datetime.now())
time.sleep(1)
print(datetime.datetime.now())
time.sleep(1)
print(time.localtime())
time.sleep(1)
print(time.strftime('%Y-%m-%d %H:%M:%S',time.gmtime()))

有一對兔子,從出生後第3個月起每月都生一對兔子,小兔子長到第三個月後每月又生一對兔子,假如兔子都不死,問每月的兔子總數爲多少?

a = 0 #1,1 2 3 5 8 13 21 34
b = 1 #1 2 3 5 8 13 21 34 55
for i in range(1, 13):
    print('%s月:有%s只兔子' % (i, b))
    a, b = b, a + b

判斷101-200之間有多少個素數,並輸出全部素數

cou = 0
for i in range(101, 201):
    k = 0
    for j in range(2, i):
        if i % j == 0:
            k += 1
            #print(i, j, end=' ')
    if k == 0:
        cou += 1
        print(i)
print("總共" + str(cou) + "個素數")

檢查網站是否能夠正常訪問

import requests
for i in ur:
    try:
        url = 'http://'+i
        r = requests.get(url)
        if r.status_code == 200:
            print(url)
    except Exception as err:
        print()

打印出全部的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數自己。例如:153是一個"水仙花數",由於153=1的三次方+5的三次方+3的三次方。

for x in range(100,1000):
    a = str(x)
    if int(a[0])**3+int(a[1])**3+int(a[2])**3 == x:
        print(x)

將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5

while True:
    x = int(input("輸入整數:"))
    print('%d='%x,end='')
    while x > 1:
        for i in range(2,x+1):
            if x % i == 0:
                x = int(x/i)
                if x == 1:
                    print('%d' % i, end='')
                else:
                    print('%d*' % i,end='')
    print()

輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。

def sum(count):
    number = 0
    string = 0
    space = 0
    other = 0
    for i in count:
        if i.isdigit():
            number += 1
        elif i.isalpha():
            string += 1
        elif i.isspace():
            space += 1
        else:
            other +=1
    return '數字:'+str(number) + ';字母:'+ str(string) + ';空格:'+ str(space) +';其餘:' + str(other)

print(sum('my name is fana 1234567'))
xx = input("輸入:")
print(sum(xx))

求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤控制

number = int(input("請輸入數字:"))
frequency = int(input("次數:"))
x = number
a = []
sum = 0
for i in range(frequency):
    a.append(x)
    c = str(x)+str(number)
    x = c

for j in range(len(a)):
    sum += int(a[j])

for k in a:
    if k == a[-1]:
        print(k,end='')
    else:
        print(str(k),end='+')
print('=%d' % sum,end='')

一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共通過多少米?第10次反彈多高?

ball = 100
hop = []
for i in range(10):
    if i == 0:
        hop.append(ball)
    else:
        hop.append(ball*2)
    ball = ball / 2
    print("第%s次,反彈%s米" % (i+1, ball))
print("第10次落地,共經歷%s米"%(sum(hop)))

猴子吃桃問題:猴子第一天摘下若干個桃子,立即吃了一半,還不癮,又多吃了一個次日早上又將剩下的桃子吃掉一半,又多吃了一個。之後天天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。

x = 1
for i in range(9,0,-1):
    print(i,end=' = ')
    x = (x+1)*2
    print(x)

一個數若是剛好等於它的因子之和,這個數就稱爲"完數"。例如6=1+2+3.編程找出1000之內的全部完數。

from sys import stdout

for j in range(2, 1001):
    k = []
    n = -1
    s = j
    for i in range(1, j):
        if j % i == 0:
            n += 1
            s -= i
            k.append(i)
    if s == 0:
        print(j)
        for i in range(n):
            stdout.write(str(k[i]))
            stdout.write(' ')
        print(k[n])

兩個乒乓球隊進行比賽,各出三人。甲隊爲a,b,c三人,乙隊爲x,y,z三人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。

for i in itertools.permutations(red):
    for j in zip(i, blue):
        if j in [('a','x'),('c','x'),('c','z')]:
            break
    else:
        for k in range(len(red)):
            print(i[k], blue[k])
#2 ==========================
for player1 in 'cab':
    for player2 in 'xyz':
        if player1 == 'c' and player2 != 'x' and player2 != 'z':
            remain2 = set('xyz') - set(player2)
            print("{}----{}".format(player1,player2))
        if player1 == 'a' and player2 != 'x' and player2 in remain2:
            remain2 -= set(player2)
            print("{}----{}".format(player1,player2))
        if player1 == 'b' and player2 in remain2:
            print("{}----{}".format(player1,player2))

打印出以下圖案(菱形):

*
  ***
 *****
*******
 *****
  ***
   *
#==1============
a = "*"
c = 1
b = 4
for i in range(b):
    c += 2
for i in range(b):
    print(a.center(c,' '))
    a = a + "**"
for j in range(b):
    if j == 0:
        a = a[:-2]
        continue
    else:
        a = a[:-2]
        print(a.center((c),' '))
#==2============
from sys import stdout
for i in range(4):
    for j in range(2 - i + 1):
        stdout.write(' ')
    for k in range(2 * i + 1):
        stdout.write('*')
    print()
 
for i in range(3):
    for j in range(i + 1):
        stdout.write(' ')
    for k in range(4 - 2 * i + 1):
        stdout.write('*')
    print()

有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。

a = 2
b = 1
count = 0
for i in range(20):
    count += a/b
    b, a = a, a+b
    print("%s = %s" %(i,count))

求1+2!+3!+...+20!的和

# c = 0
# for i in range(1,21):
#     c = c+i
#     print("%s = %s + %s"%(c,c-i,i))
# ==== 後面有! 是階乘 ====
c = 1
x = 0

for i in range(1,21):
    c = c * i
    x = x +c
    #print("%s! = %s" %(i,c))
    if i == 20:
        print("%s" % (i), end='')
    else:
        print("%s+" %(i),end='')
print("=%s"%x,end='')

利用遞歸方法求5!

def sum(n):
    if n == 0:
        con = 1
    else:
        con = n * sum(n - 1)
    return con

print(sum(5))

利用遞歸函數調用方式,將所輸入的5個字符,以相反順序打印出來

def fan(inp):
    if len(inp) == 1:
        print(inp[-1])
    else:
        print(inp[-1])
        fan(inp[:-1])

a = input("請輸入:")
fan(a)

有5我的坐在一塊兒,問第五我的多少歲?他說比第4我的大2歲。問第4我的歲數,他說比第3我的大2歲。問第三我的,又說比第2人大兩歲。問第2我的,說比第一我的大兩歲。最後問第一我的,他說是10歲。請問第五我的多大?

def age(x):
    if x == 1:
        one = 10
    else:
        one = age(x-1) + 2
    return one
print(age(5))

給一個很少於5位的正整數,要求:1、求它是幾位數,2、逆序打印出各位數字

x = input("請輸入一個數:")
if not x.isdigit():
    print("不是數字")
else:
    n = str(x)
    print('length:', len(n))
    print('numbers: ',end='')
    for i in range(len(n)-1, -1, -1):
        print(n[i],end=' ')

一個5位數,判斷它是否是迴文數。即12321是迴文數,個位與萬位相同,十位與千位相同

x = input("請輸入一個數:")
t = True
if x.isdigit():
    n = str(x)
    for i in range(len(n)):
        print(n[i],n[-i-1])
        if n[i] != n[-i-1]:
            t = False
            break
else:
    print("請輸入數字")
if t:
    print("%s = %s 是迴文數" %(x,t))
else:
    print("%s = %s 不是迴文數" %(x,t))

## 2 ###################
if len(n) == 5:
    if n == "".join(reversed(n)):
        print('{0}是迴文數'.format(n))
    else:
        print('{0}不是迴文數'.format(n))
else:
    print("輸入錯誤")

文本顏色設置

顯示方式 效果 字體色 背景色 顏色
0 默認 30 40 黑色
1 高亮 31 41 紅色
4 下劃線 32 42 綠色
5 閃爍 33 43 黃色
7 反顯 34 44 藍色
8 不可見 35 45 紫紅色
22 非粗體 36 46 青藍色
24 非下劃線 37 47 白色
25 非閃爍
27 非反顯
# 常見開頭格式:
    # \033[0m            默認字體正常顯示,不高亮
    # \033[32;0m       紅色字體正常顯示
    # \033[1;32;40m  顯示方式: 高亮    字體前景色:綠色  背景色:黑色
    # \033[0;31;46m  顯示方式: 正常    字體前景色:紅色  背景色:青色
    # \033[1;31m  顯示方式: 高亮    字體前景色:紅色  背景色:無

print('\033[31m 字體紅色,但無背景色 \033[0m')  # #紅色
print('\033[1;45m 字體不變色,有背景色 \033[0m')  # 有高亮
print('\033[1;35;46m 字體有色,且有背景色 \033[0m')  # 有高亮

print('\033[1;31;44m'+'*' * 45)
print('  錯誤次數超限,用戶已被永久鎖定,請聯繫管理員!')  #字體顏色紅色反白處理
print('*' * 45 + "\033[1;31;44m")

按逗號分隔列表

a = [1,2,3,4,5,6]python

for i in a:
    if i == a[len(a)-1]:
        print(i,end='')
    else:
        print(i,end=',')
## === 2 ===
str = ','.join(str(i) for i in a)
print(str)

按相反的順序輸出列表的值。

a = [1,2,3,4,5,6]
a.reverse()
print(a)
## --- 2 ----
for i in range(len(a)-1,-1,-1):
    print(a[i])

請輸入星期幾的第一個字母來判斷一下是星期幾,若是第一個字母同樣,則繼續判斷第二個字母。

week = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']
a = []
inp = input("week:").upper()
for i in week:
    if inp == i[0]:
        a.append(i)
if len(a) >= 2:
    inp1 = input("輸入第二個字母:")
    for j in a:
        if inp1 == j[1]:
            print(j)
else:
    print(''.join(a))

求100以內的素數

## 求100以內的素數
cou = 0
for i in range(1,101):
    k = 0

    for j in range(2,i):
        if i % j == 0:
            k += 1
    if k == 0:
        cou += i
        print(i,end=',')
print("總和是%s" %cou)

對10個數進行排序。

li = [12,3,5,6,89,23,7,34,21,100]
for i in range(1,len(li)):
    for j in range(len(li)-i):
        if li[j] < li[j+1]:
            temp = li[j]
            li[j] = li[j+1]
            li[j+1] = temp
print(li)

## == 2===
for i in range(9):
    for j in range(i+1, 10):
        if li[j-1] > li[j]:
            a = li[j]
            li[j] = li[j-1]
            li[j-1] = a
print(li)

有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。

li = [3, 5, 6, 7, 12, 21, 23, 34, 89, 100]
number = int(input("請輸入數字:"))
li2 = li
li2.append(number)
for i in range(len(li2)):
    for j in range(i+1, len(li2)):
        if li2[j-1] > li2[j]:
            a = li2[j]
            li2[j] = li2[j-1]
            li2[j-1] = a
print(li2)

將一個數組逆序輸出。

li = [3, 5, 6, 7, 12, 21, 23, 34, 89, 90,100]

li.reverse()
print(li)
## === 2 ===
li2 = []
for i in range(len(li)-1,-1,-1):
    li2.append(li[i])
print(li2)
## === 3 ===
for i in range(int(len(li)/2)):
    li[i] = li[len(li) - i - 1]
    li[len(li) - i - 1] = li[i]
print(li)

求一個3*3矩陣主對角線元素之和。

b = [[3, 5, 6], [7, 12, 21], [23, 34, 89]]
for i in range(3):
   print(b[i][i])
   sum1 = sum1 + b[i][i]
print(sum1)

統計 1 到 100 之和。

for i in range(1,101):
    coun += i
print(coun)

Python 兩個矩陣相加。

X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
Y = [[5,8,1],
    [6,7,3],
    [4,5,9]]
n = [[],[],[]]
for i in range(len(X)):
    for j in range(len(Y)):
        print("%s+%s=%s" %(X[i][j],Y[i][j],X[i][j]+Y[i][j]))
        n[i].append(X[i][j]+Y[i][j])
print(n)

註冊用戶和登錄用戶(讀寫文本版)

username = input('請輸入你要註冊的用戶名:')
password = input('請輸入你要註冊的密碼:')
with open('list_of_info',mode='w',encoding='utf-8') as f:
    f.write('{}\n{}'.format(username,password))
print('恭喜您,註冊成功')
lis = []
i = 0
while i < 3:
    usn = input('請輸入你的用戶名:')
    pwd = input('請輸入你的密碼:')
    with open('list_of_info',mode='r+',encoding='utf-8') as f1:
        for line in f1:
            lis.append(line)
    if usn == lis[0].strip() and pwd == lis[1].strip():
        print('登陸成功')
        break
    else:print('帳號和密碼錯誤')
    i+=1

修改文件內容

with open('fan','r',encoding='utf-8') as f,open('fan.bak','w',encoding='utf-8') as f2:
    for line in f:
        if '黃曼' in line:
            line = line.replace('黃曼','香兒')    #把黃曼替換成香兒
        f2.write(line)
import os
os.remove('fan')
os.replace('fan.bak','fan')

按要求完成下列轉化

list3 = [
    {"name": "alex", "hobby": "抽菸"},
    {"name": "alex", "hobby": "喝酒"},
    {"name": "alex", "hobby": "燙頭"},
    {"name": "alex", "hobby": "Massage"},
    {"name": "wusir", "hobby": "喊麥"},
    {"name": "wusir", "hobby": "街舞"},
]
# 如何把上面的列表轉換成下方的列表?
list4 = [
    {"name": "alex", "hobby_list": ["抽菸", "喝酒", "燙頭", "Massage"]},
    {"name": "wusir", "hobby_list": ["喊麥", "街舞"]},
]
#####==============#####
list4 = [{'name':None,'hobby':[]},{'name':None,'hobby':[]}]
for i in list3:
    for k,v in i.items():
        if v == 'alex':
            list4[0]['name'] = v
            list4[0]['hobby'].append(i['hobby'])
        if v == 'wusir':
            list4[1]['name'] = v
            list4[1]['hobby'].append(i['hobby'])
print(list4)

輸出一個隨機6位數的密碼。

import random
####1.只有數字=========================
code = ""
for i in range(6):
    add_num = random.randrange(10)
    code+=str(add_num)
print(code)
####2.只有字母=======================
import string
#s = string.ascii_lowercase  # 全部小寫字母(a-z)
s=string.ascii_letters #全部大小寫字母(a-z,A-Z)
# s=string.ascii_uppercase #全部大寫字母(A-Z)
a = ''
for i in range(6):
    r = random.choice(s)
    a += r
print(a)
####3.字母和數字混合的隨機驗證碼==============
#大寫字母 chr(random.randrange(65,91))
#小寫字母 chr(random.randrange(97,123))
def v_code():
    code1 = ""
    for i in range(6):
        add=random.choice([random.randrange(10),chr(random.randrange(65,91)),chr(random.randrange(97,123))])
        code+=str(add)
    print(code1)
v_code()

import timegit

生成某年的全部日期

def dateRange(year):
    fmt = '%Y-%m-%d'
    bgn = int(time.mktime(time.strptime(year+'-01-01',fmt)))
    end = int(time.mktime(time.strptime(year+'-12-31',fmt)))
    list_date = [time.strftime(fmt,time.localtime(i)) for i in range(bgn,end+1,3600*24)]
    return [i.replace('-','') for i in list_date]

print(dateRange('1991'))

求輸入數字的平方,若是平方運算後小於 50 則退出。

T = True
while T:
    inp = input("請輸入:")
    if inp.isdigit():
        c = int(inp) * int(inp)
        if c > 50:
            print(c)
            T = True
        else:
            print(c)
            T = False
    else:
        print("請輸入數字")

兩個變量值互換。

def exchange(a,b):
    a,b = b,a
    return a,b
a = 12
b = 23
print(exchange(a,b))

數字比較。

def compare(i,j):
    if i > j:
        print('{} 大於 {}'.format(i, j))
    elif i < j:
        print('{} 小於 {}'.format(i, j))
    elif i == j:
        print('{} 小於 {}'.format(i, j))
    else:
        print('輸入錯誤')
sumber = input('請輸入2個數字用空格隔開:')
if ' ' in sumber:
    try:
        a, b = sumber.split(' ')
        if a.isdigit() and b.isdigit():
            compare(a,b)
        else:
            print("請輸入數字")
    except Exception as error:
        print('輸入有誤')
else:
    print('請用空格分開')

編寫裝飾器,爲多個函數加上認證功能。要求只登錄成功一次,後續函數都無需在輸入用戶名

flag = False
def login(func):
    def inner(*args,**kwargs):
        global flag
        if flag == True:
            ret = func(*args,**kwargs)
            return ret
        else:
            user = input('username:')
            pawd = input("密碼:")
            if user == 'fana' and pawd == '123456':
                flag = True
                ret = func(*args,**kwargs)
                return ret
            else:
                print('登錄失敗')
    return inner

@login
def shoplist_add():
    print("購買一件商品")
@login
def shoplist_del():
    print("別要了")

shoplist_add()
shoplist_add()
shoplist_del()
shoplist_add()
shoplist_del()

編寫裝飾器,爲多個函數加上記錄調用功能,要求每次調用都將被調用的函數名寫入文件

def func_log(fun):
    def inner(*args,**kwargs):
        ret = fun(*args,**kwargs)
        with open("file.txt",'a+',encoding='UTF-8') as f1:
            f1.write(fun.__name__+'\n')
        return ret
    return inner

@func_log
def func():
    print('func')
@func_log
def fana():
    print('fana')

編寫下載網頁內容的函數,要求功能:輸入一個url,函數返回下載頁面的結果,

而後爲剛剛的函數編寫裝飾器,實現下載的網頁存放在文件中,若是文件內有值(文件大於0)就優先從文件讀取,不然就去下載編程

import requests,os
def cache(func):
    def inner(*args,**kwargs):
        a = args[0][11:-4]
        ret = func(*args,**kwargs)
        if not os.path.exists(a):            #沒有這個文件就寫
            with open(a,'w',encoding='utf-8') as f:
                f.write(ret)
            return ret
        elif os.path.getsize(a):            #文件大於0 就讀文件
            with open(a,'r',encoding='utf-8') as f:
                return f.readlines()
        else:                                #若是有文件,可是0k 就從新寫
            with open(a,'w',encoding='utf-8') as f:
                f.write(ret)
            return ret

    return inner

@cache
def user_url(url):
    res = requests.get(url)
    res.encoding = 'utf-8'
    return res.text

print(user_url('http://www.baidu.com'))
print(user_url('http://www.qq.com'))

處理文件,用戶指定要查找的文件和內容,將文件中包含要查找內容的每一行都輸出到屏幕

def check_file(filename,aim):
    with open(filename,encoding='utf-8') as f:   #句柄 : handler,文件操做符,文件句柄
        for i in f:
            if aim in i:
                yield i

g = check_file('fana','生成器')
for i in g:
    print(i.strip())

寫生成器,從文件中讀取內容,在每一次讀取到的內容以前加上‘***’以後再返回給用戶

def check_file(filename):
     with open(filename,encoding='utf-8') as f:   #句柄 : handler,文件操做符,文件句柄
         for i in f:
             yield '***'+i

 for i in check_file('fana'):
     print(i.strip())

現有兩個元組(('a'),('b')),(('c'),('d')),請使用python中匿名函數生成列表[{'a':'c'},{'b':'d'}]

a = (('a'),('b'))
b = (('c'),('d'))
#1.用函數最簡單的作法
dic = {}
# def func():
#     for i in zip(a,b):
#         dic[i[0]] = i[1]
#     print(dic)
# func()
#2.用到匿名函數,這樣作確定不行.因此用到map,就變成這樣
def func(tup):
    return {tup[0]:tup[1]}
print(list(map(func,zip(a,b))))

#3.轉成匿名函數。
res = map(lambda tup: {tup[0]: tup[1]}, zip(a, b))
print(list(res))

用map來處理字符串列表,把列表中的全部人都變成sb,好比:alex_sb

name = ["alex","wupeiqi","yuanhao","nezha"]
a = map(lambda i: i + '_sb', name)
for j in a:
    print(j)

用filter函數處理數字列表,將列表中全部的偶數篩選出來

num = [1,2,3,4,5,6,7,8]
ret = filter(lambda i : i % 2 == 0,num)
print(list(ret))

#a = lambda i: [j for j in i if j % 2 == 0]
#print(a(num))

運行程序將內容分頁存儲,每頁5條,而後接收用戶輸入的頁碼,僅輸入當頁內容。

with open('fan','r',encoding='utf-8') as f:
    li = f.readlines()
inp = int(input("請輸入頁碼:"))
page,yu = divmod(len(li),5)
if inp > page+1 or inp <= 0:
    print('輸入錯誤')
else:
    if inp == page+1:
        for i in li[-yu:]:
            print(i.strip())
    else:
        for i in range((inp-1)*5,inp*5):
            print(li[i].strip())

用遞歸方式查找以下列表中66的位置

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

def find(lis,sumber,start=0,end=None):
    end = len(lis) if end is None else end
    aim = (end - start) // 2 + start
    if start > end or sumber > lis[-1]:
        return '%s 不在列表中。' % sumber
    else:
        if lis[aim] > sumber:
            return find(lis,sumber,start=start,end=aim-1)
        elif lis[aim] < sumber:
            return find(lis, sumber, start=aim+1, end=end)
        else:
            return '%s 的索引是 %s.' % (lis[aim],aim)

print(find(l,66))
#print(l.index(66))
相關文章
相關標籤/搜索