Lecturer: 王譽錚
OUTLINE
1. 常見錯誤
2. 例題講解
常見錯誤
.= 與 == 的差別
.縮排
.無限迴圈
1. = 與 == 的差別
box_a
box_b
5
"=" 的概念像是將右邊盒子裡的東西,
放入左邊的盒子裡,並且會覆蓋掉原有的東西。
4
box_a
box_b
5
4
1. = 與 == 的差別
"=" 的概念像是將右邊盒子裡的東西,
放入左邊的盒子裡,並且會覆蓋掉原有的東西。
box_a
box_b
5
5
1. = 與 == 的差別
"=" 的概念像是將右邊盒子裡的東西,
放入左邊的盒子裡,並且會覆蓋掉原有的東西。
box_a
box_b
5
"==" 的概念像是將左右箱子裡的東西做比對,如果相同就回傳True,不同就回傳False。
4
1. = 與 == 的差別
縮排是 Python 區分程式區塊的方式,可以讓電腦知道你想要用的程式的有效範圍。
EX:四個空格或是一個tab
a = 15
b = 10
if a > b:
print("a win")
a = 15
b = 10
if a > b:
print("a win")
2. 縮排
3.無限迴圈
程式一直在迴圈裡面循環,不會結束程式的情況。
s = 0
while True:
s = s + 1
例題講解
1. 系統隨機產生一個整數(answer),其值介於由玩家輸入的範圍n1~n2間,
而後玩家進行猜測系統所產生的數字,如猜測數字大於answer,則告知猜測數字大於answer,小於依然;直到玩家猜到answer為止,
遊戲結束。但請將猜測的過程,玩家輸入的數字寫入一文字檔,檔名請以學號命名之。
要達成的目標
1. 隨機產生一個在玩家輸入的範圍內的一個整數
2.猜測數字,太大或太小都要告知,直到猜中為止
3.將猜測過程寫入文字檔
import random
n1,n2 = eval(input())#輸入範圍
ans = random.randint(n1,n2)#隨機出要猜的數字
#print(ans)#檢查用
1. 隨機產生一個在玩家輸入的範圍內的一個整數
import random
n1,n2 = eval(input())#輸入範圍
ans = random.randint(n1,n2)#隨機出要猜的數字
#print(ans)#檢查用
num = eval(input())
while True:#在猜到之前無限迴圈
if num > ans:
print("太大")#提示
num = eval(input())#重猜
elif num < ans:
print("太小")
num = eval(input())
else:
break#猜對結束迴圈
2.猜測數字,太大或太小都要告知,直到猜中為止
變數名稱 = open("你的學號.txt", mode="要做的動作", encoding="utf-8")
mode | 用途 |
---|---|
w | 一次寫一個字串(原本有東西的話會被覆蓋) |
a | 會加在後面 |
r | 讀取 |
file = open("407040225.txt", mode="w", encoding="utf-8")
File要做的操作
可執行的操作 | 用途 |
---|---|
write() | 寫入 |
read() | 讀取 |
readline() | 讀取一行 |
readlines() | 讀取檔案所有內容(轉換成字串輸出) |
read(n) | 讀取第n個字元 |
repr | 照印 (例如 "\n"會被當成字元照印,而非跳行) |
flush() | 將緩衝區的東西寫入檔案 |
你的學號.write("win")
import random
file = open("407040225.txt", mode="w", encoding="utf-8")#開啟檔案
n1,n2 = eval(input())#輸入範圍
ans = random.randint(n1,n2)#隨機出要猜的數字
#print(ans)#檢查用
num = eval(input())
while True:#在猜到之前無限迴圈
if num > ans:
print("太大")#提示
win = str(num)#轉成字串
file.write(win)#寫入檔案
file.write("\n")#換行
num = eval(input())#重猜
elif num < ans:
print("太小")
win = str(num)
file.write(win)
file.write("\n")
num = eval(input())
else:
win = str(num)
file.write(win)
file.write("\n")
break#猜對結束迴圈
file.close()
完整樣貌
pow()函式
pow()是一個可以用來算次方的函式,寫法如下:
num = pow(a,b)
得出的num會是a的b次方
n = eval(input())
s = 0
for i in range(1,n+1):
s = s + (1 / (pow(2*i-1,0.5) + pow(2*i,0.5)) + 1 /
(pow(2*i,0.5) - pow(2*i+1,0.5)))
print(s)
n = eval(input())
s = 0
for i in range(1,n+1):
a = pow(2*i-1,0.5)
b = pow(2*i,0.5)
c = pow(2*i,0.5)
d = pow(2*i+1,0.5)
s = s + (1 / (a + b) + 1 / (c - d))
print(s)
分解版
測資
3. 一些網站對密碼有設定一些規範。請撰寫一函式檢查密碼是否有效。假設密碼的規則如下:
1.必須至少十個字元。
2.必須以字母開頭,其中只能包含字母和數字,不接受其他字元。
3.密碼中必須包含至少兩個數字。
4.請撰寫一程式,提示使用者輸入密碼,若密碼符合上述規則,則顯示 valid password,否則顯示 invalid password。
密碼無效的可能
1. 不到十個字元
2. 非字母開頭
3. 有非字母與數字的字元
4. 密碼內數字量小於兩個
前置設定
#分別建立數字跟字母的字典
word = ['a','b','c','d','e','f','g','h','i','j','k',
'l','m','n','o','p','q','r','s','t','u','v','w',
'x','y','z','A','B','C','D','E','F','G','H','I',
'J','K','L','M','N','O','P','Q','R','S','T','U',
'V','W','X','Y','Z']
num = ['0','1','2','3','4','5','6','7','8','9']
line =[]
in_num = 0
ans = True #開關,假定一開始密碼符合規則
1. 不到十個字元
a = input() #放入一開始的密碼
along =len(a) #看密碼長度
if along < 10:
print("invalid password")
2. 非字母開頭
a = input() #放入一開始的密碼
for i in range(along): #分割字元
line.append(a[i])
if line[0] not in word: #如果第一個字不是字母
ans = False
3. 有非字母與數字的字元
for j in range(along):
#如果這個字元是字母或數字的話
if line[j] in word or line[j] in num:
if line[j] in num: #如果有數字的話
in_num = in_num + 1
else:
ans = False
4. 密碼內數字量小於兩個
#如果少於兩個數字的話
if in_num < 2:
ans = False
最後判斷
if ans == True:
print("valid password")
else:
print("invalid password")
完整樣貌
def secret():
#分別建立數字跟字母的list
word = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
num = ['0','1','2','3','4','5','6','7','8','9']
line =[]
in_num = 0
ans = True#開關,假定一開始密碼符合規則
a = input()#放入一開始的密碼
along =len(a)#看密碼長度
for i in range(along):#分割字元
line.append(a[i])
if along >= 10:#需要再10字元以內
if line[0] not in word:#如果第一個字不是字母
ans = False
for j in range(along):
if line[j] in word or line[j] in num:#如果這個字元是字母或數字的話
if line[j] in num:#如果有數字的話
in_num = in_num + 1
else:
ans = False
if in_num < 2:#如果少於兩個數字的話
ans = False
else:#不到10字元的話
ans = False
if ans == True:
print("valid password")
else:
print("invalid password")
secret()