python作业,猜数游戏

编一个程序,用户先输入一个没有重复数字的三位数,比如说478,让程序来猜,每次猜完后,用户给出反馈,有几个数字正确,几个数字正确并且在正确的位置,直到程序猜对或者超过最大... 编一个程序,用户先输入一个没有重复数字的三位数,比如说478,让程序来猜,每次猜完后,用户给出反馈,有几个数字正确,几个数字正确并且在正确的位置,直到程序猜对或者超过最大尝试次数。执行出来的结果如图。求大佬教,这个程序的大体结构是怎样的,怎么让程序随机产生没有重复数字的三位数,怎么根据用户的反馈来进行下一轮猜测。高悬赏! 展开
 我来答
waketzheng
2018-03-10 · TA获得超过644个赞
知道小有建树答主
回答量:566
采纳率:63%
帮助的人:149万
展开全部
# python 3.6+
from random import randint, choice


MAX = 5


def rd(h=3, repeat=False):
    a = randint(1, 9)
    choices = [i for i in range(0, 10) if i!=a]
    ns = [a]
    for i in range(h-1):
        n = choice(choices)
        ns.append(n)
        choices = [i for i in choices if i!=n or repeat]
    return ''.join([str(i) for i in ns])


def main():
    answer = input('Please input a number: ')
    for i in range(MAX):
        n = rd()
        q = input(f'{i+1}. Is {n} the right number?[y/(n)] ')
        if q.strip() == 'y':
            print('Done!')
            return
    print('Guess time reach limit. Exit!')


if __name__ == '__main__':
    main()
追问
def rd() 的部分看懂了,那怎么根据用户的反馈来进行猜数的调整呢?比如对于数字154,程序猜456,用户会反馈,2个数字correct,1个数字exact,然后程序需要根据这些信息来进行下一轮猜测。好复杂。。。非常感谢!
追答
answer = 456
n = input('Enter a number: ')
correct = len([i for i in n if i in str(answer)])
exact = len([a for a, b in zip(n, str(answer)) if a==b])
print(f'{correct} correct, {exact} exact.')
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式