美文网首页
python3_1A2B猜数字游戏

python3_1A2B猜数字游戏

作者: xyb_python | 来源:发表于2020-05-20 11:32 被阅读0次

写了三版解决了所有的bug,二话不说先放代码:

# -*- coding: utf-8 -*-

import random

class GuessGame:

    def __init__(self):  # 类似于C++中的默认构造函数

        self.count = 0  # 用户猜测的次数

        self.user_nums = []  # 用户猜测的数字

        self.sys_nums = ''  # 系统生成的数字

        self.user_results = []  # 用户猜测的结果

        self.is_win = False  # 最后是否猜出来

    def print_rules(self):  # 打印出游戏规则

        rules = u"""

由系统随机生成不重复的四位数字,用户猜,之后系统进行提示。

A代表数字正确位置正确个数,

B代表数字正确位置错误个数,

如正确答案为5234,而猜的人猜5346,则是1A2B,

接着猜的人根据出题人的几A几B继续猜,直到猜中(即4A0B)为止。

"""

        print(rules)

    def random_nums(self):  # 生成随机四位数

        num_list = range(0, 9)

        ran_nums = random.sample(num_list, 4)

        for i in range(4):

            self.sys_nums = self.sys_nums + str(ran_nums[i])

            # print(self.sys_nums)

    def is_four_len(self, num):  # 判断是否是4位数

        return len(num)-4

    def is_all_nums(self, num):  # 判断是否都是数字

        return num.isdigit()

    def is_same_num(self, num):  # 判断是否存在重复

        if len(num) == len(set(num)):

            return True

        else:

            return False

    def num_input(self):  # 接受用户输入的数字

        self.count += 1

        while True:

            num = input("请输入一个四位数:")

            if self.is_four_len(num) != 0:

                print("输入有误,只能四位!")

                continue

            elif not self.is_all_nums(num):

                print("输入有误,不能含有字符!")

            elif not self.is_same_num(num):

                print("输入有误,不能有重复!")

            else:

                self.user_nums.append(num)

                return num

    def num_judge(self, sys_nums, user_nums):  # 判断%A%B

        countA = 0

        countB = 0

        for i in range(4):

            if user_nums[i] in sys_nums:

                if i == sys_nums.find(user_nums[i]):

                    countA += 1

                else:

                    countB += 1

        result = "%dA%dB" % (countA, countB)

        self.user_results.append(result)

        if countA == 4:

            self.is_win = True

    def show_result(self, user_nums, result):  # 显示结果

        print("_"*30)

        for i in range(self.count):

            print('(%d)%s||%s' % (i+1, user_nums[i], result[i]))

            print("_"*30)

            if self.is_win:

                print("总次数: %d times" % self.count)

                print("恭喜,你猜对了!")

    def run(self):  # 运行

        self.print_rules()

        self.random_nums()

        while not self.is_win:

            num = self.num_input()

            self.num_judge(self.sys_nums, num)

            self.show_result(self.user_nums, self.user_results)

def main():  # 主函数

    game = GuessGame()

    game.run()

if __name__ == '__main__':

    main()

然后说一下没弄明白的bug吧,在判断是否存在重复板块,之前只用循环遍历写的,发现有很多重复的数字并不能识别出来,之前的代码是这样的:

def is_same_num(self, num):  # 判断是否存在重复

    for i in range(len(num)):

        if num.count(num[i]) == 1:

            return True

    else:

            return False

不明白这样的写法哪里出了问题,我检查了一下这样查询重复元素是没有问题的,但是在这个class里就不是很有效了,希望有感兴趣的可以一起讨论,也欢迎大佬指点一二。

相关文章

  • python3_1A2B猜数字游戏

    写了三版解决了所有的bug,二话不说先放代码: # -*- coding: utf-8 -*-import ran...

  • 猜数字游戏

    题目:猜数字游戏(要求:用户有三次机会输入数字,当机会用完和输入正确退出,游戏结束.) 代码: # encodin...

  • 猜数字游戏

    问题 用计算机实现一个随机1~100之间的数字,然后由用户来猜这个数字,根据用户猜测的次数分别给出不同的提示。 模...

  • 猜数字游戏

    1~100之间猜数字游戏,猜错给出相应提示,猜对给出所用次数。源码如下:

  • 猜数字游戏

    // ViewController.swift // 猜数游戏 // // Created by apple...

  • 猜数字游戏

    你正在和你的朋友玩 [猜数字(Bulls and Cows)]游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给...

  • 猜数字游戏

    import random # 生成一个随机数 num = random.randint(100,999) pri...

  • 猜数字游戏

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/bulls-...

  • Day6-作业

    猜数字游戏 学生系统

  • 374-猜数字大小

    猜数字大小 题目 我们正在玩一个猜数字游戏。 游戏规则如下:我从1到n选择一个数字。 你需要猜我选择了哪个数字。每...

网友评论

      本文标题:python3_1A2B猜数字游戏

      本文链接:https://www.haomeiwen.com/subject/shygohtx.html