设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

猜密码游戏

[复制链接]

3

主题

1

好友

111

积分

注册会员

Rank: 2

楼主
发表于 2021-2-12 18:35:19 |显示全部楼层
写得挺顺的,30分钟把主体写完了。但是修改和完善内容用了一个半小时。

老师能看看吗?

其实也有几个问题。
虽然输入4个数字,能排除其中一个是浮点数的问题,比如1.5234;但是如果刚好有四个字符,比如1.52就不行了。
虽然写的是“按回车继续”,但是实际上输入除‘quit’外的任何东西都能继续,如果用户不小心输了别的,就会发现程序的漏洞。

请老师指点一下,谢谢啦!
  1. import random

  2. print('你的面前有一个密码锁,密码为0~9中不重复的四个数字.')
  3. print('猜对正确位置上的数字为A,猜到数字但位置不正确为B.')
  4. print('每次结束后显示答案中A和B的个数.')
  5. print('比如:密码是1234.输入2345,将会显示0A3B;猜4231,将会显示2A2B.\n\n')

  6. password_l = random.sample(range(0,10),4)
  7. #  在测试各种功能的时候我“无耻地”加了右边这句  print(password_l)
  8. password_str = ''.join([str(i) for i in password_l])

  9. while True:
  10.     en_word = [1,2,3]  #  创建en_word并使其满足条件以进入while
  11.     while len(set(en_word)) != 4:  #  排除数字过多或过少或重复,和浮点数的情况
  12.         input_w = '请直接输入4个数字(0~9)作为解锁密码:\n'
  13.         input_w += '(注意!形式类似于1234,且为不重复的整数!)\n'
  14.         en_word = list(input(input_w))  
  15.     answer_d = {'A':0,'B':0}
  16.     for index in range(0,4):
  17.         if int(en_word[index]) == password_l[index]:
  18.             answer_d['A'] += 1
  19.         elif int(en_word[index]) in password_l:
  20.             answer_d['B'] += 1
  21.     result = '%dA%dB'%(answer_d['A'],answer_d['B'])
  22.     print(result)
  23.     if result == '4A0B':
  24.         break
  25.     elif result != '4A0B':
  26.         print('密码不对哟!\n')
  27.     tuichu = input('要再来吗?请按回车.如果要结束游戏就请输入"quit"\n')  #  防止玩家耐心渐消
  28.     if tuichu == 'quit':
  29.         print('游戏结束,下次再见哦!(悄悄告诉你,其实密码是%s)' % password_str)
  30.         break
复制代码
回复

使用道具 举报

3

主题

1

好友

111

积分

注册会员

Rank: 2

沙发
发表于 2021-2-13 11:39:17 |显示全部楼层
crossin先生 发表于 2021-2-13 00:03
虽然输入4个数字,能排除其中一个是浮点数的问题,比如1.5234;但是如果刚好有四个字符,比如1.52就不行了 ...

谢谢老师,问题都解决了

但是我发现您给的代码有一点小小小错误,就是您在tuichu == 'quit'的情况下用了‘break’,它只能关闭最内层循环。而满足这个条件时本来应该关闭整个大循环。

所以我在整个循环前加了句‘active = True’,把大循环的条件改成了‘active == True’,然后在while tuichu != ‘’的if语句的break前加了句active = False

老师看是这样吗?谢谢啦
回复

使用道具 举报

3

主题

1

好友

111

积分

注册会员

Rank: 2

板凳
发表于 2021-2-13 20:56:09 |显示全部楼层
crossin先生 发表于 2021-2-13 20:13
你这个方法是对的,一般要跳出多层循环都是通过变量来控制

好的,谢谢老师
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-4 06:32 , Processed in 0.015981 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部