《Python程式設計與演算法基礎教程》第三章上機實踐

專注的阿熊發表於2021-08-03

# ch3 P59_3

# * 實現 101-201 輸出所有的素數 *

import math

j = 0

for m in range(101, 201):

     k = int(math.sqrt(m))

     for i in range(2, k + 2):

         if m % i == 0:

             break

     if i == k + 1:

         print(m, end = ' ' )

         j += 1

         if j % 10 == 0:

             print()

# ch3 P60_4

# * 輸出三角形 *

n = int(input(" 請輸入圖形的行數: "))

for i in range(0, n):

     for j in range(0, 10- i):

         print(" ", end = " ")

     for j in range(0, 2 * i + 1):

         print("*", end = " ")

     print("\n")

# ch3 P60_5

# * 水仙花數是一個三位數,三位數各位的立方之和等於三位數本身 *

import math # 呼叫模組,訪問 math 模組中 *

print(" 三位數中所有的水仙花數為: ")

for i in range(100, 1000):

     n1 = i // 100  # // 地板除法,求小於 a b 的商的最大整數

     n2 = (i % 100)//10

     n3 = i % 10

     if (math.pow(n1, 3) + math.pow(n2, 3) + math.pow(n3, 3) == i): # pow x,y )返回 x y 次冪的值

         print(i, end= " ")

# ch3 P60_6

# * 如果一個數恰好等於它的真因子之和,則稱該數為“完全數”。各個小於它的約數(真約數 , 列出某數的約數,去掉該數本身,剩下的就是它的真約數)的和等於它本身的自然數叫做完全數( Perfect number ),又稱完美數或完備數。 *

# 找出 1~1000 之間所有的完數

print("1~1000 之間所有的完數有,其因子為: ")

for n in range(1, 1001):

     total = 0

     j = 0

     factors = []

     for i in range(1, n):

         if (n % i == 0): # 找出 n 的所有約數並且出去它本身

             factors.append(i) # 存入陣列中

             total += i

     if (total == n): # 完全數的要求是所有的真約數之和為 n 本身

         print("{0}:{1}".format(n, factors))

# ch3 P60_7

# * 求任意兩個整數的最大公約數 *

m = int(input(" 請輸入整數 m:"))

n = int(input(" 請輸入整數 n:"))

while (m != n):

     if (m > n):

         m = m - n

     else:

         n = n - m

print(m)

# 上機實踐

# ch3 P60_1

# * 計算 1~100 之和 *

total = 0

for i in range(1, 101):

     total += i

print("1~100 之和為: ", total)

# 上機實踐

# ch3 P61_5

# * 輸出 2000~3000 之間的所有閏年 *

# * 判斷閏年的條件是:年份能被 4 整除但不能被 100 整除,或者能被 400 整除 *

j = 0

for i in range(2000, 3000):

     if((i % 4 == 0 and i % 100 != 0) or i % 400 == 0):

         j += 1

         print(i, end = " ")

         if (j % 18 == 0):

             print()

# ch3 P61_6

# * 計算 Sn = 1-3+5-7+9 11+ 。。。 *

n = int(input(" 請輸入一個整數: "))

count = 0

Sn1 = 0

Sn2 = 0

Sn = 0

for i in range(1, n + 1):

     count += 1

     if (count == 1):

         Sn1 += 2 * i -1

     if (count == 2):

       i = -i

       count = 0

       Sn2 += 2 * i + 1

Sn = Sn1 +Sn2

print(Sn)

# 上機實踐

# ch3 P61_7

# * 計算 Sn=1+1/2+1/3+... *

n = int(input(" 請輸入一個整數: "))

Sn = 0

for i in range(1, n + 1):

     An = 1 / i

     Sn += An

print(Sn)

# 上機實踐

# ch3 P61_8

# * 九九乘法表 *

print("*** 九九乘法表 ***")

count = 0

for i in range(1, 10):

     for j in range(1, 10):

         print("{}*{}={}".format(i, j, i * j), end=' ')

         count += 1

         if count % 9 == 0:

             print()

print("*** 下三角九九乘法表 ***")

for i in range(1, 10):

     for j in range(1, 10):

         print("{}*{}={} ".format(i, j, i * j), end=' ')

         if i == j:

             break

     print("")

print("*** 上三角九九乘法表 ***")

for i in range(1, 10):

     for j in range(1, 10):

         if j < i:

             print(end="       ")

             continue

         print("{}*{}={} ".format(i, j, i * j), end=' ')

     print("")

 

# 上機實踐

# ch3 P61_8

# * 九九乘法表 *

print(" 矩陣九九乘法表: ")

for i in range(1, 10):

     s = ''

     for j in range(1, 10):

         # {2:<2} # {} 叫做佔位符

         s += "{0:1}*{1:1}={2:2} ".format(i, j, i * j)

         # s += str.format("{0:1}*{1:1}={2:<2} ", i, j, i*j) # 把後面的格式變成字串,然後字串的連線賦給 s

     print(s)

print(" 下三角九九乘法表 ")

