Code n Hack in Python3

最後編輯:2017-06-21 建立:2017-02-12 歷史紀錄

 

    百千Week 19

百千Bebras

PR70可以報早鳥

http://compthinking.csie.ntnu.edu.tw/index.php/activity/41-2017

 

APCS

實作題4題400分

一級分=0-49分

二級分=50-149分

三級分=150-249分

四級分=250-349分

五級分=350-400分

http://pr.ntnu.edu.tw/newspaper/index.php?mode=data&id=32635

 

https://zerojudge.tw/ShowProblem?problemid=b964

  • while True:
  • try:
  • input()
  • grades = input().split()
  • grades = [ int(grade) for grade in grades ]
  • grades = sorted(grades)
  • answer1 = ''
  • answer2 = 'best case'
  • answer3 = 'worst case'
  • for grade in grades:
  • answer1 += str(grade) + ' '
  • if grade < 60:
  • answer2 = grade
  • if answer3=='worst case' and grade >= 60:
  • answer3 = grade
  • print(answer1[:-1])
  • print(answer2)
  • print(answer3)
  • except:
  • break

 

https://zerojudge.tw/ShowProblem?problemid=b965

  • while True:
  • try:
  • R,C,M=input().split()
  • matrix=[]
  • for _ in range(int(R)):
  • matrix.append(input().split())
  • operations=input().split()
  • for operation in operations[::-1]:
  • if operation=='1':
  • matrix=matrix[::-1]
  • else:
  • matrix=[ row[::-1] for row in matrix ]
  • transpose=zip(*matrix)
  • matrix=[]
  • for row in transpose:
  • matrix.append(row)
  • print(len(matrix),len(matrix[0]))
  • for row in matrix:
  • string=''
  • for element in row:
  • string+=element+' '
  • print(string[:-1])
  • except:
  • break

 

    百千Week 18

百千Review

N階乘

https://repl.it/Ik89

費式數列第N項

https://repl.it/Ik89/6

 

Final exam

https://repl.it/classroom/invite/CLHrFuo

 

    百千Week 17

百千2017高中資訊學術聯展

http://www.infas-js.club/2017/

 

遞迴函數

在函數的定義裡面呼叫自己

 

用遞迴函數求N階乘

f(n) = n! = n*(n-1)*(n-2)*...*1

  • def f(n):
  • if n == 1:
  • return 1
  • return f(n-1)*n

 

用遞迴函數求費式數列第N項

f(n) = f(n-1) + f(n-2), f(1) = f(2) = 1

  • def f(n):
  • if n < 3:
  • return 1
  • return f(n-1) + f(n-2)

 

用遞迴函數求等比數列第N項

f(n) = f(n-1)*5, f(1) = 6

 

https://zerojudge.tw/ShowProblem?problemid=b558

  • def f(n):
  • if n==1:
  • return 1
  • return f(n-1)+n-1
  • while True:
  • try:
  • print(f(int(input())))
  • except:
  • break

 

https://zerojudge.tw/ShowProblem?problemid=a044

公式:f(n) = f(n-1) + n*(n-1)/2 + 1

  • def f(n):
  • if n==1:
  • return 2
  • '''因為judge只給3秒,加入以下判斷,就能AC
  • if n==2:
  • return 4
  • '''
  • return f(n-1) + n*(n-1)//2 + 1
  • while True:
  • try:
  • print(f(int(input())))
  • except:
  • break

 

    百千Week 16

百千2017台北科學日

6/4在師大公館校區有空來玩

http://gogo.1001000.io

 

https://zerojudge.tw/ShowProblem?problemid=a149

  • T=input()
  • for _ in range(int(T)):
  • n=input()
  • product=1
  • for i in n:
  • product *= int(i)
  • print(product)

 

