Python 思惟鍛鍊

 

程序1:數字組合

【程序描述】

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

【程序分析】

            可填在百位、十位、個位的數字都是一、二、三、4。組成全部的排列後再去掉不知足條件的排列。python

【程序實現】

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

【程序結果】

1 2 3

1 2 4

1 3 2

1 3 4

1 4 2

1 4 3

2 1 3

2 1 4

2 3 1

2 3 4

2 4 1

2 4 3

3 1 2

3 1 4

3 2 1

3 2 4

3 4 1

3 4 2

4 1 2

4 1 3

4 2 1

4 2 3

4 3 1

4 3 2

 

程序2:猜猜這個數是多少?

【程序描述】

            一個整數,它加上100和加上268後都是一個徹底平方數,請問該數是多少?git

【程序分析】

            在10000之內判斷,將該數i加上100後再開方,加上268後再開方,若是開方後的結果知足以下條件,便是結果。github

            xx =(i+100)算法

            yy=(i+268)編程

【程序實現】

import math

for i in range(1,10000):
        x=int(math.sqrt(i+100))
        y=int(math.sqrt(i+268))
        if (x*x==i+100)and(y*y==i+268):
             print(i)

 

【程序結果】

21

261

1581

 

 

程序3:判斷這是一年中的第幾天?

【程序描述】

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

【程序分析】

            以3月5日爲例,應該先把前兩個月的加起來,而後再加上5天即本年的第幾天,特殊狀況,閏年且輸入月份大於2時需考慮多加一天。app

【程序實現】

year=int(input("請輸入年份"))
    month=int(input("請輸入月份"))
    day=int(input("請輸入日期"))
    months=(0,31,59,90,120,151,181,212,243,273,304,334)
    if 0<month<=12:
       sum=months[month-1]
    else:
        print('輸入的月份有誤')
    sum+=day
    leap=0
    if (year%400==0) or ((year%4==0) and (year%100!=0)):
        leap=1
        if(leap==1)and(month>2):
             sum+=1
    print("今天是第%d天"%sum)

 

【程序結果】

請輸入年份2000

請輸入月份3

請輸入日期1

今天是第61天

 

程序4:判斷整數大小

【程序描述】

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

【程序分析】

            能夠藉助列表的sort方法完成排序。首先將用戶輸入的整數存放在列表中,列表從小到大排序後,經過遍歷的方式輸出列表中的值便可。ide

【程序實現】

x = int(input("請輸入進行比較的第1個數:"))
y = int(input("請輸入進行比較的第2個數:"))
z = int(input("請輸入進行比較的第3個數:"))

list = [x, y, z]
list.sort()
for i in range(len(list)):
    print(list[i])

【程序結果】

請輸入進行比較的第1個數:34

請輸入進行比較的第2個數:23

請輸入進行比較的第3個數:55

23

34

55

 

 

程序5:斐波那契數列

【程序描述】

            編寫一個程序,實現斐波那契數列。

【程序分析】

            斐波那契數列(Fibonacci sequence),又稱黃金分割數列,指的是這樣一個數列:0、一、一、二、三、五、八、1三、2一、3四、……。

            在數學上,費波那契數列是以遞歸的方法來定義:

        F0 = 0     (n=0)

        F1 = 1    (n=1)

        Fn = F[n-1]+ F[n-2](n=>2)

【程序實現】

 def fib(n):
     if n==1 or n==2:
        return 1
     return fib(n-1)+fib(n-2)

print(fib(10))

 

【程序結果】

55

 

程序6:水仙花數

【程序描述】

            編寫程序,打印出全部的「水仙花數」 。

【程序分析】

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

【程序實現】

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)

【程序結果】

153

370

371

407

 

 

程序7:數字求和

【程序描述】

            編寫一個程序,經過用戶輸入兩個數字,並計算這兩個數字之和。

【程序分析】

            根據程序描述,該程序實現過程大概分爲以下幾步:

  1. 提示用戶輸入第1個數字
  2. 提示用戶輸入第2個數字
  3. 對兩個數字進行相加
  4. 輸出兩個數字相加的和

【程序實現】

num1 = input("請輸入第1個數字:")
num2 = input("請輸入第2個數字:")
sum = float(num1) + float(num2)
print("數字%s和%s相加之和是%.1f" % (num1, num2, sum))

【程序結果】

請輸入第1個數字:12.3

請輸入第2個數字:10.4

數字12.3和10.4相加之和是22.7

程序8:平方根

【程序描述】

            平方根,又叫二次方根,表示爲〔√ ̄〕,如:數學語言爲:√ ̄16=4。語言描述爲:根號下16=4。編寫一個程序,經過用戶輸入一個數字,並計算這個數字的平方根。

【程序分析】

            關於計算平方根的,可使用在指數運算符 ** 來計算改數的平方根,也可使用math函數中的sqrt,不一樣的是,指數**只適用於正數,而sqrt適用於任何數。接下來,按照下列步驟實現程序:

  1. 提示用戶輸入一個數(必須將輸入的數轉爲數字類型)
  2. 使用math函數的sqrt計算這個數的平方根
  3. 輸出運算結果

【程序實現】

import math

num = int(input("請輸入要計算平方根的數字:"))
result = math.sqrt(num)
print("數字%d的平方根是%f" % (num, result))

 

 

【程序結果】

請輸入要計算平方根的數字:12

數字12的平方根是3.464102

 

程序9:if語句

【程序描述】

            編寫程序,經過使用 if...elif...else 語句判斷數字是正數、負數或零:

【程序分析】

            正數、負數或零的判斷很是簡單,只須要判斷這個數是否大於零,小於零或者等於零。因爲判斷的條件大於2個,這裏咱們使用if…elif…else判斷。

【程序實現】

num = float(input("輸入一個數字: "))
    if num > 0:
        print("正數")
    elif num == 0:
        print("零")
    else:
        print("負數")

 

【程序結果】

輸入一個數字: -2

