Github: GitHub -https://github.com/jackfrued/Python-100-Days
(骆昊)
Gitclone: https://gitee.com/viitii/Python-100-Days
2021.10.17
Day05.构造程序逻辑
(看完老师的代码,自己尝试编写)
1.百钱百鸡问题
张丘建《算经》中提出,翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
for x in range(21):
for y in range(34):
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只
上面使用的方法叫做穷举法,也称为暴力搜索法,这种方法通过一项一项的列举备选解决方案中所有可能的候选项并检查每个候选项是否符合问题的描述,最终得到问题的解。
2.寻找水仙花数
水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数。
特征:(1)一个3位数——range范围(100,1000);(2)该数字每个位上数字的立方之和正好等于它本身,例如:
1
3
+
5
3
+
3
3
=
153
1^3 + 5^3+ 3^3=153
13+53+33=153。
关键:利用除法余数(模计算)找出每个位置上的数字,在通过水仙花数的特征来判断。
for num in range(100,1000):
x=num%10
y=num//10-10*(num//100) #老师这里写的是:y=num//10%5,更加简洁
z=num//100
if num==x**3+y**3+z**3:
print(num)
153
370
371
407
注意:
(1)错写成下图 ,这里是检查是否“等于”而非“赋值”。
(2) 记得每个函数后面要写冒号!! if 函数, for in 函数
3.CRAPS赌博游戏
CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简单的规则是:玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;其他点数玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数,玩家继续要骰子,直到分出胜负。
分出胜负后,又重新进入一个新的轮回,从头开始(因为总while money>0包裹着所有)。
"""
Craps赌博游戏
我们设定玩家开始游戏时有1000元的赌注
游戏结束的条件是玩家输光所有的赌注
Version: 0.1
Author: 骆昊
"""
from random import randint
money = 1000
while money > 0:
print('你的总资产为:', money)
needs_go_on = False
#与下同理,第一次有三个条件,用于阻止第一次得出胜负后,又进入第n轮
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
'''
多次摇骰子,当玩家没有进入条件1,2,就会给needs_go_on赋予True值
继续进入while needs_go_on的循环,进入后首先被赋予False值,
如果进入条件1,2,此时needs_go_on没有被重新赋值,仍是False,会直接跳走。
(只要在while之前为True,哪怕进入变为 Flase,也会一直运行,
直到进入While之前为False)
'''
print('你破产了, 游戏结束!')
注意:
(1)引入模块两种形式:
from random import randint
#可以直接写: first = randint(1, 6) + randint(1, 6)
import random
#先引入random再写:answer = random.randint(1, 100)
(2)print() 用法:
print('你的总资产为:', money) #加逗号
print('玩家摇出了%d点' % first)#占位符不需要加逗号
(3)While循环使用标志:
定义一个变量,用于判断整个程序是否处于活动状态,可以让程序在标志为True时继续运行,并在任何事件导致标志的值为False时让程序停止运行。