鱼C论坛

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

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

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

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

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

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

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


  1. import time,random

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

  9.     for i in range(3):

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

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

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

  29.     if player_victory > enemy_victory:
  30.         print('最终结果:玩家赢了')
  31.     elif player_victory == enemy_victory:
  32.         print('最终结果:平局')
  33.     else:
  34.         print('最终结果:敌人赢了')
  35.     print('-------------------------------')
  36.     time.sleep(1.5)   

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

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

它应该在 while 循环重置才对


  1. import time,random

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

  12.     for i in range(3):

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

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


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

  30.     if player_victory > enemy_victory:
  31.         print('最终结果:玩家赢了')
  32.     elif player_victory == enemy_victory:
  33.         print('最终结果:平局')
  34.     else:
  35.         print('最终结果:敌人赢了')
  36.     print('-------------------------------')
  37.     time.sleep(1.5)   

  38.     again = input('是否再来一局?请回答是or否')
  39.     if again == '是':
  40.         continue
  41.     else:
  42.         break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

玩家血量:174;敌人血量:120。
-------------------------------
这是第1局游戏
玩家血量:137;敌人血量:80。
玩家赢了(血量:137)
-------------------------------
这是第2局游戏
玩家血量:102;敌人血量:40。
玩家赢了(血量:102)
-------------------------------
这是第3局游戏
玩家血量:60;敌人血量:1。
玩家赢了(血量:60)
-------------------------------
最终结果:玩家赢了
-------------------------------
是否再来一局?请回答是or否
小甲鱼最新课程 -> https://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否
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  1. import time,random

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

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

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

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

  28.     if player_victory > enemy_victory:
  29.         print('最终结果:玩家赢了')
  30.     elif player_victory < enemy_victory:
  31.         print('最终结果:敌人赢了')
  32.     else:
  33.         print('最终结果:平局')
  34.     print('-------------------------------')
  35.     time.sleep(1.5)   

  36.     again = input('是否再来一局?请回答是or否')
  37.     if again == '是':
  38.         continue
  39.     else:
  40.         break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

它应该在 while 循环重置才对


  1. import time,random

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

  12.     for i in range(3):

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

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


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

  30.     if player_victory > enemy_victory:
  31.         print('最终结果:玩家赢了')
  32.     elif player_victory == enemy_victory:
  33.         print('最终结果:平局')
  34.     else:
  35.         print('最终结果:敌人赢了')
  36.     print('-------------------------------')
  37.     time.sleep(1.5)   

  38.     again = input('是否再来一局?请回答是or否')
  39.     if again == '是':
  40.         continue
  41.     else:
  42.         break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

它应该在 whi ...

懂了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

这个的逻辑就是三局两胜,虽然最后都变成了负数,但是要综合三局得出最终结果。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 02:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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