- 我们的程序无论简单复杂,都是由顺序结构、分支结构、循环结构构成的。
练习清单
- 寻找“水仙花数”。
- 寻找“完美数”。
- “百钱百鸡”问题。
- 生成“斐波拉切数列”。
- Craps赌博游戏。
练习1、寻找“水仙花数”。
- 水仙花数是各位立方和等于这个数本身的数
# -*- coding: utf-8 -*-
"""
找出100~999之间的所有水仙花数
水仙花数是各位立方和等于这个数本身的数
如: 153 = 1**3 + 5**3 + 3**3
Created on Mon Jul 29 13:15:00 2019
@author: fengzi
"""
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)
练习2、寻找“完美数”。
- 完美数是除自身外其他所有因子的和正好等于这个数本身的数
例如: 6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14
# -*- coding: utf-8 -*-
"""
找出1~9999之间的所有完美数
完美数是除自身外其他所有因子的和正好等于这个数本身的数
例如: 6 = 1 + 2 + 3, 28 = 1 + 2 + 4 + 7 + 14
Created on Mon Jul 29 13:24:51 2019
@author: fengzi
"""
import time
import math
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)
练习3、“百钱百鸡”问题。
- 求解《百钱百鸡》问题
1只公鸡5元 1只母鸡3元 3只小鸡1元 用100元买100只鸡
问公鸡 母鸡 小鸡各有多少只
# -*- coding: utf-8 -*-
"""
求解《百钱百鸡》问题
1只公鸡5元 1只母鸡3元 3只小鸡1元 用100元买100只鸡
问公鸡 母鸡 小鸡各有多少只
Created on Mon Jul 29 13:32:32 2019
@author: fengzi
"""
for x in range(0,20):
for y in range(0,23):
z = 100 - x - y
if 5 * x + 3 * y + z /3 == 100:
print("公鸡:%d只,母鸡:%d只,小鸡:%d只" % (x, y, z))
- 如果不考虑三种鸡都有的情况可以用下面这种方法:
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))
练习4、生成“斐波拉切数列”。
- 斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368…
- 这个数列从第3项开始,每一项都等于前两项之和。
- 斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
# -*- coding: utf-8 -*-
"""
输出斐波那契数列的前20个数
1 1 2 3 5 8 13 21 ...
Created on Mon Jul 29 13:44:42 2019
@author: fengzi
"""
a = 0
b = 1
for _ in range(20):
a, b = b, a + b
print(a, end = " ")
练习4、Craps赌博游戏。
- Craps赌博游戏
玩家摇两颗色子 如果第一次摇出7点或11点 玩家胜
如果摇出2点 3点 12点 庄家胜 其他情况游戏继续
玩家再次摇色子 如果摇出7点 庄家胜
如果摇出第一次摇的点数 玩家胜
否则游戏继续 玩家继续摇色子
玩家进入游戏时有1000元的赌注 全部输光游戏结束
# -*- coding: utf-8 -*-
"""
Craps赌博游戏
玩家摇两颗色子 如果第一次摇出7点或11点 玩家胜
如果摇出2点 3点 12点 庄家胜 其他情况游戏继续
玩家再次摇色子 如果摇出7点 庄家胜
如果摇出第一次摇的点数 玩家胜
否则游戏继续 玩家继续摇色子
玩家进入游戏时有1000元的赌注 全部输光游戏结束
Created on Mon Jul 29 14:17:03 2019
@author: fengzi
"""
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("你破产了,游戏结束!")