Python 猜數字遊戲

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

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



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

程式實際執行畫面如下:


程式碼:

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

Pygame RPG 遊戲設計:視窗相關

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

本篇文章說明Pygame處理視窗程式相關的API用法,直接以程式碼的註解說明。
import pygame
import os
import sys

# 設定視窗位置
xPos = 100
yPos = 50
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (xPos, yPos)

pygame.init()

# 設定視窗大小
screen_width = 480
screen_height = 480
screen = pygame.display.set_mode((screen_width, screen_height))

# 設定視窗標題
pygame.display.set_caption('YunlinSONG PyGame Screen')

# 設定背景顏色
bgColor = (255, 0, 0)
screen.fill(bgColor)

# 設定Icon
screenIcon = pygame.image.load('tree.ico')
pygame.display.set_icon(screenIcon)

# 更新 Screen
pygame.display.flip()

# 等待接收到關閉視窗的事件訊息
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()

在Pygame中,可以對視窗Screen做的事情都在pygame.display裡https://www.pygame.org/docs/ref/display.html。上述的程式碼裡,可看到要改變式窗的位置時,是設定SDL_VIDEO_WINDOW_POS系統變數,也就是Pygame有些功能沒有提供API。

使用Python解線性代數(Linear Algebra)的問題

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

這裡會使用到NumPy套件,請讀者先行安裝。首先來看看怎麼使用NumPy定義一個矩陣:
# Matrix A
A = np.array(
[
[1, 2, 4],
[5, 3, 6],
[8, 9, 7]
])
# Matrix B
B = np.array(
[
[7, 8, 9],
[6, 5, 4],
[3, 1, 1]
])

上面的程式碼含有兩個矩陣A與B,接著我們可以使用Python的運算子:+, -, *, / ,來對矩陣的元素做加減乘除運算。
# Matrix operations
print("A + B")
print(A + B)
print("A - B")
print(A - B)
print("A * B")
print(A * B)
print("A / B")
print(A / B)

好,那我們先來解個線性方程式(下圖取自Wiki):


{\begin{alignedat}{7}3x&&\;+\;&&2y&&\;-\;&&z&&\;=\;&&1&\\2x&&\;-\;&&2y&&\;+\;&&4z&&\;=\;&&-2&\\-x&&\;+\;&&{\tfrac {1}{2}}y&&\;-\;&&z&&\;=\;&&0&\end{alignedat}}
# Matrix A
A = np.array(
[
[3, 2, -1],
[2, -2, 4],
[-1, 0.5, -1]
])
# Matrix B
B = np.array(
[1, -2, 0]
)
print("Solution:")
print(np.linalg.solve(A, B))

上面的程式碼中的np.linalg.solve(A, B) 就可以幫我們解出這個線性方程式的解,是不是很方便呢?除了solve這個方便的function之外,NumPy還提供了很多常用的線性代數函數:

  1. dot:內積。
  2. trace: 計算對角線元素的和。
  3. det:計算行列式的值。
  4. eig:求出eigenvalue與eigenvector。
  5. inv:求出逆矩陣
  6. qr:QR分解
  7. svd:SVD分解
  8. solve:解線性方程式。

那這些線性代數的方法可以用在什麼地方呢?以現在的聊天機器人來說,有用SVD為基礎來做文字語意的分析。此外,線性代數也是深度學習(MIT出版的Deep Learning一書的第二章)的數學基礎之一。那為什麼在使用電腦做運算時,線性代數會有很大的關連?

Google Sheets 的簡易資料探勘法

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

資料探勘的方式主要是以統計作為基礎,例如變異數、平均數等,衍生而來的如迴歸分析、分類等。底下示範Google Sheet中的常用統計數值迴歸分析

常用統計數值

這邊使用Google試算表(Google Sheets)來算出中位數(median)、平均數(mean)、眾數(mode)、標準差(Standard Deviation)、變異數(Variance)。首先使用RandBetween函數產生50筆0~100之間的亂數。
RANDBETWEEN(low, high)
  • low - The low end of the random range.
  • high - The high end of the random range.

在Google試算表中,這五種數值都有公式可以使用:







回歸分析(regression analysis)

首先以隨機產生出來的天氣溫度來示範單變數,下圖是選擇十次多項式回歸的結果:


讀者可以試試其他回歸類型,如線性(Linear)等。接著來要使用UCI的資料集:Concrete Slump Test Data Set來示範多變數回歸。此資料集的前十筆如下: 

使用十次多項式回歸的結果:

使用Google Sheet可以不用寫程式耶!但是多變數的分析好像.......

Python 海龜繪圖(Python Graphics with turtle)

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

本文會介紹Python中的Turtle繪圖功能,並搭配線上版的Trinketrepl.it(Python turtle)來呈現繪圖結果。(題外話:Trinket也有提供積木拖曳的設計方式)

文字(Text)

可以使用write這個指令來輸出文字。Python官方的指令說明如下:
urtle.write(argmove=Falsealign="left"font=("Arial"8"normal"))
Parameters:
  • arg – object to be written to the TurtleScreen
  • move – True/False
  • align – one of the strings “left”, “center” or right”
  • font – a triple (fontname, fontsize, fonttype)
Write text - the string representation of arg - at the current turtle position according to align (“left”, “center” or right”) and with the given font. If move is true, the pen is moved to the bottom-right corner of the text. By default, move is False.
範例:


直線(Line)

畫直線的方式有很多種,例如可以使用 forward 向前或則使用 backward 以及goto這三個指令。搭配迴圈以及left、right就可以畫出長方形(Rectangle)、正方形(Square)等圖形了。


圓形(Circle)

Python 有提供畫圓形的指令,Python官方的指令說明如下:





turtle.circle(radiusextent=Nonesteps=None)
Parameters:
  • radius – a number
  • extent – a number (or None)
  • steps – an integer (or None)
Draw a circle with given radius. The center is radius units left of the turtle; extent – an angle – determines which part of the circle is drawn. If extent is not given, draw the entire circle. If extent is not a full circle, one endpoint of the arc is the current pen position. Draw the arc in counterclockwise direction if radius is positive, otherwise in clockwise direction. Finally the direction of the turtle is changed by the amount of extent.
As the circle is approximated by an inscribed regular polygon, steps determines the number of steps to use. If not given, it will be calculated automatically. May be used to draw regular polygons.
奧運五色環範例: