python实现猜数字游戏(无重复数字)示例分享

1193次阅读  |  发布于5年以前

复制代码 代码如下:

import time, random

class GuessNum:
def init(self):
self._num = ''
self.input_num = []
self.count = 1 #猜对所用次数
self.sec = 0 #猜对所用时间
self._generate_num()

def _generate_num(self):                        #产生不重复的四个数字  
    seq_zton = list(range(10))  
    for i in range(0, 4):  
        a = str(random.choice(seq_zton))   #选出一个数字  
        self._num += a  
        seq_zton.remove(int(a))                 #注意a的类型  

    self.sec = time.clock()                          #开始计时  

def check_answer(self):  
    return self._num

def check_input(self):  
    num_pos, num_value = 0, 0               #位置对和数值对的分别的个数  
    tmp = input("Please input the number you guess(No repetition),or 'c' to check the answer:")  
    if tmp == 'c':  
        print(self.check_answer())  
        tof = self.check_input()  
        return tof  
    elif not tmp.isalnum or not len(tmp) == 4:  
        print("Wrong format!")  
        tof = self.check_input()                #需要优化  
        return tof  
    self.input_num = list(tmp)  
    lst_temp = list(self._num)  
    if self.input_num == lst_temp:          #猜对  
        self.prt_vic()  
        return True  
    for i in lst_temp:  
        if i in self.input_num:  
            if lst_temp.index(i) == self.input_num.index(i):        #位置也相同  
                num_pos += 1  
                num_value += 1  
            else:  
                num_value += 1

    self.prt_state(num_pos, num_value)  
    self.count += 1  
    return False

def prt_state(self, num_pos, num_value):  
    print("You've got %d numbers with the right position and %d numbers with the right value only" % (num_pos, num_value))  

def prt_vic(self):  
    t = time.clock()  
    self.sec = t - self.sec  
    print("Congratulations!You have successfully got the right number!")  
    print("%d times and %.2f sec in total to get the right answer" % (self.count, self.sec))

gn = GuessNum()
while True:
ss = gn.check_input()
if ss:
b = input("Continue? y/n:")
if b == 'n':
break
else:
gn = GuessNum()
continue

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8