負數

程序10:阿姆斯特朗數

【程序描述】

           若是一個n位正整數等於其各位數字的n次方之和,則稱該數爲阿姆斯特朗數。 例如1^3 + 5^3 + 3^3 = 153。

           1000之內的阿姆斯特朗數: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。

           請編寫程序,檢測用戶輸入的數字是否爲阿姆斯特朗數。

【程序分析】

            n位正整數等於其各位數字的n次方之和

【程序實現】

# 獲取用戶輸入的數字

num = int(input("請輸入一個數字: "))

# 初始化變量 sum

sum = 0

# 指數

n = len(str(num))

# 檢測

temp = num

while temp > 0:

   digit = temp % 10

   sum += digit ** n

   temp //= 10

# 輸出結果

if num == sum:

   print(num,"是阿姆斯特朗數")

else:

   print(num,"不是阿姆斯特朗數")

【程序結果】

請輸入一個數字: 12

12 不是阿姆斯特朗數

或者

請輸入一個數字: 153

153 是阿姆斯特朗數

程序11:輸出指定範圍的素數(else語句)

【程序描述】

           素數(prime number)又稱質數,有無限個。除了1和它自己之外再也不被其餘的除數整除。請編寫一個程序,輸出指定範圍內的素數:

【程序分析】

            由程序描述可知,要想輸出指定範圍的素數,能夠按照下列步驟開發:

  1. 提示用戶輸入指定的範圍,分別是範圍的最小值和最大值
  2. 使用for循環在指定範圍內進行循環
  3. 因爲知足素數的條件是隻能被1和自己整除,因此可使用if語句判斷是否能整除,若是能,則輸出素數。

【程序實現】

lower = int(input("輸入區間最小值: "))

upper = int(input("輸入區間最大值: "))

for num in range(lower,upper + 1):

# 素數大於 1

if num > 1:

    for i in range(2,num):

        if (num % i) == 0:

            break

    else:

            print(num)

【程序結果】

輸入區間最小值: 2

輸入區間最大值: 50

2

3

5

7

11

13

17

19

23

29

31

37

41

43

47

程序12:生成日曆

【程序描述】

            請編寫程序,用於生成指定日期的日曆。

【程序分析】

            Calendar模塊有很普遍的方法用來處理年曆和月曆,例如打印某月的月曆。

【程序實現】

# 引入日曆模塊
    import calendar
    # 輸入指定年月
    yy = int(input("輸入年份: "))
    mm = int(input("輸入月份: "))
    # 顯示日曆
    print(calendar.month(yy,mm))

【程序結果】

輸入年份: 2017

輸入月份: 3

     March 2017

Mo Tu We Th Fr Sa Su

        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

程序13:統計字符串中的字符

【程序描述】

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

【程序分析】

            開發步驟以下:

  1. 提示用戶輸入字符串
  2. 聲明四個變量,分別用於統計英文字母、空格、數字和其餘字符的個數
  3. 使用for循環遍歷字符串中的字符,使用if判斷語句判斷遍歷的字符知足哪一個條件,若是知足條件,則對應的變量加1

【程序實現】

str = input("請輸入一個字符串:")
letters = 0
space = 0
digit = 0
others = 0
for c in str:
    if c.isalpha():
        letters += 1
    elif c.isspace():
        space += 1
    elif c.isdigit():
        digit += 1
    else:
        others += 1
print("字符串共有%d個英文字母,%d個空格,%d個數字,%d個其餘字符" % (letters, space, digit, others))

 

【程序結果】

請輸入一個字符串:hello world,i love you!

字符串共有18個英文字母,3個空格,0個數字,2個其餘字符

 

程序14:文件的讀取

【程序描述】

            從鍵盤輸入一個字符串,將小寫字母所有轉換成大寫字母,而後輸出到一個磁盤文件"test"中保存。

【程序分析】

            開發步驟以下:

  1. 提示用戶輸入一個字符串
  2. 使用字符串的upper方法將字符串的小寫字母所有轉換爲大寫字母
  3. 使用write方法將字符串寫入文件,須要注意的是,在寫文件以前,首先要打開文件,完成寫數據的操做後,要切記關閉文件。

【程序實現】

    fp = open('test.txt','w')
    string = input('please input a string:\n')
    string = string.upper()
    fp.write(string)
    fp = open('test.txt','r')
    print(fp.read())
    fp.close()

【程序輸出】

please input a string:

Nice to meet you!

NICE TO MEET YOU!

 

程序15:十進制轉二進制、八進制、十六進制

【程序描述】

            編寫程序,用於實現十進制轉二進制、八進制、十六進制。

【程序分析】

            不一樣進制之間的轉換,須要用到下列方法:

  1. bin():將十進制的數轉爲二進制
  2. oct():將十進制的數轉爲八進制
  3. hex(): 將十進制的數轉爲十六進制

【程序實現】

# 獲取用戶輸入十進制數

dec = int(input("輸入數字:"))

print("十進制數爲:", dec)

print("轉換爲二進制爲:", bin(dec))

print("轉換爲八進制爲:", oct(dec))

print("轉換爲十六進制爲:", hex(dec))

【程序結果】                       

輸入數字:123

十進制數爲: 123

轉換爲二進制爲: 0b1111011

轉換爲八進制爲: 0o173

轉換爲十六進制爲: 0x7b

 

程序16: 生成10個兩位的隨機素食

【程序描述】

            請編寫一個程序,輸出生成10個兩位的隨機數,而且這兩個隨機數是素數。

 

【程序分析】

Python的random模塊提供了隨機數生成方法random.randint(a,b),它返回一個大於等於a,小於等於b的隨機整數。

 

【程序實現】

import random

n = 0
while n < 10:
    x = random.randint(10, 99)  # 得到兩位的隨機整數
    # 判斷x是否爲素數
    a = 2
    while a < x - 1:
        if x % a == 0:
            break
        a += 1
    else:
        print(x)  # 若正常結束循環時,說明x是素數,輸出
    n += 1  # 累計素數個數

 

