Python实现人机石头剪刀布游戏 定义botmove后无输出如何解决
问题原因
- 缺少
random模块导入:使用random.randint()前必须先导入random模块,否则代码首行就会抛出命名错误,若运行环境屏蔽了错误提示,就会出现逻辑中断、无对战结果输出的情况。 - 变量名冲突:你将存储随机结果的变量直接命名为
random,会覆盖导入的random模块对象,属于错误写法,会导致后续依赖random模块的逻辑失效。 - 无输入合法性校验:如果用户输入的出招内容不是r/p/s,不会匹配到任何胜负判断分支,也就不会打印任何输出。
修复方案
- 在代码最开头添加
import random语句导入依赖模块 - 将存储随机数的变量名改为
random_num,避免和模块名冲突 - 增加用户输入合法性校验,对不符合要求的输入给出提示
- 可选优化:将独立的
if分支改为if-elif结构,减少不必要的判断
修复后完整代码
import random # 生成电脑出招,避免变量名和模块名冲突 random_num = random.randint(1,3) if random_num == 1: botmove = 'r' elif random_num == 2: botmove = 'p' else: botmove = 's' print('Play Rock,Paper,Scissors?') print('Y/N') play = input('>').lower().strip() if play == 'n': print('Thank You For Playing.') elif play == 'y': print('Rock Or Paper Or Scissors?') print('R/P/S') move = input('>').strip().lower() # 先校验输入是否合法 if move not in ['r','p','s']: print('输入错误,请输入R/P/S中的一个') else: # 胜负判断 if move == 'r': if botmove == 'r': print('The Computer Chose:', botmove) print('Draw.') elif botmove == 'p': print('The Computer Chose:', botmove) print('You Lost.') else: print('The Computer Chose:', botmove) print('You Won.') elif move == 'p': if botmove == 'r': print('The Computer Chose:', botmove) print('You Won.') elif botmove == 'p': print('The Computer Chose:', botmove) print('Draw.') else: print('The Computer Chose:', botmove) print('You Lost.') elif move == 's': if botmove == 'r': print('The Computer Chose:', botmove) print('You Lost.') elif botmove == 'p': print('The Computer Chose:', botmove) print('You Won.') else: print('The Computer Chose:', botmove) print('Draw.') else: print('输入错误,请输入Y/N')
内容的提问来源于stack exchange,提问作者WereWolf_Hunter
相关产品推荐
相关产品推荐

