首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python竞猜游戏,计算竞猜次数

Python竞猜游戏,计算竞猜次数
EN

Stack Overflow用户
提问于 2015-04-02 02:05:48
回答 3查看 10.9K关注 0票数 1

我的计算机科学入门老师给了我们一个骰子猜谜游戏挑战,虽然我已经设法弄清楚了大部分组件,但最后一部分是返回正确的数字(一旦他们猜到了)以及他们花了多少次尝试才能弄清楚。我的代码返回了所有这些,但它不会考虑猜测同一个数字的人是否猜测了两次。有没有办法告诉他们,在忽略任何重复数字的情况下,他们花了多少次猜测才找到一个数字?

这是我到目前为止所拥有的代码:

代码语言:javascript
复制
import random

give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")
guess_number = 1

dice = random.randint(1,6)
while give_number != dice:
    if give_number > dice:
        give_number = input("Sorry, that answer is too high! Try again!\n ")
        guess_number = guess_number +1
    if give_number < dice:
        give_number = input("Sorry, that answer is too low! Try again!\n ")
        guess_number = guess_number +1

print "Congratulations, you were right, the answer was {}! It took you {} tries.".format(dice, guess_number)
EN

回答 3

Stack Overflow用户

发布于 2015-04-02 02:12:31

为了检测重复的猜测,我们必须跟踪所有以前的猜测。

我们只需要知道一个特定的数字以前是否被猜测过-而不是它出现了多少次。

这是使用set的最佳位置(请参阅Python docs)。

从一个空集开始(而不是从guess_number = 1开始),然后将每个猜测添加到这个集合中。

一旦这个人猜对了,你就可以检查集合的大小-这是猜测的次数,忽略重复项。

票数 1
EN

Stack Overflow用户

发布于 2015-04-02 02:26:30

我建议使用列表来追加猜测。我这样修改了你的代码(在我的例子中是Python 3):

代码语言:javascript
复制
import random

give_number = int(input("We will roll a 6 sided dice. What do you think the number will be?\n "))
guess_number = 1
guessList = []
guessList.append(give_number)

dice = random.randint(1,6)
while give_number != dice:
    if give_number > dice:
        give_number = int(input("Sorry, that answer is too high! Try again!\n "))
        #guess_number = guess_number + 1
        if give_number not in guessList:
            guessList.append(give_number)
    if give_number < dice:
        give_number = int(input("Sorry, that answer is too low! Try again!\n "))
        #guess_number = guess_number + 1
        if give_number not in guessList:
            guessList.append(give_number)

if give_number not in guessList:
    guessList.append(give_number)
print ("Congratulations, you were right, the answer was {}! It took you {} tries.".format(dice, len(guessList)))

如果你想检查输入是整数还是在你的范围内,你可以看看下面的代码:

代码语言:javascript
复制
import random

def inputIsInt(inpStr): # checks if the input is an integer in range (1, 7).
    try:
        if int(inpStr) in range(1, 7):
            return True
        else:
            return False
    except ValueError:
        return False

give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")
while not inputIsInt(give_number):
    print("Sorry, your input is not an integer or out of range")
    give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")

guessList = []
guessList.append(int(give_number))
dice = random.randint(1,6)

while int(give_number) != dice:
    if int(give_number) > dice:
        give_number = input("Sorry, that answer is too high! Try again!\n ")
        while not inputIsInt(give_number):
            print("Sorry, your input is not an integer or out of range")
            give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")
        if int(give_number) not in guessList:
            guessList.append(int(give_number))
    if int(give_number) < dice:
        give_number = input("Sorry, that answer is too low! Try again!\n ")
        while not inputIsInt(give_number):
            print("Sorry, your input is not an integer or out of range")
            give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")
        if int(give_number) not in guessList:
            guessList.append(int(give_number))

if int(give_number) not in guessList:
    guessList.append(int(give_number))
print ("Congratulations, you were right, the answer was {}! It took you {} tries.".format(dice, len(guessList)))
票数 1
EN

Stack Overflow用户

发布于 2015-04-02 02:41:39

您还可以将guess_number变量移到if语句之外,这样:

代码语言:javascript
复制
    import random

    give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")
    guess_number = 0

    dice = random.randint(1,6)
    while give_number != dice:
        guess_number = guess_number + 1
        if give_number > dice:
            give_number = input("Sorry, that answer is too high! Try again!\n ")
            #guess_number = guess_number +1
        if give_number < dice:
            give_number = input("Sorry, that answer is too low! Try again!\n ")
            #guess_number = guess_number +1

    print "Congratulations, you were right, the answer was {}! It took you {} tries.".format(dice,guess_number)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29397736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档