鱼C论坛

 找回密码
 立即注册
查看: 2423|回复: 7

[已解决]Help! 三局两胜制,三局都是玩家赢,最后判敌人赢是什么鬼,求纠错QAQ

[复制链接]
发表于 2023-2-16 08:56:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不认真学习DHL 于 2023-2-16 09:00 编辑

循环多次,有时间是对的,有时候是错的,尤其出现如题现象,是最后计分循环出现问题了吗?

import time,random

while True:    #不确定次数的循环
    player_life = random.randint(100,150)
    enemy_life = random.randint(100,150)
    
    print('玩家血量:%s;敌人血量:%s。'%(player_life,enemy_life))
    print('-------------------------------')
    time.sleep(1.5)

    for i in range(3):

        player_attack = random.randint(30,50)  #玩家攻击力每次都是随机的
        enemy_attack = random.randint(30,50)

        print('这是第%s局游戏'%(i+1))
        player_life = player_life - enemy_attack
        enemy_life = enemy_life - player_attack
        print('玩家血量:%s;敌人血量:%s。'%(player_life,enemy_life))
    
        player_victory = 0   #空白计分板
        enemy_victory = 0

        if  player_life > 0 and enemy_life < player_life:    #玩家大于敌人血量视为赢
            player_victory += 1 
            print('玩家赢了(血量:%s)'%player_life)
        elif enemy_life > 0  and player_life < enemy_life:    #敌人大于玩家血量视为赢
            print('敌人赢了(血量:%s)'%enemy_life)
            enemy_victory += 1
        else:
            print('同归于尽')
        print('-------------------------------')
        time.sleep(1.5)

    if player_victory > enemy_victory:
        print('最终结果:玩家赢了')
    elif player_victory == enemy_victory:
        print('最终结果:平局')
    else:
        print('最终结果:敌人赢了')
    print('-------------------------------')
    time.sleep(1.5)   

    again = input('是否再来一局?请回答是or否')
    if again == '是':
        continue
    else:
        break
最佳答案
2023-2-16 09:30:11
本帖最后由 isdkz 于 2023-2-16 09:33 编辑

计分应该是放在 for 循环的外面,while 循环的里面,不然每次都在 for 循环里被重置为 0,

它应该在 while 循环重置才对
import time,random

while True:    #不确定次数的循环
    player_life = random.randint(100,150)
    enemy_life = random.randint(100,150)
   
    player_victory = 0   #空白计分板                        这个应该放在 for 循环的外面
    enemy_victory = 0
    
    print('玩家血量:%s;敌人血量:%s。'%(player_life,enemy_life))
    print('-------------------------------')
    time.sleep(1.5)

    for i in range(3):

        player_attack = random.randint(30,50)  #玩家攻击力每次都是随机的
        enemy_attack = random.randint(30,50)

        print('这是第%s局游戏'%(i+1))
        player_life = player_life - enemy_attack
        enemy_life = enemy_life - player_attack
        print('玩家血量:%s;敌人血量:%s。'%(player_life,enemy_life))
   


        if  player_life > 0 and enemy_life < player_life:    #玩家大于敌人血量视为赢
            player_victory += 1
            print('玩家赢了(血量:%s)'%player_life)
        elif enemy_life > 0  and player_life < enemy_life:    #敌人大于玩家血量视为赢
            print('敌人赢了(血量:%s)'%enemy_life)
            enemy_victory += 1
        else:
            print('同归于尽')
        print('-------------------------------')
        time.sleep(1.5)

    if player_victory > enemy_victory:
        print('最终结果:玩家赢了')
    elif player_victory == enemy_victory:
        print('最终结果:平局')
    else:
        print('最终结果:敌人赢了')
    print('-------------------------------')
    time.sleep(1.5)   

    again = input('是否再来一局?请回答是or否')
    if again == '是':
        continue
    else:
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-16 09:06:11 | 显示全部楼层
我执行没有问题,你把你出问题的那个执行结果放上来看看

玩家血量:174;敌人血量:120。
-------------------------------
这是第1局游戏
玩家血量:137;敌人血量:80。
玩家赢了(血量:137)
-------------------------------
这是第2局游戏
玩家血量:102;敌人血量:40。
玩家赢了(血量:102)
-------------------------------
这是第3局游戏
玩家血量:60;敌人血量:1。
玩家赢了(血量:60)
-------------------------------
最终结果:玩家赢了
-------------------------------
是否再来一局?请回答是or否
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2023-2-16 09:18:20 | 显示全部楼层
isdkz 发表于 2023-2-16 09:06
我执行没有问题,你把你出问题的那个执行结果放上来看看

今天暂时跑了一个这样的异常结果:

