Guest User

Untitled

a guest
May 26th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. #!/usr/bin/python
  2. # ?A?B猜數字遊戲
  3. # 可選擇一到九位數來進行猜數字,數字可重複
  4.  
  5. from tkinter import Tk, Label, Entry, Spinbox, Button, messagebox, StringVar
  6. from random import randint
  7.  
  8. answer = ""
  9. playerGuess = ""
  10. nOfDigits = 1
  11.  
  12. '''
  13. 產生n位數的數字,例如 n = 3 會輸出 100 ~ 999 三位數的數值。
  14. '''
  15. def nDigitNumber(n):
  16. start = 10**(n-1)
  17. end = (10**n)-1
  18. return str( randint(start, end) )
  19.  
  20. def newGame():
  21. print("newGame")
  22. global nOfDigits
  23. nOfDigits = int( digitsSpinBox.get() )
  24. global answer
  25. answer = nDigitNumber(nOfDigits)
  26. print( answer )
  27.  
  28. def checkUserGuess():
  29. global playerGuess
  30. global answer
  31. global nOfDigits
  32. playerGuess = guessNum.get()
  33. if len(playerGuess) == nOfDigits:
  34. a = calA(playerGuess)
  35. b = calB(playerGuess)
  36. showResult(a, b)
  37. else:
  38. messagebox.showinfo("提醒", "位數要為" + str(nOfDigits) )
  39.  
  40.  
  41. def calA(guess):
  42. global answer
  43. a = 0
  44. for i in range( len(answer) ):
  45. if guess[i] == answer[i]:
  46. a = a + 1
  47.  
  48. return a
  49.  
  50. def calB(guess):
  51. global answer
  52. b = 0
  53. k = len(answer)
  54. for i in range(k):
  55. for j in range(k):
  56. if(i != j):
  57. if guess[i] == answer[j]:
  58. b = b + 1
  59. return b
  60.  
  61. def showResult(a, b):
  62. if a == nOfDigits:
  63. result = "You Win"
  64. else:
  65. result = "結果:" + str(a) + "A" + str(b) + "B"
  66.  
  67. resultLabel.config(text = result)
  68.  
  69. mainWin = Tk()
  70.  
  71. # 視窗標題
  72. mainWin.title("雲林SONG:猜數字")
  73.  
  74. # 視窗大小
  75. mainWin.geometry("300x100")
  76.  
  77. # 建立猜數字的GUI元件
  78. digitsLabel = Label( mainWin, text = "幾位數:" )
  79. guessLabel = Label( mainWin, text = "要猜的數字:" )
  80. resultLabel = Label( mainWin, text = "結果:" )
  81. var = StringVar(mainWin)
  82. var.set(str(randint(1, 9)))
  83. digitsSpinBox = Spinbox( mainWin, from_ = 1, to_ = 10, textvariable=var, command = newGame )
  84. guessNum = Entry( mainWin )
  85. guessBtn = Button( mainWin, text = "Guess", command = checkUserGuess )
  86. newGameBtn = Button( mainWin, text = "New Game", command = newGame )
  87.  
  88. # 版面配置
  89. digitsLabel.grid(row=0, column=0)
  90. digitsSpinBox.grid(row=0, column=1)
  91. guessLabel.grid(row=1, column=0)
  92. resultLabel.grid(row=2, column=0)
  93. guessNum.grid(row=1, column=1)
  94. guessBtn.grid(row=1, column=2)
  95. newGameBtn.grid(row=2, column=2)
  96.  
  97. newGame()
  98. mainWin.mainloop()
Add Comment
Please, Sign In to add comment