请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 49773|回复: 51

猜密码游戏

[复制链接]

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-9-8 00:32:09 |显示全部楼层
再来一个相对简单点的。

以前电子词典上有个游戏:要你猜一个4位密码,密码由0-9组成,不重复。猜对正确位置上的数字为A,猜到数字但位置不正确为B。每次显示答案中A和B的个数。

比如:密码是1234

猜2345,显示0A3B
猜4231,显示2A2B

直到显示4A0B的时候,游戏胜利。

以此为基础,做个游戏。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

84

积分

注册会员

Rank: 2

发表于 2013-9-8 13:36:21 |显示全部楼层
本帖最后由 Myk_cc 于 2013-9-8 17:10 编辑

写了3个小时才完成,看来光看先生的课和模仿先生的代码是不够的啊,自己写个程序就发现困难重重好在最终还是完成了。。

上代码,由于用的手机流量就不截图了
  1. # !/usr/bin/python

  2. import random

  3. def comparsion(x, y):
  4.         A = 0
  5.         B = 0
  6.         for i in x:
  7.                 for j in y:
  8.                         if i == j:
  9.                                 if x[i] == y[j]:
  10.                                         A += 1
  11.                         else:
  12.                                 if x[i] == y[j]:
  13.                                         B += 1
  14.         return A, B

  15. s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  16. sl = random.sample(s, 4)
  17. Password = {0:'%d' % sl[0], 1:'%d' % sl[1], 2:'%d' % sl[2], 3:'%d' % sl[3]}

  18. while 1:
  19.         guess = raw_input('Please input your code : (4 numbers)')
  20.         a2 = int(guess[0])
  21.         b2 = int(guess[1])
  22.         c2 = int(guess[2])
  23.         d2 = int(guess[3])
  24.         Guess = {0:'%d' % a2, 1:'%d' % b2, 2:'%d' % c2, 3:'%d' % d2}
  25.         
  26.         a, b = comparsion(Password, Guess)
  27.         print '%dA%dB' % (a, b)
  28.         if a == 4:
  29.                 print 'You get it !'
  30.                 break
复制代码
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-9-8 16:02:44 |显示全部楼层
Myk_cc 发表于 2013-9-8 13:36
写了3个小时才完成,看来光看先生的课和模仿先生的代码是不够的啊,自己写个程序就发现困难重重好在最终还 ...

Good Job!
运行了下,挺好的!

敢再进一步吗?
随便说说:比如用pygame做成图形界面?

有人挑战吗?
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

63

积分

注册会员

Rank: 2

发表于 2013-9-12 21:58:08 |显示全部楼层
pygame做图形界面看起来很麻烦啊,连输入框都要自己写么..   想想就觉得头大
  1. import random

  2. pwd_length = 4

  3. def create_pwd():
  4.     numbers = [0,1,2,3,4,5,6,7,8,9]
  5.     pwd = random.sample(numbers,pwd_length)
  6.     return pwd

  7. def check_pwd(pwd_user, pwd_sys):
  8.     nums = str(pwd_user)
  9.     ret = []
  10.     for i in range(pwd_length):
  11.         if int(nums[i]) == pwd_sys[i]:
  12.             ret.append('A')
  13.         elif int(nums[i]) in pwd_sys:
  14.             ret.append('B')
  15.         else:
  16.             ret.append(nums[i])
  17.     return ''.join(ret)

  18. def check_input(pwd):
  19.     if type(pwd) != type(0):
  20.         print('please type numbers')
  21.         return False

  22.     pwd = str(pwd)

  23.     if len(pwd) < pwd_length:
  24.         print('password is too short!')
  25.         return False

  26.     for i in range(len(pwd)):
  27.         if pwd.count(pwd[i]) > 1:
  28.             print('password has repeat number!')
  29.             return False
  30.     return True

  31. def guess(pwd_sys):
  32.     user_input = input('please input password-->')

  33.     if check_input(user_input):
  34.         ret = check_pwd(user_input,pwd_sys)
  35.         if ret == 'AAAA':
  36.             print('bingo!')
  37.         else:
  38.             print(ret)
  39.             guess(pwd_sys)
  40.     else:
  41.         guess(pwd_sys)


  42. pwd_sys = create_pwd()
  43. guess(pwd_sys)

复制代码
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-9-13 01:38:33 |显示全部楼层
test777 发表于 2013-9-12 21:58
pygame做图形界面看起来很麻烦啊,连输入框都要自己写么..   想想就觉得头大 ...

你这个和题目要求不太一样哎,你这个告诉别人哪个数字是b,哪个数字是a了,本来这个游戏只告诉你有几个b,几个a
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-9-13 01:43:53 |显示全部楼层
test777 发表于 2013-9-12 21:58
pygame做图形界面看起来很麻烦啊,连输入框都要自己写么..   想想就觉得头大 ...

发现我当初题目没说清楚,刚改了下
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

63

积分

注册会员

Rank: 2

发表于 2013-9-13 10:01:47 |显示全部楼层
crossin先生 发表于 2013-9-13 01:43
发现我当初题目没说清楚,刚改了下

没玩过这个游戏,看来是我理解错了
回复

使用道具 举报

0

主题

0

好友

134

积分

注册会员

Rank: 2

发表于 2013-9-16 11:33:00 |显示全部楼层
好像能用,就传了。
  1. def the_guess_game(password):
  2.     guess=raw_input('what\'s your guess?:')
  3.     i=0
  4.     guess_result=''
  5.     while guess!=password:
  6.         while i < len(guess):
  7.             if guess[i] in password:
  8.                 if guess[i]==password[i]:
  9.                     guess_result='A'
  10.                 if guess[i]!=password[i]:
  11.                     guess_result+='B'
  12.             i+=1
  13.         right_position=0
  14.         wrong_position=0
  15.         for i in guess_result:
  16.             if i=='A':
  17.                 right_position+=1
  18.             if i=='B':
  19.                 wrong_position+=1
  20.         guess_result=str(right_position)+'A'+str(wrong_position)+'B'
  21.         print 'Your guess is wrong!'
  22.         print 'You got '+guess_result[0]+' exact numbers,'+guess_result[2]+' wrong position numbers but in the password.'
  23.         guess=raw_input('please try again:')
  24.     if guess==password:
  25.         print 'congratulations!you are right!'   


  26. the_guess_game('1234')        
复制代码
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-9-16 15:03:59 |显示全部楼层
scz_000 发表于 2013-9-16 11:33
好像能用,就传了。

还是有些问题的。
  1. if guess[i]==password[i]:
  2.                     guess_result='A'
  3.                 if guess[i]!=password[i]:
  4.                     guess_result+='B'
复制代码
一个是=,一个是+=
i在每次循环后没有重置,前面用来记次数,后面又用来记录a、b
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

134

积分

注册会员

Rank: 2

发表于 2013-9-16 22:03:13 |显示全部楼层
crossin先生 发表于 2013-9-16 15:03
还是有些问题的。一个是=,一个是+=
i在每次循环后没有重置,前面用来记次数,后面又用来记录a、b ...

恩..受教啦!谢谢先生帮忙看!
回复

使用道具 举报

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

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

GMT+8, 2024-3-29 01:33 , Processed in 0.027876 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部