【问题标题】:Python guessing game with clues有线索的 Python 猜谜游戏
【发布时间】:2019-07-24 00:17:39
【问题描述】:

这里是 Python(3.7) 初学者。这个猜谜游戏给出了范围线索:

  • Cold
  • Warm
  • Hot

取决于回答玩家的距离。

问题:如何添加额外的3条增量线索:

  • Colder

  • Warmer

  • Hotter

    Colder 用于下一个猜测距离答案较远。
    Warmer 用于下一个猜测更接近答案。
    Hotter 用于代替Warmer 如果它在Hot 范围。

第一次猜测会产生范围线索ColdWarmHot

随后的猜测将产生增量线索ColderWarmer/Hotter if,而它们落在与先前猜测相同的范围内。

如果超出范围,将首先产生范围线索ColdWarmHot,然后然后产生ColderWarmer/Hotter而在那个范围内。换句话说,ColdWarmHot 范围线索的优先级高于增量 ColderWarmer/Hotter

print("The secret number is somewhere between 0 and 100. You have 5 guesses.")
user_input = int(input('Make a guess '))

count = 0

while user_input is not 41 and count < 4:
    count = count + 1
    how_close_to_answer = 41 - user_input
    if 5 < how_close_to_answer.__abs__() < 20:
        user_input = int(input(f'Warm. Remaining guesses {5 - count} '))
    elif how_close_to_answer.__abs__() >= 20:
        user_input = int(input(f'Cold. Remaining guesses {5 - count} '))
    else:
        user_input = int(input(f'Hot. Remaining guesses {5 - count} '))


if user_input is not 41:
    print('You Lose!')
else:
    print('You Win!')
    print(f"It took you {count + 1} guesses to get this correct.")

例如(在无限猜测n的情况下):

  1. 玩家猜测 = 10,期望结果'Cold。剩余猜测(n-1)'
  2. 下一个猜测 = 15,期望的结果 'Warmer。剩余猜测(n-2)'
  3. 下一个猜测 = 12,期望结果 'Colder。剩余的猜测(n-3)'
  4. 下一个猜测 = 36,期望的结果 'Hot。剩余猜测(n-4)'
  5. 下一个猜测 = 37,期望的结果 'Hotter。剩余猜测(n-5)'
  6. 下一个猜测 = 30 ,期望的结果 'Warm。剩余猜测(n-6)'

在 4. 示例中 - 数字 36 是 Warmer,而不是之前的 12,但它也在 Hot 范围内,因此给出了 Hot 线索。

在 6. 示例中 - 数字 30 是 Colder,而不是之前的 37,但它也在 Warm 范围内,因此给出了 Warm 线索。

【问题讨论】:

  • 首先要确定您希望这些额外线索如何工作。如果我不得不猜测你想要在你的第一个猜测之后的所有猜测说warmercolderHOT。如果玩家猜到了HOT 猜测,然后在HOT 范围内得到下一个猜测,您的代码应该再次显示HOT 还是warmer / colder 之一?
  • 添加到@Hoog 建议,您可能希望根据他们的猜测是接近还是远离答案。即然后猜测 35,然后 40,“温暖”,然后 38,“更冷”。这样一来,即使他们在同一个乐队中,如果他们从 10 到 15,他们也会变得“温暖”。然后,您可能希望这样做,如果它们在答案的 10% 以内,则表示“热”。
  • 如果猜测落在“冷”范围内,它会首先说“冷”和“暖”/“冷”,而它仍处于“冷”范围。 “温暖”范围也是如此。对于 'Hot' 范围相同,除了 'Hotter'/'Colder' 而不是 'Warmer'/'Colder' 。即 20 ->“冷”,然后 21 ->“暖”,然后 25 ->“暖”,然后 24 ->“冷”,然后 44 ->“热”,然后 43 ->“更热”,然后 45 -> '冷',然后 15 -> '冷'。基本上,范围的名称将首先声明,然后在该范围内进行相对进展。

标签: python


【解决方案1】:

我将num 作为随机生成的数字,而不是41

import random 

print("The secret number is somewhere between 0 and 100. You have 5 guesses.")
user_input = int(input('Make a guess '))

count = 0
num = random.randint(1,101)