https://zerojudge.tw/ShowProblem?problemid=a263

  • def is_leap(year):
  • return True if year%400==0 or (year%4==0 and year%100!=0) else False
  • # https://zh.wikipedia.org/wiki/%E9%97%B0%E5%B9%B4
  • def days(Y,M,D):
  • # count Y into days
  • result = Y*365 + Y//4 - Y//100 + Y//400
  • if is_leap(Y) and M<3:
  • result -= 1
  • # count M into days
  • days_before = [0,31,28,31,30,31,30,31,31,30,31,30]
  • for month in range(M):
  • result += days_before[month]
  • # count D into days
  • result += D
  • return result
  • while True:
  • try:
  • Y1, M1, D1 = input().split()
  • Y2, M2, D2 = input().split()
  • Y1, M1, D1 = int(Y1), int(M1), int(D1)
  • Y2, M2, D2 = int(Y2), int(M2), int(D2)
  • print( abs( days(Y1, M1, D1) - days(Y2, M2, D2) ) )
  • except:
  • break

 

    百千Week 15

百千APCS

實作題如同ZeroJudge題目

http://apcs.csie.ntnu.edu.tw/index.php/samplequestions/implementationquestions

高一選修課程意見調查

https://goo.gl/forms/8k0lZ4GQZhkUm95s1

 

https://zerojudge.tw/ShowProblem?problemid=a065

  • while True:
  • try:
  • S=input()
  • N=''
  • for i in range(6):
  • N+=str( abs( ord(S[i])-ord(S[i+1]) ) )
  • print(N)
  • except:
  • break

 

https://zerojudge.tw/ShowProblem?problemid=a147

  • while True:
  • try:
  • n=int(input())
  • for i in range(1,n):
  • if i%7!=0:
  • print(i,end=' ')
  • print()
  • except:
  • break

 

https://zerojudge.tw/ShowProblem?problemid=a148

  • while True:
  • try:
  • numbers=input().split()
  • total=0
  • for i in range(1,len(numbers)):
  • total+=int(numbers[i])
  • if total/int(numbers[0])>59:
  • print('no')
  • else:
  • print('yes')
  • except:
  • break

 

    百千Week 14

百千https://zerojudge.tw/ShowProblem?problemid=a053

  • while True:
  • try:
  • x=int(input())
  • if x<=10:
  • grade=x*6
  • elif 10<x<=20:
  • grade=60+(x-10)*2
  • elif 20<x<=40:
  • grade=80+(x-20)*1
  • else:
  • grade=100
  • print(grade)
  • except:
  • break

 

https://zerojudge.tw/ShowProblem?problemid=b532

  • O=['+','-','*','/','%'] # 5個運算符號
  • for _ in range(int(input())):
  • S=input()
  • x=''
  • for s in S:
  • if s in O: # 找到運算符號
  • o=s
  • left=int(x) # 字串x轉整數,存入left
  • x=''
  • continue # 不到11行,直接跳到for迴圈的下一個s
  • try:
  • x+=str(int(s)) # 字串S中的字元s,若能轉整數,就再轉回字元,接入字串x,若轉失敗,就continue
  • except:
  • continue
  • right=int(x) # 字串x轉整數,存入right
  • if o=='+':
  • answer=left+right
  • if o=='-': # 因為不影響輸出結果,且較為整齊美觀,才用四個if來寫
  • answer=left-right
  • if o=='*':
  • answer=left*right
  • if o=='/':
  • answer=left//right
  • if o=='%':
  • answer=left%right
  • print(answer)

 

    百千Week 13

百千https://zerojudge.tw/ShowProblem?problemid=a020

  • alphabet=[10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,33]
  • while True:
  • try:
  • ID=input()
  • n=alphabet[ord(ID[0])-ord('A')]
  • n=(n%10)*9+n//10 # (2) 英文轉成的數字, 個位數乘9再加上十位數的數字
  • m=1
  • for char in ID[-2:0:-1]: # (3) 各數字從右到左依次乘1、2、3、4....8
  • n+=int(char)*m
  • m+=1
  • n+=int(ID[-1]) # (4) 求出(2),(3) 及最後一碼的和
  • #print(n)
  • if n%10==0:
  • print('real')
  • else:
  • print('fake')
  • except:
  • break

 

