Python語言程序設計(筆記)


1、平方根的格式化
知識點:平方根計算

  • pow(a,0.5)[可以計算負數,結果為復數]
  • a**b

例題:
獲得用戶輸入的一個整數a,計算a的平方根,保留小數點后3位,並打印輸出。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

輸出結果采用寬度30個字符、右對齊輸出、多余字符采用加號(+)填充。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

如果結果超過30個字符,則以結果寬度為准。

我的答案:

a=eval(input())
    print("{0:+>30.3f}".format(pow(a,0.5)))

運行結果:

1、10
+++++++++++++++++++++++++3.162
2、-10
++++++++++++++++++0.000+3.162j

點評分析:

這是一個簡單題,重點在於理解格式化輸出的方法。

注意:如果平凡根后產生一個復數,由於復數的實部和虛部都是浮點數,.3f可以將實部和虛部分別取三位小數。

1.1、凱撒密碼( 柵欄密碼 )

plaincode=input("請輸入明文:")
for p in plaincode:
    if ord("a")<=ord(p)<=ord("z"):
        print(chr(ord('a')+(ord(p)-ord('a')+3)%26),end="")
          #end="",是不想讓【循環】輸出換行。因為print自帶換行。
    else:
          # %26,mod26是因為+3后可能超出范圍,通過這個操作限定范圍
        print(p,end="")

1.2、隨機密碼生成
描述
補充編程模板中代碼,完成如下功能:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

以整數17為隨機數種子,獲取用戶輸入整數N為長度,產生3個長度為N位的密碼,密碼的每位是一個數字。每個密碼單獨一行輸出。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

產生密碼采用random.randint()函數。

建議答案:

import random

def mima(length):
    a=10**(length-1)
    b=10**length - 1
    return "{}".format(random.randint(a,b))  #居然可以return這個東西

length=eval(input())
random.seed(17)
for i in range(3):
    print(mima(length))

2、字符串分段組合
知識點:str.split("xxxxx"),返回一個 列表 ,由str中被 xxxxx 分隔的部分組成
例題:
獲得輸入的一個字符串s,以字符減號(-)分割s,將其中首尾兩段用加號(+)組合后輸出。

我的答案:

s=input()
for i in range(0,99991):
    if(s[i]=="-"):
        a=s[0:i]
        break
for j in range(1,99999):
    if(s[-j]=="-"):
        b=s[(-j)+1:-1]
        break
print("{}+{}{}".format(a,b,s[-1]))

運行結果:

1-2-3-4
1+4

建議答案:

s=input()
ls=s.split("-")
print("{}+{}".format(ls[0],ls[-1]))

運行結果:

1-2-3-4
1+4

3、四位玫瑰數
描述‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬:

四位玫瑰數是4位數的自冪數。自冪數是指一個 n 位數,它的每個位上的數字的 n 次冪之和等於它本身。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

例如:當n為3時,有1^3 + 5^3 + 3^3 = 153,153即是n為3時的一個自冪數,3位數的自冪數被稱為水仙花數。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

請輸出所有4位數的四位玫瑰數,按照從小到大順序,每個數字一行。 ‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

我的答案:

for i in range(1000,10000):
    a=i//1000
    b=(i%1000)//100
    c=((i%1000)%100)//10
    d=((i%1000)%100)%10
    if(a**4+b**4+c**4+d**4==i):
        print("{}\n".format(i))

建議答案:

s = ""
for i in range(1000, 10000):
    t = str(i)
    if pow(eval(t[0]),4) + pow(eval(t[1]),4) + pow(eval(t[2]),4) + pow(eval(t[3]),4) == i :
        print(i)

分析解釋

1、print()本身就帶有換行了
2、eval()評估函數,居然可以把數當作字符串處理,及其簡單的得到這個數的個位、十位、百位、等等

4、100以內素數之和
描述
求100以內所有素數之和並輸出。‪‬‪‬ ‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
素數指從大於1,且僅能被1和自己整除的整數。 ‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

提示:可以逐一判斷100以內每個數是否為素數,然后求和。

我的答案:

在cpp里,是兩個for循環,然后判斷(2,n)之后,n是否還等於i

建議答案:

#Prime
def is_prime(n):
    for i in range(2,n):
        if n%i == 0:
            return False
    return True
sum = 0
for i in range(2,100):
    if is_prime(i):
        sum += i
print(sum)

5、連續素數(質數)計算

  • str字符串不能單獨賦值,和cpp不一樣,所以直接輸出
  • python在使用變量前不需要定義,用的時候,進行什么樣的操作,就可以看出是什么變量類型
  • 與cpp不同的是:python中 for一般是遍歷,while一般限定循環次數。