【程序結果】(每次結果不同)

61

29

83

41

73

97

19

11

31

17

 

程序17: 計算三角形面積

【程序描述】

            經過用戶輸入三角形三邊長度,並計算三角形的面積。

【程序分析】

            要想計算三角形的面積,須要獲取三角形的三邊長度,假設三角形的三邊分別是a,b,c,那麼面積的計算方式以下:

            三角形半周長s=(a+b+c)/2

            三角形面積=(s*(s-a)*(s-b)*(s-c)) ** 0.5

 

【程序實現】

a = float(input('輸入三角形第一邊長: '))
    b = float(input('輸入三角形第二邊長: '))
    c = float(input('輸入三角形第三邊長: '))
    # 計算半周長
    s = (a + b + c) / 2
    # 計算面積
    area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
    print('三角形面積爲 %0.2f' %area)

【程序結果】

輸入三角形第一邊長: 12

輸入三角形第二邊長: 23

輸入三角形第三邊長: 21

三角形面積爲 125.22

 

程序18:字符串大小寫轉換

【程序描述】

            如何將字符串轉換爲大寫字母,或者將字符串轉爲小寫字母等。

【程序分析】

            字符串str提供了不少轉換字母的方法,具體以下:

  1. upper():將全部字符中的小寫字母轉換爲大寫字母
  2. lower():把全部字符中的大寫字母轉爲小寫字母
  3. capitalize():把第一個字母轉化爲大寫字母,其他小寫
  4. title():把每一個單詞的第一個字母轉化爲大寫,其他小寫

 

【程序實現】

    str = "www.runoob.com"
    print(str.upper())          # 把全部字符中的小寫字母轉換成大寫字母
    print(str.lower())          # 把全部字符中的大寫字母轉換成小寫字母
    print(str.capitalize())     # 把第一個字母轉化爲大寫字母,其他小寫
    print(str.title())          # 把每一個單詞的第一個字母轉化爲大寫,其他小寫

 

【程序結果】

WWW.RUNOOB.COM

www.runoob.com

Www.runoob.com

Www.Runoob.Com

程序19: 獲取昨天日期

【程序描述】

            經過導入 datetime 模塊來獲取昨天的日期。

【程序分析】

【程序實現】

# 引入 datetime 模塊
    import datetime
    def getYesterday():
        today=datetime.date.today()
        oneday=datetime.timedelta(days=1)
        yesterday=today-oneday
        return yesterday
    # 輸出
    print(getYesterday())

 

【程序結果】

2018-08-02

 

程序20: 變量交換

【程序描述】

            編寫一個程序,將用戶輸入的兩個變量進行相互交換。要求不使用臨時變量實現。

【程序分析】

        與其餘語言不一樣,Python中的變量能夠經過下列方式進行賦值:

                x,y = y,x

        上述代碼的做用就是將x的值賦給y,將y的值賦給x,即x和y值的互換。

【程序實現】

# 用戶輸入

x = input('輸入 x 值: ')

y = input('輸入 y 值: ')

# 不使用臨時變量

x,y = y,x

print('交換後 x 的值爲: {}'.format(x))

print('交換後 y 的值爲: {}'.format(y))

【程序結果】

輸入 x 值: 3

輸入 y 值: 4

交換後 x 的值爲: 4

交換後 y 的值爲: 3

程序21: 質數判斷

【程序描述】

            一個大於1的天然數,除了1和它自己外,不能被其餘天然數(質數)整除(2, 3, 5, 7等),換句話說就是該數除了1和它自己之外再也不有其餘的因數。

【程序實現】

# 用戶輸入數字
num = int(input("請輸入一個數字:"))
# 質數大於1
if num > 1:
    # 查看因子
    for i in range(2, num):
        if (num % i) == 0:
            print(num,"不是質數")
            break
        else:
            print(num,"是質數")
# 若是輸入的數字小於或等於1,不是質數
else:
    print(num, "不是質數")

【程序結果】

請輸入一個數字: 12

12 不是質數

 

 

程序22: 簡單計算器

【程序描述】

            編寫一個程序,實現簡單計算器實現,包括兩個數基本的加減乘除運算。

【程序分析】

            簡單計算器的開發流程以下:

                    打印菜單,提示用戶選擇要進行的運算

                    用戶選擇運算類型

                    接收用戶輸入的值,用於參與運算

                    輸出運算的結果

            須要注意的是,因爲接受的用戶輸入是字符串,須要將字符串轉爲數值類型

【程序實現】

# 定義函數
def add(x, y):
    """相加運算"""
    return x + y


def subtract(x, y):
    """相減運算"""
    return x - y


def multiply(x, y):
    """相乘運算"""
    return x * y


def divide(x, y):
    """相除運算"""
    return x / y


# 用戶輸入
print("請選擇運算:")
print("一、相加")
print("二、相減")
print("三、相乘")
print("四、相除")

choice = input("請輸入你的選擇(1/2/3/4):")
num1 = int(input("輸入第一個數字:"))
num2 = int(input("請輸入第二個數字:"))
if choice == "1":
    print(num1, "+", num2, "=", add(num1, num2))
elif choice == "2":
    print(num1, "-", num2, "=", subtract(num1, num2))
elif choice == "3":
    print(num1, "*", num2, "=", multiply(num1, num2))
elif choice == "4":
    print(num1,"/",num2,"=", divide(num1,num2))
else:
    print("非法輸入")

【程序結果】

加法運算:

選擇運算:

一、相加

二、相減

三、相乘

四、相除

輸入你的選擇(1/2/3/4):1

輸入第一個數字: 2

輸入第二個數字: 3

2 + 3 = 5

減法運算:

選擇運算:

一、相加

二、相減

三、相乘

四、相除

輸入你的選擇(1/2/3/4):2

輸入第一個數字: 5

輸入第二個數字: 1

