Day05-練習

本文轉自GitHub文章:Python - 100天從新手到大師
https://github.com/jackfrued/Python-100-Days

練習

練習清單

  1. 尋找“水仙花數”。
"""
找出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. 尋找“完美數”。
"""
找出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. “百錢百雞”問題。
"""
求解《百錢百雞》問題
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
  1. 生成“斐波拉切數列”。
"""
輸出斐波那契數列的前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
  1. 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點
莊家勝!
你破產了, 遊戲結束!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章