2014-10-26 104 views
-1

这款游戏让用户猜测一个4位数的数字,并在用户猜测显示'Y'后给出反馈,如果用户获得正确的数字,并显示'H',如果猜测最多比数字高3倍,显然与在数字以下至多3位显示“L”相反。但这是我的问题,我不能让它显示'H'和'L'在3以上或以下!任何帮助表示赞赏..代码是低于我已经尝试过的地方。小于或超过一定数量

from random import randint 
guessesTaken = 0 
randomNumber = [str(randint(1, 9)) for _ in range(4)] # create list of random nums 
while guessesTaken < 10: 
    guesses = list(input("Guess Number: ")) # create list of four digits 
    check = "".join(["Y" if a==b else "H" if int(a)< 3 int(b) else "L" for a, b in zip(guesses,randomNumber)]) 
    if check == guesses: # if check has four Y's we have a correct guess 
     print("Congratulations, you are correct, it took you", guessesTaken, "guesses.") 
     break 
    else: 
     guessesTaken += 1 # else increment guess count and ask again 
     print(check) 
    if guessesTaken == 10: 
     print("You lose") 
+0

而不是在一行中做'check',为什么不尝试写出多行代码,'a,b in zip(...):'等等。然后我想你会发现更多的错误容易。 – darthbith 2014-10-26 16:13:29

+0

我做到了,但我是新来的蟒蛇,并没有看到我出错的地方。我不能让它做到3或以下 – paxyshack 2014-10-26 16:23:16

回答

0

修复了这一点,请参阅评论。

from random import randint 
guessesTaken = 1 # repaired that. you cannot guess correctly on "0 guesses". 
randomNumber = [str(randint(1, 9)) for _ in range(4)] 
while guessesTaken < 10: 
     guesses = list(input("Guess Number: ")) 
     #repaired check cases 
     check = "".join(["Y" if a == b else "L" if int(a) < int(b) and int(a)+3 >= int(b) else "H" if int(a) > int(b) and int(a)-3 <= int(b) else '?' for a, b in zip(guesses,randomNumber)]) 
     if check == "YYYY": # repaired this check 
      print("Congratulations, you are correct, it took you", guessesTaken, "guesses.") 
      break 
     else: 
      guessesTaken += 1 
      print(check) 
else: # loop is exhausted 
    print("You lose") 


Guess Number: 4444 
?HLH 
Guess Number: 2262 
?LYL 
Guess Number: 7363 
LYYY 
Guess Number: 8363 
LYYY 
Guess Number: 9363 
Congratulations, you are correct, it took you 5 guesses. 

虽然它的工作,这样一个长长的列表理解是一个PITA来编写和维护。 更好地保持你的语句简短并重构常见的东西。

相关问题