是否再来一局?请回答是or否是
玩家血量:109;敌人血量:108。
-------------------------------
这是第1局游戏
玩家血量:63;敌人血量:64。
敌人赢了(血量:64)
-------------------------------
这是第2局游戏
玩家血量:25;敌人血量:29。
敌人赢了(血量:29)
-------------------------------
这是第3局游戏
玩家血量:-20;敌人血量:-6。
同归于尽
-------------------------------
最终结果:平局
-------------------------------
是否再来一局?请回答是or否
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-16 09:26:30 | 显示全部楼层
如果计分放在循坏的外面,错误就会更多:
import time,random

player_victory = 0   #空白计分板跳出循环外
enemy_victory = 0

while True:    #不确定次数的循环
    player_life = random.randint(100,150)
    enemy_life = random.randint(100,150)  
    print('玩家血量:%s;敌人血量:%s。'%(player_life,enemy_life))
    print('-------------------------------')
    time.sleep(1.5)

    for i in range(3):
        player_attack = random.randint(30,50)  #玩家攻击力每次都是随机的
        enemy_attack = random.randint(30,50)
        print('这是第%s局游戏'%(i+1))
        player_life = player_life - enemy_attack
        enemy_life = enemy_life - player_attack
        print('玩家血量:%s,受到攻击-%s;敌人血量:%s,受到攻击-%s。'%(player_life,enemy_attack,enemy_life,player_attack))  #for-in 循环结束
        time.sleep(1.5)

        if  player_life > 0 and enemy_life < player_life:    #玩家大于敌人血量视为赢
            player_victory += 1 
            print('玩家赢了(血量:%s)'%player_life)
        elif enemy_life > 0  and player_life < enemy_life:    #敌人大于玩家血量视为赢
            enemy_victory += 1
            print('敌人赢了(血量:%s)'%enemy_life)
        else:
            print('同归于尽')
        print('-------------------------------')
        time.sleep(1.5)

    if player_victory > enemy_victory:
        print('最终结果:玩家赢了')
    elif player_victory < enemy_victory:
        print('最终结果:敌人赢了')
    else:
        print('最终结果:平局')
    print('-------------------------------')
    time.sleep(1.5)   

    again = input('是否再来一局?请回答是or否')
    if again == '是':
        continue
    else:
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 09:30:11 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-2-16 09:33 编辑

计分应该是放在 for 循环的外面,while 循环的里面,不然每次都在 for 循环里被重置为 0,

它应该在 while 循环重置才对
import time,random

while True:    #不确定次数的循环
    player_life = random.randint(100,150)
    enemy_life = random.randint(100,150)
   
    player_victory = 0   #空白计分板                        这个应该放在 for 循环的外面
    enemy_victory = 0
    
    print('玩家血量:%s;敌人血量:%s。'%(player_life,enemy_life))
    print('-------------------------------')
    time.sleep(1.5)

    for i in range(3):

        player_attack = random.randint(30,50)  #玩家攻击力每次都是随机的
        enemy_attack = random.randint(30,50)

        print('这是第%s局游戏'%(i+1))
        player_life = player_life - enemy_attack
        enemy_life = enemy_life - player_attack
        print('玩家血量:%s;敌人血量:%s。'%(player_life,enemy_life))
   


        if  player_life > 0 and enemy_life < player_life:    #玩家大于敌人血量视为赢
            player_victory += 1
            print('玩家赢了(血量:%s)'%player_life)
        elif enemy_life > 0  and player_life < enemy_life:    #敌人大于玩家血量视为赢
            print('敌人赢了(血量:%s)'%enemy_life)
            enemy_victory += 1
        else:
            print('同归于尽')
        print('-------------------------------')
        time.sleep(1.5)

    if player_victory > enemy_victory:
        print('最终结果:玩家赢了')
    elif player_victory == enemy_victory:
        print('最终结果:平局')
    else:
        print('最终结果:敌人赢了')
    print('-------------------------------')
    time.sleep(1.5)   

    again = input('是否再来一局?请回答是or否')
    if again == '是':
        continue
    else:
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-16 09:57:55 | 显示全部楼层
isdkz 发表于 2023-2-16 09:30
计分应该是放在 for 循环的外面,while 循环的里面,不然每次都在 for 循环里被重置为 0,

它应该在 whi ...

懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 19:57:51 | 显示全部楼层
运行了一下,你这还有问题,双方血都是负数已经同归于尽的情况下最后还是会说谁输谁赢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-17 10:30:58 | 显示全部楼层
dscm123 发表于 2023-2-16 19:57
运行了一下,你这还有问题,双方血都是负数已经同归于尽的情况下最后还是会说谁输谁赢

这个的逻辑就是三局两胜,虽然最后都变成了负数,但是要综合三局得出最终结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 12:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表