for i in range(1, 10):

     s = ''

     for j in range(1, 10):

         s += str.format("{0:1}*{1:1}={2:2} ", i, j, i*j)

         if j == i:

             break

     print(s)

print(" 上三角九九乘法表: ")

for i in range(1, 10):

     s = ''

     for j in range(1, 10):

         if j < i:

             print(end="       ")

             continue

         s += str.format("{0:1}*{1:1}={2:2} ", i, j, i*j)

     print(s)

# 上機實踐

# ch3 P61_9

# * 輸入三角形三條邊,判斷是否可以構成三角形 *

# * 條件: 1. 每條邊長均大於 0 ,並且任意兩邊之和大於第三邊

import math

A = int(input(" 請輸入三角形的邊 A: "))

B = int(input(" 請輸入三角形的邊 B: "))

C = int(input(" 請輸入三角形的邊 C: "))

if (A + B > C and A + C > B and B + C > A):

     perimeter = A + B + C

     h = 1 / 2 * perimeter

     area = math.sqrt(h * (h - A) * (h - B) * (h - C)) # 面積公式

     print(" 三角形三邊分別為 : a = {}, b = {}, c = {}".format(A, B, C))

     print(" 三角形的周長 = {}, 面積 = {}".format(perimeter, area))

else:

     print(" 無法構成三角形! ")

# 上機實踐

# ch3 P61_10

# *   輸入 x ,根據如下公式,計算分段函式 y 的值 *

import math

x = float(input(" 請輸入 x: "))

if x >= 0:

     y = (x ** 2 - 3 * x)/(x + 1) + 2 * math.pi + math.sin(x)

else:

     y = math.log((-5 * x), math.e) + 6 * math.sqrt(math.fabs(x) + math.e ** 4) - (x + 1) ** 3

print(" 方法三 : x ="+ str(x) + " y = " + str(y))

# 上機實踐

# ch3 P61_11

# *   輸入 x ,根據如下公式,計算分段函式 y 的值 *

import math

while (1):

     a = float(input(" 請輸入係數 a "))

     b = float(input(" 請輸入係數 b "))

     c = float(input(" 請輸入係數 c "))

     if (a == 0 and b == 0):

         print(" 此方程無解! ")

     elif (a == 0 and b != 0):

         x = -c / b

         print(" 此方程有一個實根: ", x)

     elif (b ** 2 - 4 * a * c == 0):

         x1 = x2 = -b / (2 * a)

         print(" 此方程有兩個相同實根: {} {}".format(x1, x2))

     elif (b ** 2 - 4 * a * c > 0):

         x1 = - b / (2 * a) + (math.sqrt(b ** 2 - 4 * a * c) / (2 * a))

         x2 = - b / (2 * a) - (math.sqrt(b ** 2 - 4 * a * c) / (2 * a))

         print(" 此方程有兩個不等實根:外匯跟單gendan5.com {} {}".format(x1, x2))

     else:

         print(" 此方程有兩個共軛復根: {0}+{1}i {0}-{1}i".format(- b / (2 * a), (math.sqrt(4 * a * c - b ** 2) / (2 * a))))

# 上機實踐

# ch3 P61_12

# *   輸入 x ,根據如下公式,計算分段函式 y 的值 *

import math

j = 1

whileCount = 1

n = int(input(" 請輸入非負整數 n:"))

while (n < 0):

     n = int(input(" 請輸入非負整數 n:"))

x = n  # 再用 x 指代輸入的 n ,防止在後面的操作中 n 的數值已經發生變化了

if (n == 0):

     print("0! = 1")

else:

     for i in range(1, n + 1):

         j *= i

     print("  for 迴圈: {} = {}".format(n, j))

     while (n):

         whileCount *= n

         n -= 1

     print("while 迴圈: {} = {}".format(x, whileCount))

s = i = 1

while (i <= x):

     s *= i

     i += 1

print("while 迴圈: {} = {}".format(x, s))

# 上機實踐

# ch3 P61_13

# *   編寫程式,產生兩個 0~100 之間(包含 0 1000 )的隨機整數 a b *

# * 求這兩個整數的最大公約數和最小公倍數 *

# * 方法:輾轉相除法求最大公約數 *

import random

a = random.randint(0, 100)

b = random.randint(0, 100)

print(" 整數 1 = {} , 整數 2 = {}".format(a, b))

if a > b: # 1. 對於已知的兩個正整數 m n, 使得 m>n

     m = a

     n = b

else:

     m = b

     n = a

r = m % n # 2.m 除以 n 得餘數 r

while r != 0:

     m = n

     n = r

     r = m % n # r = 0 ,則令 m = n n = r ,繼續相除得到新的餘數 r

     # 若仍然 r = 0 ,則重複此過程,直到 r = 0 為止。最後的 m 就是最大公約數。

m = n

leastCommonMultiple = int(a * b / m) # 最小公倍數就是已知的兩個正整數之積除以最大公約數的商

print(" 最大公約數 = {} , 最小公倍數 = {}".format(m, leastCommonMultiple))


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2785031/,如需轉載,請註明出處,否則將追究法律責任。

相關文章