while user_input is not num and count < 4:
    #uncomment the line below to see random generated number
    #print('Generated Random Number= '+str(num))
    count = count + 1
    how_close_to_answer = num - user_input

    if abs(how_close_to_answer)>5 and abs(how_close_to_answer) <20 :
        user_input = int(input(f'Warm. Remaining guesses {5 - count} '))
    elif abs(how_close_to_answer) >= 20 :
        user_input = int(input(f'Cold. Remaining guesses {5 - count} '))
    else:
        user_input = int(input(f'Hot. Remaining guesses {5 - count} '))


if user_input is not num:
    print('You Lose!')
else:
    print('You Win!')
    print(f"It took you {count + 1} guesses to get this correct.")

据我了解,上面的程序生成一个随机数,你需要猜测这个数字,

  • 如果您猜到的数字小于或等于5 更接近该随机数的数字,它将告诉您hot
  • 如果它大于5 并且小于20 那么它会告诉你warm
  • 大于20,它会给你cold

希望对你有帮助!!

【讨论】:

  • 这会将 41 更改为随机数,但不会添加 2 条新线索“更冷或更暖”。如果猜测落在“冷”范围内,它会首先说“冷”和“温暖”/“更冷”,而它会停留在“冷”范围内。 “温暖”范围也是如此。对于 'Hot' 范围相同,除了 'Hotter'/'Colder' 而不是 'Warmer'/'Colder' 。即 20 ->“冷”,然后 21 ->“暖”,然后 25 ->“暖”,然后 24 ->“冷”,然后 44 ->“热”,然后 43 ->“更热”,然后 45 -> '冷',然后 15 -> '冷'。基本上,范围的名称将首先声明,然后在该范围内进行相对进展。
【解决方案2】:

这是我能得到的最接近您要求的内容。在我看来,您原始问题上的 cmets 值得一读,但我认为这正是您在问题中所要求的。

print("The secret number is somewhere between 0 and 100. You have 5 guesses.")
user_input = int(input('Make a guess '))

count = 0
last_distance = -1
while user_input is not 41 and count < 4:
    count = count + 1
    how_close_to_answer = (41 - user_input)
    how_close_to_answer = how_close_to_answer.__abs__()
    if how_close_to_answer <= 5 and last_distance > 5:
        user_input = int(input(f'Hot. Remaining guesses {5 - count} '))
    elif last_distance == -1:
        if 5 < how_close_to_answer < 20:
            user_input = int(input(f'Warm. Remaining guesses {5 - count} '))
        elif how_close_to_answer >= 20:
            user_input = int(input(f'Cold. Remaining guesses {5 - count} '))
        elif how_close_to_answer <= 5:
            user_input = int(input(f'Hot. Remaining guesses {5 - count} '))
    else:
        if how_close_to_answer < last_distance:
            if how_close_to_answer <= 5:
                user_input = int(input(f'Hotter. Remaining guesses {5 - count} '))
            else:
                user_input = int(input(f'Warmer. Remaining guesses {5 - count} '))
        elif how_close_to_answer > last_distance:
            user_input = int(input(f'Colder. Remaining guesses {5 - count} '))
    last_distance = how_close_to_answer


if user_input is not 41:
    print('You Lose!')
else:
    print('You Win!')
    print(f"It took you {count + 1} guesses to get this correct.")

希望这对你有帮助

【讨论】:

  • 谢谢,这几乎是完美的解决方案。有2个问题:
  • 第一个 - 当输入在“热”范围内时,如果下一个猜测是“暖”或“冷”,它将停止跟踪。第二:如果连续两次输入相同的数字(从 1 到 35 和从 47 到 100),则循环过早中断并出现“您丢失消息”抱歉双张贴 - 键入时意外按下 ender
  • 如果他们输入相同的数字,你想发生什么,你没有指定。另外,在阅读您的原始问题后,不确定第一个问题是什么。即使在输入处于热范围后,Warmer / Colder 仍然有效(例如,猜测 1 = 40(输出 = 热)猜测 2 = 12(输出 = 更冷)。需要什么?
  • 这是你想要的吗? Guess 1 = 39 (output = Hot), Guess 2 = 40 (output = Hotter) 如果是这样的话,如果猜测的顺序颠倒了怎么办?它仍然只是“更冷”吗(啊,刚刚看到你的另一个回复。似乎唯一的区别是你想要更热的功能。现在编辑)
  • 谢谢,这解决了一切。另一个问题非常小——如果玩家连续两次输入相同的数字,循环会因“你输了!”而中断。在使用剩余猜测之前的消息。通过在第 26 行和第 27 行之间添加 else: user_input = int(input(f'Same. Remaining guesses {5 - count} ')) 来修复它,以解决 how_close_to_answer = last_distance 的情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多