描述
補充編程模板中代碼,完成如下功能: ‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

獲得用戶輸入數字N,計算並輸出從N開始的5個質數,單行輸出,質數間用逗號,分割。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬

注意:需要考慮用戶輸入的數字N可能是浮點數,應對輸入取整數;最后一個輸出后不用逗號。

我的答案:

建議答案:

def sushu(m): #判斷素數的函數
    for i in range(2,m):
        if m%i == 0:
            return False
    return True  #注意縮進,是for循環完了還不滿足,才return True

n=eval(input())
n_=int(n)+1   #把浮點數換成整數
count=5       #限定輸出個數
while count>0: # count =5,4,3,2,1都可以循環,不就是循環5次嘛🐎
    if sushu(n_):
        if count>1: #這個東西是為了前4次輸出有結尾的逗號,
            print(n_,end=",")
        else:
            print(n_,end="")
        count-=1  #注意縮進,不管啥,只要 if sushu()成立[是素數],都要把計數器減1
    n_+=1     #注意縮進,不管啥,每次搞完都要把 n_加1,方能遍歷 【遍歷】

6、七段數碼管turtle繪制
知識點:

  • 函數定義與編寫
  • return
  • 局部變量和全局變量
  • 參數傳遞問題

建議答案:

import turtle
def drawgap():      #畫空白函數
    turtle.penup()
    turtle.fd(5)
def drawline(line): #畫線條函數
    drawgap()
    turtle.pendown() if line else turtle.penup
    turtle.fd(20)
    drawgap()
    turtle.right(90)
def drawdigit(digit):  #畫一個數碼函數
    drawline(1) if digit in [2,3,4,5,6,8,9] else drawline(0)
    drawline(1) if digit in [0,1,3,4,5,6,7,8,9] else drawline(0)
    drawline(1) if digit in [0,2,3,5,6,8,9] else drawline(0)
    drawline(1) if digit in [0,2,6,8] else drawline(0)
    turtle.left(90)
    drawline(1) if digit in [0,4,5,6,8,9] else drawline(0)
    drawline(1) if digit in [0,2,3,5,6,7,8,9] else drawline(0)
    drawline(1) if digit in [0,1,2,3,4,7,8,9] else drawline(0)
    turtle.right(180)
    turtle.fd(10)
def drawdate(date):   #需要的日期函數
    for p in date:
        drawdigit(eval(p))
def main():           #主函數
    turtle.setup(800,250,200,300)
    turtle.pensize(5)
    turtle.penup()
    turtle.fd(-150)
    drawdate("20200117")
    turtle.hideturtle()
    turtle.done()
main()

7、漢諾塔問題
知識點:函數遞歸調用
三個部分

  • 函數+分支(if ->3 else ->2)
  • 鏈條
  • 基例

建議答案

count=0
def han(n,A,C,B):  #四個參數采用位置傳遞,代表的含義分別為:搬運圓盤編號,圓盤起始位置,圓盤目標位置,過渡位置
    global count
    if n==1:
        print("{}:{}->{}".format(1,A,C))
        count+=1
    else:          #遞歸鏈條表示:先把上面n-1個搬到過渡位置,剩的那個最大的放到目標位置,再把那n-1個放到目標位置
        han(n-1,A,B,C)
        print("{}:{}->{}".format(n,A,C))
        count+=1
        han(n-1,B,C,A)
print(han(3,"A","C","B"))  #以三個圓盤為例
print(count)

輸出結果:

1:A->C
2:A->B
1:C->B
3:A->C
1:B->A
2:B->C
1:A->C
7

8、基本統計值計算
總和、平均數、中位數、方差

def getnum():
    ls=[]
    nums=input("請輸入數字:")
    while nums !='':
        ls.append(eval(nums))
        nums=input("請輸入數字:")
    return ls
def pingjun(ls):
    sum=0.0
    for p in ls:
        sum+=p
    return sum/len(ls)

def fangcha(ls,ave):
    sum=0.0
    for p in ls:
        sum+=(p-ave)**2
    return sum

def mid(ls):
    sorted(ls)
    size=len(ls)
    if size%2==0:
        med=(ls[size//2-1]+ls[size//2])/2
    else:
        med=ls[size//2]
    return med

n=getnum()

print("平均數:{}\n方差{}\n中位數{}\n".format(pingjun(n),fangcha(n,pingjun(n)),mid(n)))


免責聲明!

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



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