day5-分支与循环练习

分支与循环练习

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值