5 - 1 = 4

乘法運算:

選擇運算:

一、相加

二、相減

三、相乘

四、相除

輸入你的選擇(1/2/3/4):3

輸入第一個數字: 2

輸入第二個數字: 5

2 * 5 = 10

除法運算:

選擇運算:

一、相加

二、相減

三、相乘

四、相除

輸入你的選擇(1/2/3/4):4

輸入第一個數字: 10

輸入第二個數字: 2

10 / 2 = 5.0

程序23: 最大公約數

【程序描述】

            編寫一個程序,計算兩個數的最大公約數。

 

【程序實現】

# 定義一個函數
def hcf(x, y):
    """該函數返回兩個數的最大公約數"""
    # 獲取最小值
    if x > y:
        smaller = y
    else:
        smaller = x
    for i in range(1, smaller + 1):
        if ((x % i == 0) and (y % i == 0)):
            hcf = i
    return hcf


# 用戶輸入兩個數字
num1 = int(input("輸入第一個數字:"))
num2 = int(input("輸入第二個數字:"))
print(num1, "和", num2, "的最大公約數爲", hcf(num1, num2))

 

【程序結果】

輸入第一個數字: 12

輸入第二個數字: 3

12 和 3 的最大公約數爲 3

 

程序24: 最小公倍數

【程序描述】

            編寫一個程序,計算兩個數的最小公倍數。

【程序實現】

# 【程序描述】
#             編寫一個程序,計算兩個數的最小公倍數。

# 定義函數
def lcm(x, y):
    # 獲取最大的數
    if x > y:
        greater = x
    else:
        greater = y
    while (True):
        if ((greater % x == 0) and (greater % y == 0)):
            lcm = greater
            break
        greater += 1
    return lcm


# 獲取用戶輸入
num1 = int(input("輸入第一個數字:"))
num2 = int(input("輸入第二個數字:"))

print(num1, "和", num2, "的最小公倍數爲", lcm(num1, num2))

【程序結果】

輸入第一個數字: 12

輸入第二個數字: 2

12 和 2 的最小公倍數爲 12

 

 

程序25: 字符串判斷

【程序描述】

編寫一個程序,演示Python字符串中和判斷有關的方法的使用。

【程序分析】

字符串中常見的判斷操做的方法以下所示:

  1. isalnum(): 判斷全部字符都是數字或者字母
  2. isalpha(): 判斷全部字符都是字母
  3. isdigit():判斷全部字符都是數字
  4. islower():判斷全部字符都是小寫
  5. isupper():判斷全部字符都是大寫
  6. istitle():判斷全部單詞都是首字母大寫,像標題
  7. isspace():判斷全部字符都是空白字符、\t、\n、\r

【程序實現】

print("示例1:")
str = "www.github.com"
# 判斷全部字符都是數字或者字母
print(str.isalnum())
# 判斷全部字符都是數字
print(str.isalpha())
# 判斷全部字符都是數字
print(str.isdigit())
# 判斷全部字符都是小寫
print(str.islower())
# 判斷全部字符都是大寫
print(str.isupper())
# 判斷全部單詞都是首字母大寫,像標題
print(str.istitle())
# 判斷全部字符都是空白字符- \t ,\n , \r
print(str.isspace())
print("---------")
print("\n")
print("---------")
print("示例2:")
str = "oschina "
print(str.isalnum())
print(str.isalpha())
print(str.isdigit())
print(str.islower())
print(str.isupper())
print(str.istitle())
print(str.isspace())

【程序結果】


示例1:
False
False
False
True
False
False
False
---------


---------
示例2:
False
False
False
True
False
False
False


 

 

 

程序26: 合併文件數據

【程序描述】

            有兩個磁盤文件A和B,各存放一行字母,要求把這兩個文件中的信息合併(按字母順序排列), 輸出到一個新文件C中。

【程序實現】

fp = open("file1.txt")
r1 = fp.read()
fp.close()

fp = open("file2.txt")
r2 = fp.read()
fp.close()

fp = open("file3.txt", "w")
merge = list(r1 + r2)
merge.sort()
s = ""
s = s.join(merge)
fp.write(s)
fp.close()

 

【程序結果】

            假設file1.txt文件中存放的是hello,file2.txt文件中存放的是world,那麼程序運行後,file3.txt文件中的數據是:dehllloorw

程序27: 猜數遊戲

【程序描述】

            編寫一個猜數遊戲,該遊戲會隨機產生一個數字,用戶能夠隨意輸入一個數進行比較,在比較過程當中,會不斷提示用戶輸入的數是大了仍是小了,直到用戶輸入的數等於隨機數,程序終止。

 

【程序實現】

import time
import random

play_it = input("Do you want to play it.(\'y\'or\'n\')")

while play_it == "y":
    c = input("input a character.\n")
    i = random.randint(0, 2 ** 32) % 100
    print("Please input number you guess:\n")
    start = time.clock()  # Python time clock() 函數以浮點數計算的秒數返回當前的CPU時間。用來衡量不一樣程序的耗時,比time.time()更有用
    a = time.time()
    guess = int(input("input your guess:\n"))
    while guess != i:
        if guess > i:
            print("Please input a little smaller")
            guess = int(input("input your guess:\n"))
        else:
            print("Please input a little bigger.")
            guess = int(input("input your guess:\n"))
    end = time.clock()
    b = time.time()
    var = (end - start) / 18.2
    print(var)
    if var < 15:
        print("you are very clever!")
    elif var < 25:
        print("you are normal!")
    else:
        print("you are stuplid!")
    print("Congradulations")
    print("The number you guess id %d" % i)
    play_it = input("do you want to play it.")

 

【程序結果】

do you want to play it.('y' or 'n')y

input a character:

5

please input number you guess:

 

input your guess:

60

……

please input a little bigger

input your guess:

29

please input a little smaller

input your guess:

28

3.81868131868e-05

you are very clever!

Congradulations

