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

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生

猜密码游戏

[复制链接]

0

主题

1

好友

132

积分

注册会员

Rank: 2

发表于 2013-9-25 17:12:33 |显示全部楼层
本帖最后由 aresli 于 2013-9-25 17:28 编辑
  1. # -*- coding: utf-8 -*-

  2. import random

  3. def create_password():
  4.     L = [0,1,2,3,4,5,6,7,8,9]
  5.     password_length = 4
  6.     passowrd = ''
  7.     i = 0
  8.     while i < password_length:
  9.         l = random.choice(L)
  10.         #print l
  11.         passowrd += str(l)
  12.         L.remove(l)
  13.         #print L
  14.         i += 1
  15.                 return passowrd
  16.         
  17. password = create_password()
  18. print '悄悄告诉你答案是: ' + password

  19. def guess(password):
  20.     you_input = raw_input('请输入4位存数字,不能重复: ')

  21.     if you_input == password:
  22.         print "Bingo"
  23.     else:
  24.         #print "Opoo.."
  25.         right_number_right_position = 0
  26.         right_number_wrong_position = 0
  27.         i = 0
  28.         while i < 4:
  29.             if you_input[i] in password:
  30.                 if you_input[i] == password[i]:
  31.                     right_number_right_position += 1
  32.                 else:
  33.                     right_number_wrong_position += 1
  34.             i += 1
  35.         print str(right_number_right_position) + 'A' + str(right_number_wrong_position) + 'B'
  36.         guess(password)

  37. guess(password)

  38. # vim:et:ts=4:sw=4:
复制代码
测了几次,好像应该是对的!
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-9-25 20:29:24 |显示全部楼层
aresli 发表于 2013-9-25 17:12
测了几次,好像应该是对的!

蛮好的。应该是对的

第17行可能是你复制到网页的时候缩进出了问题吧

另外,你password拼成了passowrd,但你全部都拼错了,所以就没有问题了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

1

好友

132

积分

注册会员

Rank: 2

发表于 2013-9-25 23:25:39 |显示全部楼层
crossin先生 发表于 2013-9-25 20:29
蛮好的。应该是对的

第17行可能是你复制到网页的时候缩进出了问题吧

这个拼写错的问题真是。。。。。
回复

使用道具 举报

0

主题

0

好友

134

积分

注册会员

Rank: 2

