不认真学习DHL 发表于 2023-2-16 08:56:16

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

本帖最后由 不认真学习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

      ifplayer_life > 0 and enemy_life < player_life:    #玩家大于敌人血量视为赢
            player_victory += 1
            print('玩家赢了(血量:%s)'%player_life)
      elif enemy_life > 0and 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

isdkz 发表于 2023-2-16 09:06:11

我执行没有问题,你把你出问题的那个执行结果放上来看看

玩家血量:174;敌人血量:120。
-------------------------------
这是第1局游戏
玩家血量:137;敌人血量:80。
玩家赢了(血量:137)
-------------------------------
这是第2局游戏
玩家血量:102;敌人血量:40。
玩家赢了(血量:102)
-------------------------------
这是第3局游戏
玩家血量:60;敌人血量:1。
玩家赢了(血量:60)
-------------------------------
最终结果:玩家赢了
-------------------------------
是否再来一局?请回答是or否

不认真学习DHL 发表于 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否

不认真学习DHL 发表于 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)

      ifplayer_life > 0 and enemy_life < player_life:    #玩家大于敌人血量视为赢
            player_victory += 1
            print('玩家赢了(血量:%s)'%player_life)
      elif enemy_life > 0and 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

isdkz 发表于 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))
   


      ifplayer_life > 0 and enemy_life < player_life:    #玩家大于敌人血量视为赢
            player_victory += 1
            print('玩家赢了(血量:%s)'%player_life)
      elif enemy_life > 0and 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

不认真学习DHL 发表于 2023-2-16 09:57:55

isdkz 发表于 2023-2-16 09:30
计分应该是放在 for 循环的外面,while 循环的里面,不然每次都在 for 循环里被重置为 0,

它应该在 whi ...

懂了

dscm123 发表于 2023-2-16 19:57:51

运行了一下,你这还有问题,双方血都是负数已经同归于尽的情况下最后还是会说谁输谁赢

不认真学习DHL 发表于 2023-2-17 10:30:58

dscm123 发表于 2023-2-16 19:57
运行了一下,你这还有问题,双方血都是负数已经同归于尽的情况下最后还是会说谁输谁赢

这个的逻辑就是三局两胜,虽然最后都变成了负数,但是要综合三局得出最终结果。
页: [1]
查看完整版本: Help! 三局两胜制,三局都是玩家赢,最后判敌人赢是什么鬼,求纠错QAQ