The number you guess is 28

do you want to play it.

 

程序28:爲數據加密

【程序描述】

            某個公司採用公用電話傳遞數據,數據是四位的整數,在傳遞過程當中是加密的,加密規則以下:每位數字都加上5,而後用和除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換。

【程序實現】

from sys import stdout

a = int(input("input a number:\n"))
aa = []
aa.append(a % 10)
aa.append(a % 100 / 10)
aa.append(a % 1000 / 100)
aa.append(a / 1000)
for i in range(4):
    aa[i] += 5
    aa[i] %= 10
for i in range(2):
    aa[i], aa[3 - i] = aa[3 - i], aa[i]
for i in range(3, -1, -1):
    stdout.write(str(aa[i]))

 

【程序結果】

input a number:

12

76.25.125.012

 

程序29:平方運算

【程序描述】

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

【程序實現】

TRUE = 1
FALSE = 0


def SQ(x):
    return x * x
print("若是輸入的數字小於50,程序將中止運行。")
again = 1
while again:
    num = int(input("Please input number."))
    print("運算結果爲 %d" %(SQ(num)))
    num = SQ(num)
    if num >= 50:
        again = TRUE
    else:
        again = FALSE

 

【程序結果】

若是輸入的數字小於 50,程序將中止運行。

Please input number12

運算結果爲 144

Please input number12

運算結果爲 144

Please input number3

運算結果爲 9

 

程序30: 計算0-7組成的奇數個數

【程序描述】

            編寫一個程序,計算0—7所能組成的奇數個數。

【程序實現】

# 規律:這是規律:個位數一、三、五、7:是4個十位數是7*4:28個(十一、13...77)百位數是:7*4*8:224個7*4*8*8

sum = 4
s = 4
for j in range(2, 9):
    print(sum)
    if j <= 2:
        s *= 7
    else:
        s *= 8
    sum += s
print("sum = %d" % sum)

【程序結果】

4

32

256

2048

16384

131072

1048576

sum = 8388608

 

程序31:求值

【程序描述】

            809*??=800*??+9*??+1 其中??表明的兩位數,8*??的結果爲兩位數,9*??的結果爲3位數。求??表明的兩位數,及809*??後的結果。

【程序實現】

a = 809
for i in range(10, 100):
    b = i * a + 1
    if b >= 1000 and b <= 10000 and 8 * i < 100 and 9 * i >= 100:
        print(b, "/", i, "= 809 * ", i, " + ", b % i)

 

【程序結果】

9709 / 12  = 809 *  12  +  1

 

程序32:猴子分桃

【程序描述】

            海灘上有一堆桃子,五隻猴子來分。第一隻猴子把這堆桃子平均分爲五份,多了一個,這隻猴子把多的一個扔入海中,拿走了一份。第二隻猴子把剩下的桃子又平均分紅五份,又多了一個,它一樣把多的一個扔入海中,拿走了一份,第3、第4、第五隻猴子都是這樣作的,問海灘上原來最少有多少個桃子?

【程序實現】

i = 0
j = 1
x = 0
while (i < 5):
    x = 4 * j
    for i in range(0, 5):
        if (x % 4 != 0):
            break
        else:
            i += 1
        x = (x / 4) * 5 + 1
    j += 1
print(x)

 

【程序結果】

3121.0

 

程序33:淘汰遊戲

【程序描述】

            有n我的圍成一圈,順序排號。從第一我的開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來第幾號的那位。

【程序實現】

nmax = 50
n = int(input("請輸入總人數:"))
num = []
for i in range(n):
    num.append(i + 1)
i = 0
k = 0
m = 0
while m < n - 1:
    if num[i] != 0:
        k += 1
    if k == 3:
        num[i] = 0
        k = 0
        m += 1
    i += 1
    if i == n:
        i = 0
i = 0
while num[i] == 0:
    i += 1
print(num[i])

 

【程序結果】

請輸入總人數:23

8

 

程序34:分解質因子

【程序描述】

            編寫一個程序,用於對一個數進行分解質因子。

【程序實現】

n = int(input("Please input n:"))
result = []
i = 2
str1 = str(n) + "="
while n > 1:
    if n % i == 0:
        n /= i
        result.append(str(i))
        i -= 1
    i += 1
# Python join() 方法用於將序列中的元素以指定的字符鏈接生成一個新的字符串。
str1 += "*".join(result)
print(str1)

 

【程序結果】

please input n:16

16=2*2*2*2

程序35:取整數右端的4~7位

【程序描述】

            編寫程序,取一個整數a從右端開始的4〜7位。

【程序分析】

            能夠這樣考慮:

                    (1)先使a右移4位。

                    (2)設置一個低4位全爲1,其他全爲0的數。可用~(~0<<4)

                    (3)將上面兩者進行&運算。

 

【程序實現】

a = int(input("input a number:\n"))
b = a >> 4
c = ~(~0 << 4)
d = b & c
print("%o\t%o" % (a, d))

【程序結果】

input a number:

9

11  0

 

 

程序36:判斷4位迴文數

【程序描述】

            用戶輸入一個4位的整數,若是是迴文數顯示True,若是不是迴文數顯示False。

【程序分析】

迴文數,就是反過來的數字和正着的數字是相同的,如1221,倒過來的數仍是1221,這就是一個迴文數,1234倒過來是4321,不相等,就不是迴文數。

    一個四位數abcd能夠寫爲I1=a*1000+b*100+c*10+d

那麼倒過來的數就能夠寫成I2=d*1000+c*100+b*10+a

若是I1和I2相等,那麼這就是一個迴文數。I1==I2的結果就是True,不然就是False。

一個四位數I1,分離各位數字的方法是:

千位:I1/1000

百位:I1/100%10

十位:I1/10%10

個位:I1%10

