Python算法題(三)——經典函數題


題目一(統計字符串中指定類型字符的個數):

  假設所有字符分為三類:字母,數字及其他字符。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬編寫一個函數,判斷指定字符的類型,並統計字符串中該類型字符的個數。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬主程序輸入一個字符串及一個字符,調用上述函數統計該字符同類型字符在該字符串中的個數。

描述:

  輸入格式:

  第一行輸入一個字符串,第二行輸入一個字符,不要任何提示信息。

  輸出格式:

  輸出指定字符類型的個數,如輸入輸出示例所示。

  輸入輸出示例:

  

分析:

  首先,我們需要遍歷第一行輸入的字符串,然后判斷其中每一個字符的字符類型,是數字還是字母(字母又要考慮大小寫),又或者是特殊符號,然后同字符類型的字符的個數,最后與第二行輸入的字符作比較,輸出與其相同類型的字符的個數。

代碼:

def function(s,ch):
    a=0
    b=0
    c=0
    for i in s:
        if ord('0')<=ord(i)<=ord('9'):
            a=a+1
        elif ord('a')<=ord(i)<=ord('z') or ord('A')<=ord(i)<=ord('Z'):
            b=b+1
        else:
            c=c+1
    if ord('0')<=ord(ch)<=ord('9'):
        return a
    elif ord('a')<=ord(ch)<=ord('z') or ord('A')<=ord(ch)<=ord('Z'):
        return b
    else:
        return c
s=input()
ch=input()
print("與%c同類型的字符有%d個。"%(ch,function(s,ch)))

 

題目二(計算標准差): 

  編寫一個函數計算一系列數的標准差。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

  標准差定義:有一組數據S=s0,s1,s2,...,sn-1,其標准差表示為,其中 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬主程序輸入若干個數,調用上述函數計算這些輸入的數的標准差,並輸出。

描述:

  輸入格式:

  在同一行輸入若干個數,用英文逗號,分隔。

  輸出格式:

  標准差為:

  輸入輸出示例:

  

分析:

  首先,我們需要計算出m,按照公式,我們可以令m=sum/length(sum=sum+x),令b=b+(x-m)**2,所以可以得到d=sqrt(b/(length-1)),即為標准差。

代碼:

from math import *
def fd(*a):
    sum = 0
    length = len(a)
    for x in a:
        sum+=x
    m = sum/length
    b = 0
    for x in a:
        b+=(x-m)**2
    return sqrt(b/(length-1))
nums=eval(input())
print("標准差為%.1f"%fd(*nums))

 

題目三(判斷閏年):

  編寫函數leap,根據“四年閏百年不閏,四百年又閏”判斷是否閏年。在主程序輸入一個年份,調用leap函數判斷其是否為閏年,並輸出判斷結果。

描述:

  輸入格式:

  輸入一個代表年份的整數。

  輸出格式:

  輸出年份是否閏年的判斷結果。

  輸入輸出示例:

  

分析:

  明確本題的判斷條件,即y%4==0 and y%100!=0返回True,或y%4==0 and y%400==0返回True,之后再判斷,若leap(y)==True,則為閏年,反之則不是。

代碼:

def leap(y):
    if y%4==0:
        if y%100!=0:
            return True
        elif y%400==0:
            return True
    else:
        return False    
y=int(input())
if leap(y)==True:
    print("%d年是閏年"%y)
else:
    print("%d年不是閏年"%y)

 

 題目四(斐波那契數列):

  大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。

描述:

  輸入格式:

  10

  輸出格式:

  [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

分析: 

   我們要知道斐波那契數列即:1、1、2、3、5、8、13、21、34、……它的特點是該數列從第三項開始,每個數的值為其前兩個數之和,即f(n)=f(n-2)+f(n+1)
代碼:
n=int(input())
def feibo(num):
    result=[0,1]
    for i in range(num-2):
        result.append(result[-2]+result[-1])
    return result
print(feibo(n))

 

 


免責聲明!

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



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