分支与循环练习
1)百钱百鸡:公鸡5元一只,母鸡3元1只,小鸡一元3只,欲用100元买100只鸡,问公鸡、母鸡、小鸡各多少只?
for x in range(0, 21):
for y in range(0, 34):
z = 100 - x - y
if 5 * x + 3 * y + z // 3 == 100 and z % 3 == 0:
print(f'公鸡{x}只,母鸡{y}只,小鸡{z}只')
2)有ABCDE五个人捕鱼,捕完鱼太累倒头就睡,A第一个醒来,把鱼分成5份,扔走多余的1条,拿走一份,其余4人醒来后执行相同的操作。
问:他们最少捕了多少条鱼?
fish = 6
while True:
temp = fish
is_enough = True
for _ in range(5):
if temp % 5 == 1:
temp = (temp - 1) * 4 // 5
else:
is_enough = False
break
if is_enough:
break
fish += 5
print(f'他们最少捕了{fish}条鱼')
3)CRAPS赌博游戏 - 摇两颗色子
玩家摇色子,如果第一次摇出了7点或11点,玩家胜;
如果摇出2点、3点、12点,庄家胜;其他情况,游戏继续;
如果玩家重新摇色子,如果摇出了第一次摇的点数玩家胜;
如果摇出了7点,庄家胜;其他情况游戏继续,直到分出胜负
a.把游戏场景模拟出来,输出玩家胜还是庄家胜;
b.玩家一开始有1000元,每次玩的时候下注,赢了获得对应的注码;输了就输掉对应的注码;
c.游戏结束的条件是玩家破产
import random
balance = 1000
while balance > 0:
print(f'\n您的总资产为{balance}元.\n')
debt_money = 0
while debt_money <= 0 or debt_money > balance:
debt_money = int(input('请下注: '))
face1 = random.randrange(1, 7)
face2 = random.randrange(1, 7)
first_point = face1 + face2
print(f'玩家摇出了{first_point}点.')
if first_point in (7, 11):
balance += debt_money
print(f'玩家胜!!!')
elif first_point in (2, 3, 12):
balance -= debt_money
print(f'庄家胜~~~')
else:
while True:
face1 = random.randrange(1, 7)
face2 = random.randrange(1, 7)
current_point = face1 + face2
print(f'玩家摇出了{current_point}点.')
if current_point == first_point:
balance += debt_money
print(f'玩家胜!!!')
break
elif current_point == 7:
balance -= debt_money
print(f'庄家胜~~~')
break
print('你破产了,游戏结束')
4)把两颗色子摇10000次,统计每种点数出现的次数
import random
def roll_dice(n):
total = 0
for _ in range(n):
total += random.randrange(1, 7)
return total
two = three = four = five = six = seven = eight = nine = ten =eleven = twelve = 0
for _ in range(1, 10001):
a = roll_dice(2)
if a == 2:
two += 1
elif a == 3:
three += 1
elif a == 4:
four += 1
elif a == 5:
five += 1
elif a == 6:
six += 1
elif a == 7:
seven += 1
elif a == 8:
eight += 1
elif a == 9:
nine += 1
elif a == 10:
ten += 1
elif a == 11:
eleven += 1
else:
twelve += 1
print(f'2:{two};\t 3:{three};\t 4:{four};\t 5:{five};\t 6:{six};\t 7:{seven};\t '
f'8:{eight};\t 9:{nine};\t 10:{ten};\t 11:{eleven};\t 12:{twelve}')
5)找出10000以内的完美数(如果一个数等于除自身以外所有因子的和)
for num in range(2, 10000):
total = 1
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
total += i
if i != num // i:
total += num // i
if total == num:
print(num)