所以,判斷迴文數,若是使用a、b、c、d表示整數I1的千位、百位、十位、個位,開發步驟以下:

  1. 用戶輸入一個整數I1
  2. 分離千位、百位、十位、個位
  3. 組合出新數字I2=d*1000+c*100+b*10+a
  4. 比較I1==I2
  5. 輸出結果

【程序實現】

I1 = int(input("請輸入一個四位數:"))
a = int(I1 / 1000)
b = int(I1 / 100 % 10)
c = int(I1 / 10 % 10)
d = int(I1 % 10)
I2 = d * 1000 + c * 100 + b * 10 + a
if I1 == I2:
    print("True")
else:
    print("False")

 

【程序結果】

例如,輸入1221,結果輸出True

請輸入一個四位數:1221

True

輸入1234,結果輸出False

請輸入一個四位數:1234

False

 

程序37:漢諾塔(遞歸函數)

【程序描述】

            古代有一個梵塔,塔內有A、B、C三個基座,A座上有64個盤子,盤子大小不等,大的在下,小的在上。有人想把這64個盤子從A座移到C座,但每次只容許移動一個盤子,而且在移動的過程當中,3個基座上的盤子始終保持大盤在下,小盤在上。在移動過程當中盤子能夠放在任何一個基座上,不容許放在別處。編寫程序,用戶輸入盤子的個數,顯示移動的過程。

【程序分析】

假定盤子從大到小依次編號爲:盤一、盤二、…

  1. 若是隻有一個盤子,則不須要利用B座,直接將盤子從A移動到C
  2. 若是有2個盤子,能夠先將盤2移動到B,將盤1移動到C後,再將盤2移動到C
  3. 若是有3 個盤子,那麼根據2個盤子的結論,能夠藉助C將盤2和盤3從A移動到B,將盤1從A移動到C,A變成空座;藉助A座,將B上的兩個盤子移動到C

上述思路能夠一直擴展下去,根據以上的分析,能夠寫出下面的遞歸表達:

 

                                     將一個盤子從A移動到C

藉助C將n-1個盤子從A移動到B

將一個盤子從A移動到C        n>1

藉助A將n-1個盤子從B移動到C

藉助B將n個盤子從A移動到C

 

爲了編寫一個遞歸函數實現「藉助B將n個盤子從A移到C」,比較等式左右兩邊類似操做,會發現:

  1. 盤子的數量從n變化到n-1,問題規模縮小了,顯然n是一個可變的參數
  2. 盤子的起始位置是變化的,等式左側是A,右側是A或B
  3. 盤子的最終位置是變化的,等式左側是C、右側是B或C
  4. 一樣被藉助的位置也是變化的

所以,遞歸函數共有盤子數、起始位置、藉助位置和最終位置4個變量,所以函數有4個可變參數。假定函數的參數一次爲盤子數、初始位置、藉助位置和最終位置,則可寫出下面函數。

【程序實現】

def Hanoi(n, ch1, ch2, ch3):
    if n == 1:
        print(ch1, "->", ch3)
    else:
        Hanoi(n - 1, ch1, ch3, ch2)
        print(ch1, "->", ch3)
        Hanoi(n - 1, ch2, ch1, ch3)


N = int(input("請輸入盤子的數量:"))
Hanoi(N, 'A', 'B', 'C')

 

【程序結果】

請輸入盤子的數量:4

A -> B

A -> C

B -> C

A -> B

C -> A

C -> B

A -> B

A -> C

B -> C

B -> A

C -> A

B -> C

A -> B

A -> C

B -> C

 

 

 

程序38:判斷閏年

【程序描述】

            用戶輸入一個年份,若是是閏年輸出True,若是不是,輸出False。

【程序分析】

判斷閏年的規則以下:

  1. 能被4整除且不能被100整除的爲閏年
  2. 能被400整除的是閏年

在上述兩個規則中,只要有一條規則成立,則年份爲閏年。

【程序實現】

year = int(input("輸入一個年份: "))
if (year % 4) == 0:
    if (year % 100) == 0:
        if (year % 400) == 0:
            print("{0} 是閏年".format(year))  # 整百年能被400整除的是閏年
        else:
            print("{0} 不是閏年".format(year))
    else:
        print("{0} 是閏年".format(year))  # 非整百年能被4整除的爲閏年
else:
    print("{0} 不是閏年".format(year))

【程序結果】

輸入一個年份: 2018
2018 不是閏年

 

程序39:尋找自冪數

【程序描述】

用戶輸入位數n,找出並顯示出全部n位的自冪數。

【程序分析】

自冪數是指一個n位正整數,若是它的各位數字的n次方的和加起來等於這個數,數學家稱這樣的數爲自冪數。例如,13+53+33=153,153就是一個3位的自冪數,3位自冪數也稱爲水仙花數。本程序設n的數值爲1~6,當n大於6時,程序退出。

【程序實現】

import math

n = int(input("請輸入自冪數位數:\n"))

while n != -1:
    if n == 1:
        print("獨身數:")
        print("0\t")
    elif n == 2:
        print("兩位自冪數:")
        print("沒有自冪數!")
    elif n == 3:
        print("水仙花數:")
    elif n == 4:
        print("玫瑰花數:")
    elif n == 5:
        print("五角星數:")
    elif n == 6:
        print("六合數:")
    elif n == 7:
        print("北斗七星數:")
    elif n == 8:
        print("八仙數:")
    elif n == 9:
        print("九九重陽數:")
    elif n == 10:
        print("十全十美數:")
    else:
        print("其它自冪數:")
    # 定義一數字,從10^(n-1)開始自加,到10^n結束
    for i in range(int(math.pow(10, n - 1)), int(math.pow(10, n))):
        num = 0
        for j in str(i):
            num += int(math.pow(int(j), n))
        if i == num:
            print(i)
    n = int(input('請選擇自冪數的位數(退出程序請輸入:-1):'))
else:
    print("輸入'-1'程序結束。")

 

【程序結果】