https://zerojudge.tw/ShowProblem?problemid=a022

  • while True:
  • try:
  • s=input()
  • if s==s[::-1]:
  • print('yes')
  • else:
  • print('no')
  • except:
  • break

 

https://zerojudge.tw/ShowProblem?problemid=a038

  • while True:
  • try:
  • s=input()
  • print(int(s[::-1]))
  • except:
  • break

 

    百千Week 12

百千https://en.wikipedia.org/wiki/ASCII

 

https://docs.python.org/3/library/functions.html

ord(字元) 和 chr(整數) 互為反函數

 

https://zerojudge.tw/ShowProblem?problemid=a009

  • key=ord('*')-ord('1')
  • while True:
  • try:
  • INPUT=input()
  • OUTPUT=''
  • for char in INPUT:
  • OUTPUT+=chr(ord(char)+key)
  • print(OUTPUT)
  • except:
  • break

 

    百千Week 11

百千https://zerojudge.tw/ShowProblem?problemid=a003

  • while True:
  • try:
  • M,D=input().split()
  • M,D=int(M),int(D)
  • S=(M*2+D)%3
  • if S==0:
  • print('普通')
  • elif S==1:
  • print('吉')
  • else:
  • print('大吉')
  • except:
  • break

 

https://zerojudge.tw/ShowProblem?problemid=a004

https://zh.wikipedia.org/wiki/%E9%97%B0%E5%B9%B4

  • if ((西元年分是400的倍數)或(西元年分是4的倍數但不是100的倍數))
  • { 閏年 }
  • else
  • { 平年 }

 

  • while True:
  • try:
  • y=int( input() )
  • if y%400==0 or (y%4==0 and y%100!=0):
  • print('閏年')
  • else:
  • print('平年')
  • except:
  • break

 

https://zerojudge.tw/ShowProblem?problemid=a005

  • for _ in range(int(input())):
  • a,b,c,d=input().split()
  • a,b,c,d=int(a),int(b),int(c),int(d)
  • if b-a==c-b:
  • print(a,b,c,d,d+b-a)
  • else:
  • print(a,b,c,d,d*int(b/a))

by 蔣森 :+1:

 

https://zerojudge.tw/ShowProblem?problemid=a006

  • while True:
  • try:
  • a,b,c=input().split()
  • a,b,c=int(a),int(b),int(c)
  • D=b**2-4*a*c
  • if D>0:
  • x1=str( int( (-b+D**0.5)/2/a ) )
  • x2=str( int( (-b-D**0.5)/2/a ) )
  • print('Two different roots x1='+x1+' , x2='+x2) # str+str+str+str
  • elif D==0:
  • x=str( int( -b/2/a ) )
  • print('Two same roots x='+x)
  • else:
  • print('No real root')
  • except:
  • break

 

    百千Week 10

百千https://zerojudge.tw/ShowProblem?problemid=a002

  • while True:
  • try:
  • x,y=input().split()
  • x,y=int(x),int(y)
  • print(x+y)
  • except:
  • break

 

    百千Week 9

百千解一元二次方程式

  • print('請輸入一元二次方程式係數abc')
  • a=float(input('a:'))
  • b=float(input('b:'))
  • c=float(input('c:'))
  • D=b**2-4*a*c
  • if D > 0:
  • x1=(-b+D**0.5)/(2*a)
  • x2=(-b-D**0.5)/(2*a)
  • print('相異實數解為',x1,'和',x2)

QUIZ: finish it

QUIZ: fewer than 10 lines

https://repl.it/Gv9o/9

QUIZ: what if someone doesn't input numbers?

 

定義(宣告)函數、呼叫函數

  • def f(x):
  • if x > 0:
  • return x
  • else:
  • return -x
  • print(f(55))
  • print(f(-66))

QUIZ: 定義一個階乘函數

https://repl.it/HG4c

 

    百千Week 8

百千使用input函數取得整數

  • a=int(input('輸入A:'))
  • b=int(input('輸入B:'))
  • print('A加B等於',a+b)
  • print('A減B等於',a-b)
  • print('A乘以B等於',a*b)
  • print('A除以B等於',a/b)