发表于 2013-10-1 12:41:08 |显示全部楼层
  1. # -*- coding: cp936 -*-
  2. from random import randint,choice
  3. def produce_password():
  4.     pw=['1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
  5.     ra=randint(0,9)
  6.     password=''
  7.     for i in range(0,ra):
  8.         i=choice(pw)
  9.         password+=i
  10.     return password
  11. def the_guess_game(password,t_times,best_score,t_guess):
  12.     print password
  13.     guess=raw_input('请输入你所猜的密码,密码由小写字母和数字组成:')
  14.     this_guess=0
  15.     guess_result=''
  16.     while guess!=password:
  17.         if len(guess)==len(password):
  18.             for i in range(0,len(guess)):
  19.                 if guess[i] in password:
  20.                     if guess[i]==password[i]:
  21.                         guess_result+='A'
  22.                     if guess[i]!=password[i]:
  23.                         guess_result+='B'
  24.         if len(guess)<len(password):
  25.             for i in range(0,len(guess)):
  26.                 if guess[i] in password[:len(guess)]:
  27.                     if guess[i]==password[i]:
  28.                         guess_result+='A'
  29.                     if guess[i]!=password[i]:
  30.                         guess_result+='B'
  31.                 if guess[i] in password[len(guess):]:
  32.                         guess_result+='B'
  33.         if len(guess)>len(password):
  34.             for i in range(0,len(password)):
  35.                 if guess[i] in password:
  36.                     if guess[i]==password[i]:
  37.                         guess_result+='A'
  38.                     if guess[i]!=password[i]:
  39.                         guess_result+='B'
  40.             for i in range(len(password),len(guess)):
  41.                 if guess[i] in password:
  42.                     guess_result+='B'
  43.         right_position=0
  44.         wrong_position=0
  45.         for j in guess_result:
  46.             if j=='A':
  47.                 right_position+=1
  48.             if j=='B':
  49.                 wrong_position+=1
  50.         guess_result=str(right_position)+'A'+str(wrong_position)+'B'
  51.         print '猜错了!'
  52.         print '你所猜的密码有'+guess_result[0]+'位出现在了准确位置.'+'另外,有'+guess_result[2]+'位字符出现在了密码里,但是位置不准确。'
  53.         t_guess+=1
  54.         guess=raw_input('请再试一次:')
  55.         guess_result=''
  56.         this_guess+=1
  57.     if guess==password:
  58.         print '恭喜你,破解了密码!!!'
  59.         t_guess+=1
  60.         this_guess+=1
  61.         t_times+=1
  62.         raw_input('')
  63.     if best_score==0:
  64.         best_score=this_guess
  65.     elif best_score!=0 and this_guess<best_score:
  66.         best_score=this_guess
  67.     return t_times,best_score,t_guess


  68. s=open('c:\Users\User\Desktop\python\codeguess\score.txt')
  69. score=s.readlines()
  70. s.close()
  71. dic={}
  72. f=[]
  73. for i in score:
  74.     f.append(i[:-1])
  75. for j in f:
  76.     p=j.split()
  77.     dic[p[0]]=p[1:]
  78. name=raw_input('欢迎,这是一个猜密码游戏,请输出你的名字,以记录成绩:\n')
  79. score=dic.get(name)
  80. if score==None:
  81.     score=[0,0,0]
  82. t_times=int(score[0])
  83. best_score=int(score[1])
  84. t_guess=int(score[2])
  85. if t_guess>0:
  86.     print '%s,你一共玩了 %d 次游戏,最好的成绩是尝试 %d 次就破解了密码,你平均每次破解密码所用的次数是 %d 次'%(name,t_times,best_score,t_guess)
  87. if t_guess==0 and t_times==0 and best_score==0:
  88.     print '欢迎第一次玩!'
  89. password=produce_password()
  90. a,b,c=the_guess_game(password,t_times,best_score,t_guess)
  91. dic[name]=[str(a),str(b),str(c)]
  92. result=''
  93. for k in dic:
  94.     line = k +' '+ ' '.join(dic[k])+'\n'
  95.     result+=line

  96. n=open('c:\Users\User\Desktop\python\codeguess\score.txt','w')
  97. n.write(result)
  98. n.close()




复制代码
之前做的不完善,没有随机生成密码,输入长度不对好像会有问题,也没有记录成绩。
这次重新改了哈,不过没有难度设置,学图形库再做个图形界面!!
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-10-2 00:51:21 |显示全部楼层
scz_000 发表于 2013-10-1 12:41
之前做的不完善,没有随机生成密码,输入长度不对好像会有问题,也没有记录成绩。
这次重新改了哈,不过没 ...

期待图形界面
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

发表于 2013-10-13 13:05:39 |显示全部楼层
先打个酱油,学习一下老师的基础课程,我再来做这个小程序
回复

使用道具 举报

0

主题

0

好友

66

积分

注册会员

Rank: 2

发表于 2013-10-19 15:08:00 |显示全部楼层
本帖最后由 TongShan 于 2013-10-19 15:09 编辑
Myk_cc 发表于 2013-9-8 13:36
写了3个小时才完成,看来光看先生的课和模仿先生的代码是不够的啊,自己写个程序就发现困难重重好在最终还 ...

为什么这个代码:号之后都是空8个格的?我全部改成空4个格之后,程序就不能正常运行了,以下是运行的结果:
please input you code4 numbers)1245
0A0B
please input you code4 numbers)6789
0A0B
please input you code4 numbers)1234               
0A0B
please input you code4 numbers)5678
8A0B
please input you code4 numbers)1234
0A0B
please input you code4 numbers)5678
8A0B
please input you code4 numbers)9012     
4A0B
You get it!

回复

使用道具 举报

0

主题

0

好友

66

积分

注册会员

Rank: 2

发表于 2013-10-19 15:15:39 |显示全部楼层
TongShan 发表于 2013-10-19 15:08
为什么这个代码:号之后都是空8个格的?我全部改成空4个格之后,程序就不能正常运行了,以下是运行的结果 ...

发现问题了,else的多空了4个格
回复

使用道具 举报

0

主题

0

好友

4

积分

新手上路

Rank: 1

发表于 2014-6-4 19:56:49 |显示全部楼层
试试自己写一个
回复

使用道具 举报

1

主题

0

好友

50

积分

注册会员

Rank: 2

发表于 2014-6-21 18:15:03 |显示全部楼层
  1. #!/usr/bin/env python
  2. #coding:UTF-8

  3. from random import randint

  4. print '*'*6+'猜密码游戏'+'*'*16
  5. print '*'*6+'密码由0-9组成且不重复'+'*'*6
  6. password=[]
  7. pw=''
  8. A=0
  9. B=0
  10. i=1
  11. while i<=4:
  12.     rand=randint(0,9)
  13.     if rand not in password:
  14.         password.append(rand)
  15.         pw+=str(rand)
  16.         i+=1
  17. guess=raw_input('输入你猜的密码\nGuess=')
  18. guess_list=[]
  19. for s in guess:
  20.     guess_list.append(int(s))
  21. i=0
  22. while i<4:
  23.     if password[i]==guess_list[i]:
  24.         A+=1
  25.     elif password[i] in guess_list:
  26.         B+=1
  27.     i+=1

  28. print '正确密码:'.decode('utf8')+'%s' %(int(pw))
  29. print 'Result:%dA%dB' %(A,B)
复制代码
回复

使用道具 举报

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

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

GMT+8, 2024-4-16 13:06 , Processed in 0.019112 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部