Python解題

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  會加在後面
讀取
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()

python解題

By arashi

python解題

  • 149