QUIZ: get float

 

使用try/except做例外處理

  • while True:
  • try:
  • a=float(input('輸入A:'))
  • break
  • except:
  • print('只接受數字,請重新輸入!')

https://repl.it/Gx9k/1

QUIZ: what's wrong when someone doesn't input numbers into B?

 

使用字串的split方法把字串切成一個數個字串的list

  • p = 'Life is short you need Python'
  • q = p.split()
  • print(p, type(p), len(p))
  • print(q, type(q), len(q))
  • for letter in p:
  • print(letter)

QUIZ: print a word in a line

 

    百千Week 7

  • 百千for i in range(1,17):
  • print('被乘數是',i)
  • for j in range(1,17):
  • print(i, 'x', j, '=', i*j, end='\ ')
  • if j%4==0:
  • print()

QUIZ:

 

QUIZ:

 

 

    百千Week 6

百千九九乘法表

  • for i in range(1,10):
  • for j in range(1,10):
  • print(i, '乘以', j, '等於', i*j)

 

九九乘法表加分隔線

  • for i in range(1,10):
  • for j in range(1,10):
  • print(i, '乘以', j, '等於', i*j)
  • print('這是分隔線')

 

九九乘法表加分隔線分成三欄

  • for i in range(1,10):
  • for j in range(1,10):
  • print(i, 'x', j, '=', i*j, end='\ ')
  • if j%3==0:
  • print()
  • print()

 

    百千Week 5

百千十進位→二進位

0 → 000

1 → 001

2 → 010

3 → 011

4 → 100

5 → 101

6 → 110

7 → 111

 

且、或、互斥或

 

range函數產生range物件

  • range(start, stop, step) # 當傳入3個參數時
  • range(start, stop, step=1) # 當傳入2個參數時
  • range(start=0, stop, step=1) # 當傳入1個參數時

QUIZ: 印出100到1000之間所有10的倍數

 

    百千Week 4

百千for loop

  • L = [3.14, '7 7 7', [1, 2, 3], 'hello python', 0]
  • for element in L:
  • print(element)

QUIZ: https://repl.it

 

    百千Week 3

百千list and its methods

a_list = [ 'a', 'b', 'c', 55, 66, '77' ]

a_list[ i ] 取得位置 i 的值

a_list[ i : j ] 取得位置 i 到位置 j 但不包括位置 j 的串,長度為 j - i

a_list[ : j ] 取得最前(左)到位置 j 但不包括位置 j 的串

a_list[ i : ] 取得位置 i 到最後(右)的串

a_list.append( x ) 把 x 接到串的最後(右)

a_list.remove( x ) 把 x 從串裡移除

a_list.insert( i, x ) 把 x 插入串的位置 i

more methods

https://docs.python.org/3.6/tutorial/datastructures.html

 

字串跟串很像,設 s = "hello python, i'm a newbie",只用到三個加號,接成 'happy'

  • s[0]+s[18]+s[6]+s[6:8]

 

    百千Week 2

百千built-in functions

int( )

float( )

str( )

type( )

len( )

more built-in functions

https://docs.python.org/3/library/functions.html

 

QUIZ: 用學過的內建函數和任何運算子,只用到2.5產生777777777

  • str( int(2.5+2.5+2.5) ) * len( '2.5' ) * len( '2.5' )
  • str( int(2.5+2.5+2.5) ) * ( int(2.5+2.5+2.5) + int(2.5) )
  • str( int(2.5+2.5+2.5) ) * ( int(2.5) + int(2.5/2.5) ) ** int(2.5)

 

    百千Week 1

百千Python語言

https://zh.wikipedia.org/zh-tw/Python

Python 3 Tutorial

https://www.sololearn.com/Course/Python/

Python 3 IDE

https://repl.it/languages/python3

課程

https://repl.it/classroom/invite/CLHrFuo

專頁

https://www.facebook.com/code.n.hack