本文轉自GitHub文章:Python - 100天從新手到大師
https://github.com/jackfrued/Python-100-Days
練習
練習清單
- 尋找“水仙花數”。
"""
找出100~999之間的所有水仙花數
水仙花數是各位立方和等於這個數本身的數
如: 153 = 1**3 + 5**3 + 3**3
Version: 0.1
Author: 駱昊
Date: 2018-03-02
"""
for num in range(100, 1000):
low = num % 10
mid = num // 10 % 10
high = num // 100
if num == low ** 3 + mid ** 3 + high ** 3:
print(num)
運行結果:
153
370
371
407
- 尋找“完美數”。
"""
找出1~9999之間的所有完美數
完美數是除自身外其他所有因子的和正好等於這個數本身的數
例如: 6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14
Version: 0.1
Author: 駱昊
Date: 2018-03-02
"""
import time
import math
start = time.clock()
for num in range(1, 10000):
sum = 0
for factor in range(1, int(math.sqrt(num)) + 1):
if num % factor == 0:
sum += factor
if factor > 1 and num / factor != factor:
sum += num / factor
if sum == num:
print(num)
end = time.clock()
print("執行時間:", (end - start), "秒")
運行結果:
1
6
28
496
8128
執行時間: 0.04857600000000001 秒
- “百錢百雞”問題。
"""
求解《百錢百雞》問題
1只公雞5元 1只母雞3元 3只小雞1元 用100元買100只雞
問公雞 母雞 小雞各有多少隻
Version: 0.1
Author: 駱昊
Date: 2018-03-02
"""
for x in range(0, 20):
for y in range(0, 33):
z = 100 - x - y
if 5 * x + 3 * y + z / 3 == 100:
print('公雞: %d只, 母雞: %d只, 小雞: %d只' % (x, y, z))
# 要理解程序背後的算法 - 窮舉法
公雞: 0只, 母雞: 25只, 小雞: 75只
公雞: 4只, 母雞: 18只, 小雞: 78只
公雞: 8只, 母雞: 11只, 小雞: 81只
公雞: 12只, 母雞: 4只, 小雞: 84只
- 生成“斐波拉切數列”。
"""
輸出斐波那契數列的前20個數
1 1 2 3 5 8 13 21 ...
Version: 0.1
Author: 駱昊
Date: 2018-03-02
"""
a = 0
b = 1
for _ in range(20):
(a, b) = (b, a + b)
print(a, end=' ')
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
- Craps賭博遊戲。
"""
Craps賭博遊戲
玩家搖兩顆色子 如果第一次搖出7點或11點 玩家勝
如果搖出2點 3點 12點 莊家勝 其他情況遊戲繼續
玩家再次搖色子 如果搖出7點 莊家勝
如果搖出第一次搖的點數 玩家勝
否則遊戲繼續 玩家繼續搖色子
玩家進入遊戲時有1000元的賭注 全部輸光遊戲結束
Version: 0.1
Author: 駱昊
Date: 2018-03-02
"""
from random import randint
money = 1000
while money > 0:
print('你的總資產爲:', money)
needs_go_on = False
while True:
debt = int(input('請下注: '))
if debt > 0 and 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:
current = randint(1, 6) + randint(1, 6)
print('玩家搖出了%d點' % current)
if current == 7:
print('莊家勝')
money -= debt
needs_go_on = False
elif current == first:
print('玩家勝')
money += debt
needs_go_on = False
print('你破產了, 遊戲結束!')
你的總資產爲: 1000
請下注: 100
玩家搖出了7點
玩家勝!
你的總資產爲: 1100
請下注: 100
玩家搖出了5點
玩家搖出了4點
玩家搖出了5點
玩家勝
你的總資產爲: 1200
請下注: 100
玩家搖出了11點
玩家勝!
你的總資產爲: 1300
請下注: 1000
玩家搖出了6點
玩家搖出了9點
玩家搖出了11點
玩家搖出了6點
玩家勝
你的總資產爲: 2300
請下注: 2300
玩家搖出了3點
莊家勝!
你破產了, 遊戲結束!