請輸入自冪數位數:
3
水仙花數:
153
370
371
407
請選擇自冪數的位數(退出程序請輸入:-1):1
獨身數:
0    
1
2
3
4
5
6
7
8
9
請選擇自冪數的位數(退出程序請輸入:-1):4
玫瑰花數:
1634
8208
9474
請選擇自冪數的位數(退出程序請輸入:-1):2
兩位自冪數:
沒有自冪數!
請選擇自冪數的位數(退出程序請輸入:-1):-1
輸入'-1'程序結束。

 

程序40:多維數據

【程序描述】

在現實生活中,常常須要處理多維數據,好比,二維矩陣,三維矩陣等。在Python中能夠用嵌套列表來表示多維數據,好比,下面的一個列表表示的是3*3的二維數據。

M=[[1,2,3],[‘a’,’b’,’c’],[7,8,9]]

顯然這種嵌套列表與一般意義的矩陣有所不一樣,主要不一樣表如今如下兩個方面。

  1. 列表的每一個維度長度能夠不一樣
  2. 列表的元素數據類型能夠不一樣

儘管如此,使用嵌套列表表示多維矩陣依然是Python語句中的常見用法,好比列表N=[[1,2,3],[4,5,6],[7,8,9]]表示下面矩陣。

123

456

789

而對於第(i,j)位置的訪問使用N[i][j]便可。

若是要經過鍵盤輸入數據來初始化一個2*2的矩陣,可使用下面的語句。

【程序分析】

【程序實現】

a = []
for i in range(2):
    a.append([])
    for j in range(2):
        v = int(input("請輸入元素:"))
        a[i].append(v)
print(a)

 

【程序結果】

請輸入元素:1

請輸入元素:2

請輸入元素:2

請輸入元素:3

[[1, 2], [2, 3]]

程序41: 驗證哥德巴赫猜測

【程序描述】

哥德巴赫猜測說是說,任何一個超過2的偶數均可以寫成兩個素數之和,例如,4=2+2,8=5+3等。本例要求根據用戶輸入的偶數找出其素數和的分解形式

【程序分析】

一個簡單的方法的,對於輸入的偶數N,找出其全部分解,逐一驗證每個知足N=k1+k2的分解中k1和k2是否都是素數。好比對於數字12,驗證分解(2,10),(3,9)、(4,8)、(五、7)、(6,6)中有沒有兩個數都是素數的情形。若是有,哥德巴赫猜測該數就是成立的。這種算法對於只驗證一個數字N的全部分解的情形是合適的。但對於須要驗證多個偶數N的情形效率欠佳。好比須要驗證十、十二、16三個數,它們有分解5+五、5+七、5+11,這樣驗證這幾個分解時就要判斷5是否是素數,重複的運算會不少。

本案例採用另外一種思路,首先創建一個素數表,該素數表要足夠長,能夠覆蓋偶數N全部分解中可能遇到的素數。然後考察N的每一個分解,看看分解出來的兩個數是否都包含在素數表中,如果,則找到一種素數分解。

【程序實現】

def main():
    # 輸入待驗證的偶數
    N = int(input("請輸入待驗證的偶數:"))
    while N < 3 or N % 2 == 1:
        print("輸入的數不符合要求")
        N = int(input("請輸入待驗證的偶數n (n>2):"))
    # 生成素數表
    Prime = set()
    for i in range(2, N + 1):
        Prime.add(i)
    for i in range(2, N + 1):
        if i in Prime:
            for k in range(2 * i, N + 1, i):
                if k in Prime:
                    Prime.remove(k)
    # 驗證該偶數可否分解爲兩個素數之和
    for e in Prime:
        f = N - e
        if f >= e and f in Prime:
            print(N, '=', e, '+', f)


main()

 

【程序結果】

請輸入待驗證的偶數:12

12 = 5 + 7

程序42: 解方程

【程序描述】

編寫程序,解一元二次方程 ax2+bx+c=0。

 

【程序分析】

【程序實現】

from math import *

print("本程序求 ax^2+bx+c=0 的根")
a = float(input("請輸入 a:"))
b = float(input("請輸入 b:"))
c = float(input("請輸入 c:"))
delta = b * b - 4 * a * c
if (delta >= 0):
    delta = sqrt(delta)
    x1 = (-b + delta) / (2 * a)
    x2 = (-b - delta) / (2 * a)
    print("兩個實根分別爲:", x1, x2)
else:
    print("沒有實根")

 

【程序結果】

本程序求 ax^2+bx+c=0 的根

請輸入 a:12

請輸入 b:23

請輸入 c:21

沒有實根

本程序求 ax^2+bx+c=0 的根

請輸入 a:2

請輸入 b:-8

請輸入 c:2

兩個實根分別爲: 3.732050807568877 0.2679491924311228

程序43: 異常處理

【程序描述】

輸入兩個整數,打印它們相除以後的結果。對輸入的不是整數或除數爲零,進行異常處理。

【程序分析】

在對兩個整數相除過程當中,若是遇到輸入的不是整數或者除數爲零,那麼程序會終止,再也不執行其餘語句,這就是出現了異常。系統自動的處理就是中止執行,給出提示,爲了執行這種狀況,不讓程序結束,能夠將會出現異常的代碼寫在try中,讓except按照異常類名處理異常。

【程序實現】

k = 0
while (k < 3):
    try:
        x = int(input('請輸入第一個整數:'))
        y = int(input('請輸入第二個整數:'))
        print('x/y=', x / y)
    except ValueError:
        print('請輸入一個整數。')
    except ZeroDivisionError:
        print('除數不能爲零。')
    k = k + 1

 

【程序結果】

請輸入第一個整數:12

請輸入第二個整數:23

x/y= 0.5217391304347826

程序44: 統計不及格人數(continue語句)

【程序描述】

            有若干成績,統計及格人的平均成績。

【程序分析】

有若干成績,其中有不及格的,如今要統計及格的這些人的平均成績,可使用循環先求和,但遇到不及格的,不加入其中,最後除以及格的人數,假設成績存儲在一個列表中。

