Python 猜數字遊戲

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

之前發過用Eclipse 開發 Android 二到九位數的 ?A?B猜數字遊戲,當時的程式碼更新為 Android Studio 版本,弄出如下圖的功能:



而本篇要用 Python + Tkinter 來實作,UI的Layout設計方式如下:
Label1SpinBox1
Label2Entry1Button1
Label3Button2

程式實際執行畫面如下:


程式碼:
#!/usr/bin/python
# ?A?B猜數字遊戲
# 可選擇一到九位數來進行猜數字,數字可重複
from tkinter import Tk, Label, Entry, Spinbox, Button, messagebox, StringVar
from random import randint
answer = ""
playerGuess = ""
nOfDigits = 1
'''
產生n位數的數字,例如 n = 3 會輸出 100 ~ 999 三位數的數值。
'''
def nDigitNumber(n):
start = 10**(n-1)
end = (10**n)-1
return str( randint(start, end) )
def newGame():
print("newGame")
global nOfDigits
nOfDigits = int( digitsSpinBox.get() )
global answer
answer = nDigitNumber(nOfDigits)
print( answer )
def checkUserGuess():
global playerGuess
global answer
global nOfDigits
playerGuess = guessNum.get()
if len(playerGuess) == nOfDigits:
a = calA(playerGuess)
b = calB(playerGuess)
showResult(a, b)
else:
messagebox.showinfo("提醒", "位數要為" + str(nOfDigits) )
def calA(guess):
global answer
a = 0
for i in range( len(answer) ):
if guess[i] == answer[i]:
a = a + 1
return a
def calB(guess):
global answer
b = 0
k = len(answer)
for i in range(k):
for j in range(k):
if(i != j):
if guess[i] == answer[j]:
b = b + 1
return b
def showResult(a, b):
if a == nOfDigits:
result = "You Win"
else:
result = "結果:" + str(a) + "A" + str(b) + "B"
resultLabel.config(text = result)
mainWin = Tk()
# 視窗標題
mainWin.title("雲林SONG:猜數字")
# 視窗大小
mainWin.geometry("300x100")
# 建立猜數字的GUI元件
digitsLabel = Label( mainWin, text = "幾位數:" )
guessLabel = Label( mainWin, text = "要猜的數字:" )
resultLabel = Label( mainWin, text = "結果:" )
var = StringVar(mainWin)
var.set(str(randint(1, 9)))
digitsSpinBox = Spinbox( mainWin, from_ = 1, to_ = 10, textvariable=var, command = newGame )
guessNum = Entry( mainWin )
guessBtn = Button( mainWin, text = "Guess", command = checkUserGuess )
newGameBtn = Button( mainWin, text = "New Game", command = newGame )
# 版面配置
digitsLabel.grid(row=0, column=0)
digitsSpinBox.grid(row=0, column=1)
guessLabel.grid(row=1, column=0)
resultLabel.grid(row=2, column=0)
guessNum.grid(row=1, column=1)
guessBtn.grid(row=1, column=2)
newGameBtn.grid(row=2, column=2)
newGame()
mainWin.mainloop()
view raw PyNumGuess.py hosted with ❤ by GitHub

此版本為數字可重複,那要如何改成數字不重複的版本呢?

沒有留言: