改变循环条件以重新利用数字猜谜游戏

时间:2015-03-17 13:24:21

标签: python

我是一名具有Visual Basic for Applications经验的新程序员,最近更改为python。

我正在开展数字猜谜游戏,到目前为止,进展一直很好。用户在程序中输入4位数字。程序还会生成一个4位数字,程序返回Ys或Ns以显示是否有任何数字。 EG 1357作为用户猜测,1358作为程序编号显示YYYN作为输出。

我试图通过显示H或L来重新编写程序以使用户更简单,以表明他们需要猜测更高或更低的IF数字猜测是不正确的。如果它是正确的,则应按正常显示Y.我知道它是我需要更改的循环中的一个条件或我需要添加的另一个循环但是我很难看到在哪里添加它以及如何编写它。有人有解决方案吗?

以下是程序部分代码的一部分,它返回猜测的结果。

lives = 10

while lives > 0:
    number = input("Enter your guess: ")

    letter = ''
    for i in range(len(numToGuess)):
        letter += 'Y' if int(number[i]) == numToGuess[i] else 'N'


    if letter == 'Y' * len(numToGuess):
        print("Good job!")
        break

    print(letter)

    lives -= 1
    else:
        print("Game over! You used up all of your tries.")

有人有解决方案吗?

3 个答案:

答案 0 :(得分:1)

我更喜欢使用列表。这意味着,我将正确答案和用户猜测转换为单独的数字保存在两个列表中,然后进行比较。

让我们说正确的答案是' 1234':

lives = 10

correct_answer = 1234

correct_answer = [int(char) for char in str(correct_answer)]


while lives > 0:
    letter = ''

    number = input("Enter your guess: ")
    number = [int(char) for char in str(number)]

    if number == correct_answer:
        print("Correct!")
        break

    for i in range(len(correct_answer)):
        if correct_answer[i] == number[i]:
            letter += 'Y'
        elif correct_answer[i] > number[i]:
                letter += 'H'
        else:
            letter += 'L'
    print("Your guess is wrong: ", letter)

    lives -= 1


print("Game over!")

现在举例:

Enter your guess: 1111
Your guess is wrong:  YHHH
Enter your guess: 1235
Your guess is wrong:  YYYL
Enter your guess: 1234
Correct!
Game over!
>>> 

答案 1 :(得分:0)

您可以使用zip功能来比较字母:

>>> a='1357'
>>> b='1358'
>>> l=[]
>>> for i,j in zip(a,b):
...   if i==j :l.append('Y')
...   else :l.append('N')
... 
>>> ''.join(l)
'YYYN'

要检查答案,您可以在all中使用生成器表达式:

>>> all(i=='Y' for i in l)
False

答案 2 :(得分:0)

您无需更改循环条件。只需更改if表达式的逻辑。

letter = ''
for i in range(len(numToGuess)):
    if int(number[i]) == numToGuess[i]:
        letter += 'Y'
    elif int(number[i]) > numToGuess[i]:
        letter += 'H'
    else:
        letter += 'L'

或者,在一行中:

letter = ''
for i in range(len(numToGuess)):
    letter += 'Y' if int(number[i]) == numToGuess[i] else ('H' if int(number[i]) > numToGuess[i] else 'L')