我的计算机科学入门老师给了我们一个骰子猜谜游戏挑战,虽然我已经设法弄清楚了大部分组件,但最后一部分是返回正确的数字(一旦他们猜到了)以及他们花了多少次尝试才能弄清楚。我的代码返回了所有这些,但它不会考虑猜测同一个数字的人是否猜测了两次。有没有办法告诉他们,在忽略任何重复数字的情况下,他们花了多少次猜测才找到一个数字?
这是我到目前为止所拥有的代码:
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)发布于 2015-04-02 02:12:31
为了检测重复的猜测,我们必须跟踪所有以前的猜测。
我们只需要知道一个特定的数字以前是否被猜测过-而不是它出现了多少次。
这是使用set的最佳位置(请参阅Python docs)。
从一个空集开始(而不是从guess_number = 1开始),然后将每个猜测添加到这个集合中。
一旦这个人猜对了,你就可以检查集合的大小-这是猜测的次数,忽略重复项。
发布于 2015-04-02 02:26:30
我建议使用列表来追加猜测。我这样修改了你的代码(在我的例子中是Python 3):
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)))如果你想检查输入是整数还是在你的范围内,你可以看看下面的代码:
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)))发布于 2015-04-02 02:41:39
您还可以将guess_number变量移到if语句之外,这样:
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)https://stackoverflow.com/questions/29397736
复制相似问题