經典示例-在快樂中鍛鍊程式邏輯

Francis_自由的程式設計師發表於2020-12-15


一.構造程式邏輯

剛接觸一門語言,最重要的是從根本上懂得此語言的邏輯,懂得執行原理.這就需要我們通過一些簡單有趣的例子來鍛鍊自己的語言邏輯思維,嘗試用所學知識去解決現實中的問題,換句話說就是鍛鍊自己把人類自然語言描述的演算法(解決問題的方法和步驟)翻譯成Python程式碼的能力,而這件事情必須通過大量的練習才能達成。

這裡為大家整理了一些經典的案例,一方面幫助大家鞏固之前所學的Python知識,另一方面幫助大家瞭解如何建立程式中的邏輯以及如何運用一些簡單的演算法解決現實中的問題。

二.經典示例

1.python-尋找水仙花數

說明:水仙花數也被稱為超完全數字不變數、自戀數、自冪數、阿姆斯特朗數,它是一個3位數,該數字每個位上數字的立方之和正好等於它本身。
例如: 153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153

程式碼演示:

for i in range(100, 1000):
   a = i//100  # 取百位數字
   b = i//10 % 10  # 取十位數字
   c = i%10  # 取個位數字
   if a**3 + b**3 + c**3 == i:
      print(i, "是水仙花數")

2.python-求素數,合數

求2~100之內的所有素數。【素數:只能被1或本身整除的數】

程式碼演示:

for n in range(2, 101):
   for i in range(2, n):
       if n % i == 0:
           # print(n, '不是質數')
          break
   else:
       print(n, "是質數")

3.python-列印九九乘法表

列印九九乘法表

程式碼演示:

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

4.python-求斐波那契數列

求斐波那契數列中第n個數的值,n是正整數。n值由控制檯輸入
說明:斐波那契數列是這樣的一個數列:1、1、2、3、5、8、13、21、34、… ,第一個數和第二個數是1,從第三個數開始每個元素是前兩個元素相加的和。

程式碼演示:

n = int(input('請輸入一個數字:'))

a = 1  # 第1個數
b = 1  # 第2個數
c = 0
if n <= 2:
   print(1)
else:
   for i in range(3, n+1):
       c = a + b  # c = 2(第一次時)

       a = b
       b = c

   print(c)

5.python-百馬百擔問題

問題:一匹大馬能馱3擔貨,一匹中馬能馱2擔貨,兩匹小馬能馱1擔貨,如果用一百匹馬馱一百擔貨,問有大、中、小馬各幾匹?

程式碼演示:

for i in range(34):
   for j in range(51):
       k = 100 - i - j
       if i*3 + j*2 + k/2 == 100:
           print(i, j, k)

上面使用的方法叫做窮舉法,也稱為暴力搜尋法,這種方法通過一項一項的列舉備選解決方案中所有可能的候選項並檢查每個候選項是否符合問題的描述,最終得到問題的解。這種方法看起來比較笨拙,但對於運算能力非常強大的計算機來說,通常都是一個可行的甚至是不錯的選擇,而且問題的解如果存在,這種方法一定能夠找到它。

6.python-CRAPS賭博遊戲

說明:CRAPS又稱花旗骰,是美國拉斯維加斯非常受歡迎的一種的桌上賭博遊戲。該遊戲使用兩粒骰子,玩家通過搖兩粒骰子獲得點數進行遊戲。簡單的規則是:玩家第一次搖骰子如果搖出了7點或11點,玩家勝;玩家第一次如果搖出2點、3點或12點,莊家勝;其他點數玩家繼續搖骰子,如果玩家搖出了7點,莊家勝;如果玩家搖出了第一次搖的點數,玩家勝;其他點數,玩家繼續要骰子,直到分出勝負。

程式碼演示:

from random import randint

money = 1000
while money > 0:
   print('你的總資產為:', money)
   needs_go_on = False
   while True:
       debt = int(input('請下注: '))
       if 0 < debt <= money:
           break
   first = randint(1, 6) + randint(1, 6)
   print('玩家搖出了%d點' % first)
   if first == 7 or first == 11:
       print('玩家勝!')
       money += debt
   elif first == 2 or first == 3 or first == 12:
       print('莊家勝!')
       money -= debt
   else:
       needs_go_on = True
   while needs_go_on:
       needs_go_on = False
       current = randint(1, 6) + randint(1, 6)
       print('玩家搖出了%d點' % current)
       if current == 7:
           print('莊家勝')
           money -= debt
       elif current == first:
           print('玩家勝')
           money += debt
       else:
           needs_go_on = True
print('你破產了, 遊戲結束!')

相關文章