【程序實現】

x = [98, 72, 80, 45, 30, 89, 92, 54, 48, 82, 67, 76]
sum = 0
k = 0;
for item in x:
    if (item < 60):
        continue
    sum = sum + item
    k = k + 1;
if (k != 0):
    print("及格人數", k, "人,平均成績是", sum / k)

【程序結果】

及格人數 8 人,平均成績是 82.0

程序45: 求直角三角形的斜邊

【程序描述】

            輸入直角三角形的兩個直角邊長度a、b,求斜邊c的長度。

            數學公式  c=a2+b2

【程序分析】

在Python中,乘法使用「*」號表示,如a*a就是a的平方。

除此以外,還有開方根的運算,能夠經過Python中math模塊內置的函數來實現,爲此,咱們能夠在程序中使用import導入math模塊,而後調用開方的函數sqrt實現。

 

【程序實現】

from math import *

a = float(input("請輸入斜邊 1 的長度"))  # 輸入實數
b = float(input("請輸入斜邊 2 的長度"))  # 輸入實數
c = a * a + b * b  # 計算,獲得的是斜邊的平方
c = sqrt(c)  # 開方,獲得的是斜邊長
print("斜邊長爲:", c)  # 顯示,一項是字符串,一項是 c 表示的斜邊長

 

【程序結果】

請輸入斜邊 1 的長度3

請輸入斜邊 2 的長度4

斜邊長爲: 5.0

程序46: 問年齡

【程序描述】

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

【程序分析】

題目很是符合遞歸函數的過程,因此本題採用遞歸函數完成。

函數把問到的第幾我的做爲參數i,當i的值爲1時,函數返回10,其它狀況均爲第i-1人年齡的基礎上加2.

【程序實現】

    def fun(i):

        if i==1:

           return 10

    return fun(i-1)+2

print(fun(5))

【程序結果】

18

 

程序47:求相同數字的和

【程序描述】

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

【程序分析】

根據用戶輸入的個數(長度)決定循環的次數。

區分每次循環輸出的內容,只要是最後一次循環,就直接輸出最終的結果,其他皆爲本次結果跟上加號。

先從個位的數字開始計算,每執行一次循環就把上次的結果數乘以10,使得每次的結果爲30、330、3330,而後再加上個位的基本數字就行。

【程序實現】

def test():
    basis = int(input("輸入一個基本的數字"))
    n = int(input("輸入數字的長度"))
    b = basis
    sum = 0
    for i in range(0, n):
        if i == n - 1:
            print("%d" % (basis))
        else:
            print("%d +" % (basis))
        sum += basis
        basis = basis * 10 + b
    print("= %d" % (sum))


test()

【程序結果】

輸入一個基本的數字:3

輸入數字的長度:4

3 +

33 +

333 +

3333

= 3702

程序48:找出1000之內的全部完數

【程序描述】

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

提示:藉助math模塊的sqrt函數(求平方根)

【程序分析】

 

【程序實現】

from math import sqrt

n = int(input("輸入一個數字:"))
sum = n * -1
k = int(sqrt(n))
for i in range(1, k + 1):
    if n % i == 0:
        sum += n / i
        sum += i
if sum == n:
    print("YES")
else:
    print("NO")

【程序結果】

輸入一個數字:6

YES

程序49:公民類

 

【程序描述】

定義公民類,實例成員變量有身份證號、姓名、年齡和性別。定義公民類的派生類:學生類和教師類。學生類增長實例成員變量學號、班級和分數;教師類增長實例變量工號、系別和工資。編寫主程序, 定義類的對象,設置對象的實例屬性,顯示對象的信息。

【程序分析】

使用super()方法調用父類的構造方法。

【程序實現】

class Citizen:
    def __init__(self, id, name, age, sex):
        self.id = id
        self.name = name
        self.age = age
        self.sex = sex


class Student(Citizen):
    def __init__(self, id, name, age, sex, stdno, grade, score):
        super(Student, self).__init__(id, name, age, sex)
        self.stdno = stdno
        self.grade = grade
        self.score = score


class Teacher(Citizen):
    def __init__(self, id, name, age, sex, thno, dept, salary):
        super(Teacher, self).__init__(id, name, age, sex)
        self.thno = thno
        self.dept = dept
        self.salary = salary  # 主程序


c = Citizen('101', 'zhang', 20, 'female')
print(c.id, c.name, c.age, c.sex)
s = Student('102', 'wang', 30, 'male', 1221, 'computer12', 630)
print(s.id, s.name, s.age, s.sex, end=" ")
print(s.stdno, s.grade, s.score)
t = Teacher('103', 'li', 36, 'male', 356, 'eie', 4500)
print(t.id, t.name, t.age, t.sex, end=" ")
print(t.thno, t.dept, t.salary)

【程序結果】

101 zhang 20 female

102 wang 30 male 1221 computer12 630

103 li 36 male 356 eie 4500

 

程序50:複數類

【程序描述】

定義一個複數類,包括實部和虛部成員變量、構造方法、以及兩個複數的加法、乘法和比 較大小運算符定義。

【程序實現】

class Complex:
    def __init__(self, r, i):
        self.real = r
        self.imag = i

    def __add__(self, c):
        return Complex(self.real + c.real, self.imag + c.imag)

    def __mul__(self, c):
        return Complex(self.real * c.real - self.imag * c.imag, self.real * c.imag + self.imag * c.real)

    def __gt__(self, c):
        if self.real > c.real:
            return True
        elif self.real < c.real:
            return False
        elif self.imag > c.imag:
            return True
        else:
            return False

    def show(self):
        print(self.real, "+", self.imag, "j")


# 主函數
c1 = Complex(3, 4)
c2 = Complex(6, -7)
(c1 + c2).show()
(c1 * c2).show()
print(c1 > c2)

【程序結果】

9 + -3 j

46 + 3 j

False

相關文章
相關標籤/搜索