#1~100終極密碼
import random
min=1
max=100
password=random.randint(min,max)
while True:
x=input("終極密碼請開始,1~100:")
try:
x=int(x)
except:
print("輸入錯誤,請輸入有效數字")
continue
if x<=min or x>=max:
print("請輸入有效範圍",min,"~",max)
elif x<password:
min=x
print(min,"~",max,",請繼續")
elif x>password:
max=x
print(min,"~",max,",請繼續")
else:
print("恭喜中了,密碼為",password,"遊戲結束")
break
文章農場
本站為個人筆記之用途,主要內容為電腦技術及生活分享。
2018年8月12日 星期日
用 Python 練習寫「終極密碼」小遊戲
終極密碼
2016年6月6日 星期一
JavaBean 模組化類別 (打包重複功能)
說明,寫兩個檔案:
---
前言:
在網頁語言 JSP 及 Servlet 之開發過程中,常常會使用到相同功能的程式,而最快的處理方法就是複製並貼上至其他的頁面,但當程式專案規模變大後,這種方式會導致後續維護及管理的困難,也使不同版本之功能難以維持一致性。
因此可以選擇使用 JavaBean 模組化技術,其主要用來設計特定功能且能夠被使用、復用、替代和連接的副程式,事實上它也只是一般的 Java 類別,但必須遵循 JavaBean API 之規範,例如特定的命名、建構元、方法之規定。
Reference:
國立中山大學程式諮詢網 - 簡介 JavaBean
---
/opt/apache-tomcat-8.0.30/webapps/Test/WEB-INF/src/helloBean.java
‧ 編譯檔案為 .class,且檔案位置為:
/opt/apache-tomcat-8.0.30/webapps/Test/WEB-INF/classes/bean/helloBean.class
---
/opt/apache-tomcat-8.0.30/webapps/Test/helloBean.jsp
---
測試:
http://localhost:8080/Test/helloBean.jsp
- helloBean.java → 接收一個字串 name,並回傳 “Hello, “ + name
- helloBean.jsp → 載入 JavaBean,印出結果。
---
前言:
在網頁語言 JSP 及 Servlet 之開發過程中,常常會使用到相同功能的程式,而最快的處理方法就是複製並貼上至其他的頁面,但當程式專案規模變大後,這種方式會導致後續維護及管理的困難,也使不同版本之功能難以維持一致性。
因此可以選擇使用 JavaBean 模組化技術,其主要用來設計特定功能且能夠被使用、復用、替代和連接的副程式,事實上它也只是一般的 Java 類別,但必須遵循 JavaBean API 之規範,例如特定的命名、建構元、方法之規定。
Reference:
國立中山大學程式諮詢網 - 簡介 JavaBean
---
/opt/apache-tomcat-8.0.30/webapps/Test/WEB-INF/src/helloBean.java
package bean;
public class helloBean{
public String helloBean(String name){
String message = "Hello, " + name + "!!";
return message;
}
}
‧ 編譯檔案為 .class,且檔案位置為:
/opt/apache-tomcat-8.0.30/webapps/Test/WEB-INF/classes/bean/helloBean.class
---
/opt/apache-tomcat-8.0.30/webapps/Test/helloBean.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!-- 載入 JavaBean 的語法 -->
<jsp:useBean id='objHello' scope='application' class='bean.helloBean' />
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>demo JavaBeans</title>
</head>
<body>
<%
String message;
message = objHello.helloBean("tete");
out.println(message);
%>
</body>
</html>
---
測試:
http://localhost:8080/Test/helloBean.jsp
寫一個 HTML 傳送表單資料至 JSP
說明:
寫兩個檔案:
---
前言:
HTTP Request 請求,常用的有 GET 及 POST 方法,於網路查詢即可得知兩者差異,這邊就不加說明,直接 codeing 實作。
##ReadMore##
---
兩檔案路徑同樣放至:/opt/apache-tomcat-8.0.30/webapps/Test/
---
request.html
---
request.jsp
寫兩個檔案:
- request.html → 做一個表單,可傳送資料出去。
- request.jsp → 讀取 get 請求,並輸出傳來的資料內容。
---
前言:
HTTP Request 請求,常用的有 GET 及 POST 方法,於網路查詢即可得知兩者差異,這邊就不加說明,直接 codeing 實作。
##ReadMore##
---
兩檔案路徑同樣放至:/opt/apache-tomcat-8.0.30/webapps/Test/
---
request.html
<html>
<head>>
</head>
<body>
<form action="request.jsp" method="get">
請輸入資訊:<input type="text" name="info">
<input type="submit" value="傳送">
</form>
</body>
</html>
---
request.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
//String content=new String(request.getParameter("info").getBytes("UTF-8"));
String content = request.getParameter("info");
if(content == null){
content = "null";
}else{
content = new String(request.getParameter("info").getBytes("UTF-8"));
}
//String content=request.getParameter("info");
%>
<h2>顯示…</h2>
<h2>收到的訊息:<%=content %></h2>
</body>
</html>
---
測試網址:
http://localhost:8080/Test/request.html
送出表單後,會直接跳轉至
http://localhost:8080/Test/request.jsp
---
也可以硬改網址,直接加入參數及資料給 JSP,例如:
http://localhost:8080/Test/request.jsp?info=hehe
因此也可以發現,從安全性來看,POST (資料參數不會附在網址上)遠優於 GET 求請方式。
測試網址:
http://localhost:8080/Test/request.html
送出表單後,會直接跳轉至
http://localhost:8080/Test/request.jsp
---
也可以硬改網址,直接加入參數及資料給 JSP,例如:
http://localhost:8080/Test/request.jsp?info=hehe
因此也可以發現,從安全性來看,POST (資料參數不會附在網址上)遠優於 GET 求請方式。
Roseapple Pi - 於 Android 之 USB to TTL 連線 + ADB 指令控制
說明:
---
Step 1. USB to TTL 工具接線:
---
Step 2. 於 Debian 下安裝 minicom 及 ADB 指令:
---
Step 3. 設定 minicom:
---
Step 5. 網路連線至蓮霧派:
於 Debian 終端機下 ADB 網路連線指令:
- 使用 USB to TTL 工具,並以 minicom 指令連線至蓮霧派(android)。
- 以 ADB 指令控制蓮霧派(android)。
---
Step 1. USB to TTL 工具接線:
---
Step 2. 於 Debian 下安裝 minicom 及 ADB 指令:
~$ sudo apt-get install minicom ~$ sudo apt-get install android-tools-adb android-tools-fastboot
---
Step 3. 設定 minicom:
~$ minicom -s
序列埠設定:
按「離開本畫面」可以進入 minicom 連線至蓮霧派 Android 系統文字畫面。
---
Step 4. 設定蓮霧派 ADB TCP port 為 5555:
於 minicom 畫面,控制蓮霧派 Android ADB 指令 -
netcfg → 查看 ip,假設為 192.168.1.100 setprop service.adb.tcp.port 5555 && stop adbd && start adbd
---
Step 5. 網路連線至蓮霧派:
於 Debian 終端機下 ADB 網路連線指令:
adb connect 192.168.1.100
確認裝置有連到,於終端機:
adb devices
---
Step 6. 可以斷開 USB to TTL 連接線路,直接使用終端機透過網路下指令:
adb shell /system/bin/screencap -p /sdcard/screenshot.png → 截圖 adb shell → adb install *.apk → 安裝 apk 檔
查看溫度:
adb -s 192.168.31.124:5555 shell cat /sys/class/thermal/thermal_zone*/temp
關機:
adb shell reboot -p adb shell shutdown adb shell halt
---
其他備註. 使用 `adb connect RoseapplePi.IP` 連接後,可以開啟 Android Studio 軟體找到該裝置,直接燒錄 app 程式。
2016年6月4日 星期六
Apache Tomcat 環境建置
‧ 前言:
Apache Tomcat 是 Apache 軟體基金會下之 Jakarta 項目專案所開發出來的免費開源軟體,內含有 HTTP 伺服器,因此也可以被視作為一個單獨的網頁伺服器;另外主要特色為支援 Java Servlet 及 JavaServer Page (JSP),並且透過 XML 格式之設定檔來管理及控制網頁路徑。
##ReadMore##
---
Step 0. 安裝 Java JDK
可以參考本站文章「設定指令優先權(Java 安裝為例)」,本例使用版本:
---
Step 1. 下載檔案
至官方下載 Apache Tomcat,
本文使用版本為 apache-tomcat-8.0.30-src.tar.gz。
---
Step 2. 解壓縮
於 Linux 系統環境下,通常習慣將第三方協力軟體放置到 “/opt“ 目錄下(需 ROOT)。
---
Step 3. 啟動 apache-tomcat 服務
至解壓縮目錄內之 “bin“ 目錄下執行運作服務 Shell Scrip 檔。
---
Step 4. 測試網頁
開啟瀏覽器鍵入網址 “http://localhost:8080/“,若有正確啟動服務會看到下圖畫面:
---
Step 5. 建立專案
使用 Apache Tomcat 必須遵守其檔案目錄配置的規範,
以路徑 /opt/apache-tomcat-8.0.30/webapps 做為網頁之根目錄 (Root) 開始建立專案目錄。
---
Step 6. 寫 JSP 測試:/opt/apache-tomcat-8.0.30/webapps/Test/hello.jsp
---
Step 7-1. 寫 Servlet 測試:/opt/apache-tomcat-8.0.30/webapps/Test/WEB-INF/src/HelloServlet.java
Step 7-2. 以指令編譯成 .class 檔:/opt/apache-tomcat-8.0.30/webapps/Test/WEB-INF/classes/HelloServlet.class
Step 7-3. 設定 web.xml:/opt/apache-tomcat-8.0.30/webapps/Test/WEB-INF/web.xml
---
Step 8-1. 測試 jsp 網址:
http://localhost:8080/Test/hello.jsp
Step 8-2. 測試 servlet 網址:
http://localhost:8080/Test/hello
Apache Tomcat 是 Apache 軟體基金會下之 Jakarta 項目專案所開發出來的免費開源軟體,內含有 HTTP 伺服器,因此也可以被視作為一個單獨的網頁伺服器;另外主要特色為支援 Java Servlet 及 JavaServer Page (JSP),並且透過 XML 格式之設定檔來管理及控制網頁路徑。
---
Step 0. 安裝 Java JDK
可以參考本站文章「設定指令優先權(Java 安裝為例)」,本例使用版本:
~$ java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
---
Step 1. 下載檔案
至官方下載 Apache Tomcat,
本文使用版本為 apache-tomcat-8.0.30-src.tar.gz。
---
Step 2. 解壓縮
於 Linux 系統環境下,通常習慣將第三方協力軟體放置到 “/opt“ 目錄下(需 ROOT)。
~$ sudo tar xfva apache-tomcat-8.0.30-src.tar.gz -C /opt
---
Step 3. 啟動 apache-tomcat 服務
至解壓縮目錄內之 “bin“ 目錄下執行運作服務 Shell Scrip 檔。
~$sudo sh /opt/apache-tomcat-8.0.30/bin/startup.sh
---
Step 4. 測試網頁
開啟瀏覽器鍵入網址 “http://localhost:8080/“,若有正確啟動服務會看到下圖畫面:
---
Step 5. 建立專案
使用 Apache Tomcat 必須遵守其檔案目錄配置的規範,
以路徑 /opt/apache-tomcat-8.0.30/webapps 做為網頁之根目錄 (Root) 開始建立專案目錄。
---
Step 6. 寫 JSP 測試:/opt/apache-tomcat-8.0.30/webapps/Test/hello.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<title>Hello</title><br>
</head>
<body>
<h3>Input Name</h3>
<form action="/TestApp/Hello" method="get">
請輸入姓名:
<input type="text" name="UserID" />
<input type="submit" value="Send" />
</form>
</body>
</html>
---
Step 7-1. 寫 Servlet 測試:/opt/apache-tomcat-8.0.30/webapps/Test/WEB-INF/src/HelloServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 下面兩行讓中文字能正確顯示
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<BODY>");
out.println("<p>Hello! 這是我的第一支 Java servlet 程式。</p>");
out.println("</BODY>");
out.println("</HTML>");
}
}
Step 7-2. 以指令編譯成 .class 檔:/opt/apache-tomcat-8.0.30/webapps/Test/WEB-INF/classes/HelloServlet.class
cd /opt/apache-tomcat-8.0.30/webapps/Test/WEB-INF/src javac *.java -d ../classes/
Step 7-3. 設定 web.xml:/opt/apache-tomcat-8.0.30/webapps/Test/WEB-INF/web.xml
<servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping>
---
Step 8-1. 測試 jsp 網址:
http://localhost:8080/Test/hello.jsp
Step 8-2. 測試 servlet 網址:
http://localhost:8080/Test/hello
2016年6月2日 星期四
C#-examination-e
題目要求:
魔術方塊,六種顏色以文字表之。
圖片共十二張:點我下載
##ReadMore##
魔術方塊,六種顏色以文字表之。
圖片共十二張:點我下載
##ReadMore##
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AForge.Imaging.Filters;
using AForge.Imaging.Formats;
using AForge.Imaging;
using System.Drawing.Imaging;
using System.Diagnostics;
using AForge.Math;
namespace examination_e
{
public partial class Form1 : Form
{
Bitmap srcImg, cropImg, confirmImg;
String knowColor;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "All File(*.*)|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
srcImg = ImageDecoder.DecodeFromFile(openFileDialog1.FileName);
pictureBox1.Image = srcImg;
}
}
private void button2_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
//因為每張魔術方塊圖大小、位置不定,慢慢抓最大最小值縮減掃描範圍
int catchX = 250;
int catchY = 130;
int catchWidth = 650;
int catchHeight = 500;
//第一階段截取圖片,因為每張魔術方塊圖大小、位置不定先截個自訂值(畫 rectangle 慢慢測試得來的)
Crop cropFilter = new Crop(new Rectangle(catchX, catchY, catchWidth, catchHeight));
Bitmap scanImg = cropFilter.Apply(srcImg);
pictureBox3.Image = scanImg;
Graphics g = Graphics.FromImage(srcImg);
g.DrawRectangle(new Pen(Color.Red), catchX - 1, catchY - 1, catchWidth + 2, catchHeight + 2);
pictureBox2.Image = srcImg;
//Color 陣列用來儲存第一階段截取範圍內全部 colorPixel,容器 +10 避免誤差,造成超出陣列
Color[,] colorPixel = new Color[catchX + catchWidth + 10, catchY + catchHeight + 10];
//初始化,魔術方塊區域之座標最大、最小值
int max_x = 0, max_y = 0, min_x = catchX + catchWidth, min_y = catchY + catchHeight;
//開始取得第一階段截取範圍全部的 colorPixel
for (int i = catchX; i < catchX + catchWidth; i++)
{
for (int j = catchY; j < catchY + catchHeight; j++)
{
colorPixel[i, j] = srcImg.GetPixel(i, j);
}
}
//掃描第一階段截取之範圍, 取得非黑色的座標之最大、最小座標 max_x, max_y, min_x, min_y
for (int i = catchX; i < catchX + catchWidth; i++)
{
for (int j = catchY; j < catchY + catchHeight; j++)
{
// 設 RGB < 90 為黑色,非魔術方塊區域。
if (colorPixel[i, j].R < 90 && colorPixel[i, j].G < 90 && colorPixel[i, j].B < 90) { /*nothing to do*/ }
// 第一層過濾,非黑色,則有可能是彩色圖,但有誤差,所以還要第二層過濾。
else
{
// 設 RGB < 90 為黑色,非魔術方塊區域。
if (colorPixel[i - 2, j - 2].R < 90 && colorPixel[i - 2, j - 2].G < 90 && colorPixel[i - 2, j - 2].B < 90) { /* nothing to do */ }
//第二層過濾,判斷座標 [i-2, j-2] colorPixel 必需不是黑色 (即捕捉連續彩色→但只能捉到魔術方塊左上角座標,右下座標仍有誤差)
else
{
// 設 RGB < 90 為黑色,非魔術方塊區域。
if (colorPixel[i + 2, j + 2].R < 90 && colorPixel[i + 2, j + 2].G < 90 && colorPixel[i + 2, j + 2].B < 90) { /* nothing to do */ }
//第三層過濾,判斷座標 [i+2, j+2] colorPixel 必需不是黑色 (即捕捉連續彩色→測試後可以正確抓到魔術方塊完整範圍)
else
{
// 抓魔術方塊區域之座標最大、最小值
if (max_x < i)
max_x = i;
if (max_y < j)
max_y = j;
if (min_x > i)
min_x = i;
if (min_y > j)
min_y = j;
}
}
}
}
}
//得到魔術方塊區域之最大、最小座標 max_x, max_y, min_x, min_y,算差值得到魔術方塊之 Height= calcH, Width=calcW
int calcW = max_x - min_x;
int calcH = max_y - min_y;
//做記號至 srcImg 測試確認用
g.DrawRectangle(new Pen(Color.Red), min_x, min_y, calcW, calcH);
textBox1.Text = "BottomRight=(" + max_x + ", " + max_y + ")";
textBox2.Text = "TopLeft=(" + min_x + ", " + min_y + ")";
textBox3.Text = "width=" + calcW + ", height=" + calcH;
//第二階段截取圖片,得到完整魔術方塊的區域 = cropImg
Crop cropFilter2 = new Crop(new Rectangle(min_x, min_y, calcW, calcH));
cropImg = cropFilter2.Apply(srcImg);
//魔術方塊的區域印至 pictureBox3 再確認
pictureBox3.Image = cropImg;
/*
//手動測試用
int jjj = 0;
int iii = 2;
Crop cropFilterTest = new Crop(new Rectangle(iii * calcW / 3, jjj * calcH / 3, calcW / 3, calcH / 3));
confirmImg = cropFilterTest.Apply(cropImg);
pictureBox4.Image = confirmImg;
*/
//掃描魔術方塊區域
for (int jj = 0; jj < 3; jj++)
{
for (int ii = 0; ii < 3; ii++)
{
//第三階段截取,割成 3×3, 每一格單位: Width=calcH/3, Height=calcH/3,以 for-loop 掃描
Crop cropFilter3 = new Crop(new Rectangle(ii * calcW / 3, jj * calcH / 3, calcW / 3, calcH / 3));
confirmImg = cropFilter3.Apply(cropImg);
//傳送單塊顏色中心點之 RGB 判別顏色
Color confirmPixel = confirmImg.GetPixel(confirmImg.Width / 2, confirmImg.Height / 2);
//寫一個 function confirmColor 內有色表做顏色確認
confirmColor(confirmPixel.R, confirmPixel.G, confirmPixel.B);
listBox1.Items.Add("(" + jj + ", " + ii + ") = " + knowColor);
//listBox1.Items.Add("R,G,B = " +confirmPixel.R + "," + confirmPixel.G + "," + confirmPixel.B);
listBox1.Items.Add("");
}
listBox1.Items.Add("-----------------");
}
pictureBox2.Image = srcImg;
}
public void confirmColor(int R, int G, int B)
{
//Blue
if (R < 40 && G < 50 && B > 70 && B < 150)
knowColor = "Blue";
//Yellow
else if (R > 200 && G > 170 && B > 50 && B < 96)
knowColor = "Yellow";
//Green
else if (R < 80 && G > 50 && G < 160 && B > 40 && B < 100)
knowColor = "Green";
//Orange
else if (R > 175 && G > 55 && G < 115 && B < 68)
knowColor = "Orange";
//Red
else if (R > 100 && R < 200 && G < 55 && B < 50)
knowColor = "Red";
//White
else if (R > 170 && G > 179 && B > 170)
knowColor = "White";
else
{
knowColor = "unknow";
}
}
}
}
訂閱:
意見 (Atom)




