python作业,猜数游戏
编一个程序,用户先输入一个没有重复数字的三位数,比如说478,让程序来猜,每次猜完后,用户给出反馈,有几个数字正确,几个数字正确并且在正确的位置,直到程序猜对或者超过最大...
编一个程序,用户先输入一个没有重复数字的三位数,比如说478,让程序来猜,每次猜完后,用户给出反馈,有几个数字正确,几个数字正确并且在正确的位置,直到程序猜对或者超过最大尝试次数。执行出来的结果如图。求大佬教,这个程序的大体结构是怎样的,怎么让程序随机产生没有重复数字的三位数,怎么根据用户的反馈来进行下一轮猜测。高悬赏!
展开
1个回答
展开全部
# 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.')
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询