更多内容可移駕至我的獨立Blog:
http://www.justfbt.com/
第一周:程式設計的基礎知識
第二周:資料類型、運算符與表達式、變量指派與簡單I/O操作
第二周測驗
單選(1分)
執行下列語句,輸出的結果是?
x =
y =
print x % y
A.1
B.2.0
C.1.0
D.2
正确答案:
C
單選(1分)
能實作下面功能的程式是?
接收使用者輸入的一個整數。如果輸入的是偶數,則輸出“True”,否則輸出“False”。
A.print int(raw_input()) % 2 != 0
B.print not bool(int(raw_input()) % 2)
C.print not bool(raw_input() % 2)
D.print int(raw_input()) % 2 == 1
正确答案:
B
填空(1分)
假設你每年初往銀行賬戶中1000元錢,銀行的年利率為4.7%。
一年後,你的賬戶餘額為:
1000 * ( 1 + 0.047) = 1047 元
第二年初你又存入1000元,則兩年後賬戶餘額為:
(1047 + 1000) * ( 1 + 0.047) = 2143.209 元
以此類推,第10年年末,你的賬戶上有多少餘額?
注:結果保留2位小數(四舍五入)。
結果為 :
12986.11
,實作代碼:
total =
for x in xrange(,):
total = (total+)*(+)
print total
填空(1分)
Python提供了衆多的子產品。你能找到一個合适的子產品,輸出今天的日期嗎?格式為“yyyy-mm-dd”。可以查找任何搜尋引擎和參考資料,并在下面的空白處寫出相應的子產品名。
參考答案:
datetime
填空(1分)
對于一進制二次方程,若有 ,則其解是什麼?若有多個解,則按照從小到大的順序在一行中輸出,中間使用空格分隔。解保留2位小數(四舍五入)。
答案:
-3.58 -0.42
第二周 OnlineJudge
編寫程式,完成下列題目(1分)
題目内容:
身體品質指數(Body Mass Index,BMI)是根據人的體重和身高計算得出的一個數字,BMI對大多數人來說,是相當可靠的身體肥胖名額,其計算公式為:,其中體重機關為公斤,身高機關為米。編寫程式,提示使用者輸入體重和身高的數字,輸出BMI。
輸入格式:
輸入兩行數字,第一行為體重(公斤),第二行為身高(米)
輸出格式:
相應的BMI值,保留兩位小數。注:可以使用 format 函數設定保留的小數位數,使用 help(format) 檢視 format 函數的使用方法。
輸入樣例:
80
1.75
輸出樣例:
26.12
時間限制:500ms記憶體限制:32000kb
代碼:
#!/usr/bin/env python
#coding: utf-8
#身體品質指數計算
weight = float(raw_input())
high = float(raw_input())
result = weight/(high ** )
print '{:.2f}'.format(result)
編寫程式,完成下列題目(2分)
題目内容:
接收使用者輸入的一個秒數(非負整數),折合成小時、分鐘和秒輸出。
輸入格式:
一個非負整數
輸出格式:
将小時、分鐘、秒輸出到一行,中間使用空格分隔。
輸入樣例:
70000
輸出樣例:
19 26 40
時間限制:500ms記憶體限制:32000kb
代碼:
#!/usr/bin/env python
#coding: utf-8
sec = int(raw_input())
print str(sec/)+' '+str(sec%/)+' '+str(sec%)
編寫程式,完成下列題目(2分)
題目内容:
對于三角形,三邊長分别為a, b, c,給定a和b之間的夾角C,則有:。編寫程式,使得輸入三角形的邊a, b, c,可求得夾角C(角度值)。
輸入格式:
三條邊a、b、c的長度值,每個值占一行。
輸出格式:
夾角C的值,保留1位小數。
輸入樣例:
3
4
5
輸出樣例:
90.0
時間限制:500ms記憶體限制:32000kb
代碼:
#!/usr/bin/env python
#coding:utf-8
import math
a = float(raw_input())
b = float(raw_input())
c = float(raw_input())
degree = math.degrees(math.acos((a** + b** - c**) / ( * a * b)))
print '{0:.{1}f}'.format(degree, )
第三周 程式控制結構
第三周測驗
3.2 循環結構中的程式設計練習
冰雹猜想(序列)
while n != :
if n % == :
n /=
else:
n = * n +
print n ,
可以加一個for循環、計算某個範圍内的所有數
for n i range(,):
while n != :
if n % == :
n /=
else:
n = * n +
print n ,
列印99乘法表
99乘法表
for i in range(,):
for j in range(,):
print format(i * j, '3d'),
print
以上輸出的九九表是對稱的,輸出九九表的左下半部分
for i in range(,):
for j in range(,):
if i >= j:
print format(i * j, '3'),
print
```
以上輸出的九九表是對稱的,輸出九九表的**左上半部分**
```python
for i in range(,):
for j in range(,):
if i <= j:
print format(i * j, '3'),
print
<div class="se-preview-section-delimiter"></div>
雞兔同籠
使用方法:窮舉法
for c in range():
for r in range():
if * c + * r == and c + r == :
print c,r
<div class="se-preview-section-delimiter"></div>
其他練習
下列程式一定會進入死循環: (正确)
while True:
for x in range():
y = * x +
if y > :
break
<div class="se-preview-section-delimiter"></div>
改版:
<div class="se-preview-section-delimiter"></div>
第三周:測驗與作業
以下程式的輸出結果是? (D)
number =
if number % == :
print number, 'is even'
elif number % == :
print number, 'is multiple of 3'
<div class="se-preview-section-delimiter"></div>
A.程式出錯
B.30 is even
30 is multiple of 3
C.30 is multiple of 3
D.30 is even
以下程式的輸出結果是? (A)
x =
y = -
z =
if x > :
if y > : print 'AAA'
elif z > : print 'BBB'
<div class="se-preview-section-delimiter"></div>
A.無輸出
B.BBB
C.文法錯誤
D.AAA
以下程式的輸出結果是? (A)
y =
for i in range(, , ):
y += i
print y
<div class="se-preview-section-delimiter"></div>
A.20
B.30
C.10
D.9
如果輸入4, -1, 6, 9, 8, 3, 0,請問以下程式的輸出結果是? (9)
number = int(raw_input('Enter an integer: '))
max = number
while number != :
number = int(raw_input('Enter an integer: '))
if number > max:
max = number
print max
<div class="se-preview-section-delimiter"></div>
Python語言中,(3)
if x > :
y =
else:
y = -
<div class="se-preview-section-delimiter"></div>
等價于:
y = if x > else -
<div class="se-preview-section-delimiter"></div>
閱讀下面代碼,給出x結果:
a =
b =
x = a if a > b else b
<div class="se-preview-section-delimiter"></div>
第三周:Online Judge
編寫程式,完成下列題目
題目内容:
如果列出10以内自然數中3或5的倍數,則包括3,5,6,9。那麼這些數字的和為23。要求計算得出任意正整數n以内中3或5的倍數的自然數之和。
輸入格式:
一個正整數n。
輸出格式:
n以内中3或5的倍數的自然數之和。
輸入樣例:
10
輸出樣例:
23
代碼:
sum =
n = int(raw_input())
for i in range(n):
if i % == :
sum += i
elif i % == :
sum += i
print sum
<div class="se-preview-section-delimiter"></div>
編寫程式,完成下列題目
題目内容:
10以内的素數2,3,5,7的和為17。要求計算得出任意正整數n以内的所有素數的和。
輸入格式:
一個正整數n。
輸出格式:
n以内的所有素數的和。
輸入樣例:
10
輸出樣例:
17
時間限制:500ms記憶體限制:32000kb
代碼:
<div class="se-preview-section-delimiter"></div>
編寫程式,完成下列題目
題目内容:
根據下列資訊計算在1901年1月1日至2000年12月31日間共有多少個星期天落在每月的第一天上?
a) 1900.1.1是星期一
b) 1月,3月,5月,7月,8月,10月和12月是31天
c) 4月,6月,9月和11月是30天
d) 2月是28天,在閏年是29天
e) 公元年數能被4整除且又不能被100整除是閏年
f) 能直接被400整除也是閏年
輸出格式:
一個正整數
時間限制:500ms記憶體限制:32000kb
代碼:
<div class="se-preview-section-delimiter"></div>
編寫程式,完成下列題目
題目内容:
數字197可以被稱為循環素數,因為197的三個數位循環移位後的數字:197,971,719均為素數。100以内這樣的數字包括13個,2,3,5,7,11,13,17,31,37,71,73,79,97。要求任意正整數n以内一共有多少個這樣的循環素數。
輸入格式:
一個正整數n。
輸出格式:
n以内循環素數的數目。
輸入樣例:
100
輸出樣例:
13
時間限制:2000ms記憶體限制:32000kb
代碼:
<div class="se-preview-section-delimiter"></div>
第四周: 函數與遞歸函數
第四周測驗
下列程式的輸出結果是:
def foo():
m =
def bar():
n =
return m + n
m = bar()
print m
foo()
<div class="se-preview-section-delimiter"></div>
正确答案:
3
針對以下的函數,正确的函數調用有哪些?
def foo(arg1, arg2='test', arg3=):
print arg1, arg2, arg3
<div class="se-preview-section-delimiter"></div>
A.foo(arg1 = 'where', arg2 = 'what')
B.foo(arg2 = 'what', )
C.foo('where')
D.foo('where','what')
正确答案:
A,C,D
下列說法是否正确:“函數中僅允許使用一條return語句”
答案:
錯
下列程式的輸出結果是?
def gcd(m, n):
r = m % n
if r == :
return n
else:
r = m % n
return gcd(n, r)
print gcd(, )
正确答案:
3
下面程式的輸出結果是:
def fib(n):
f1, f2 = ,
while f2 < n:
print f2,
f1, f2 = f2, f1 + f2
fib()
正确答案:
1 1 2 3 5 8
第4周 Online judge
一個斐波那契數列的前10項為:1, 2, 3, 5, 8, 13, 21, 34, 55, 89,對于一個最大項的值不超過n的斐波那契數列,求值為偶數的項的和。
輸入格式:
一個正整數n,如100。
輸出格式:
值為偶數的項的和,如 2 + 8 + 34 = 44。
輸入樣例:
100
輸出樣例:
44
疊代法:
#!/usr/bin/env python
#coding: utf-8
def fib(n):
if n == or n == :
return
else:
return fib(n - ) + fib(n - )
sum =
i =
num = int(raw_input())
while fib(i) < num:
if fib(i) % == :
sum += fib(i)
i +=
print sum
循環法:
#!/usr/bin/env python
#coding: utf-8
def fib_qiujie(n):
result =
sum =
i =
tmp1 =
tmp2 =
while result < n:
if i == or i == :
tmp1 =
tmp2 =
result =
elif i > :
if result % == :
sum += result
result = tmp2 +tmp1
tmp1 = tmp2
tmp2 = result
i +=
print sum
num = int(raw_input())
fib_qiujie(num)
若已知1800年1月1日為星期3,則對于一個給定的年份和月份,輸出這個月的最後一天是星期幾。
輸入格式:
兩行整數,分别代表年份和月份
輸出格式:
星期數,0代表星期日
輸入樣例:
2033
12
輸出樣例:
6
#!/usr/bin/env python
#coding: utf-8
def is_leap_year(Year):
if Year % == and Year % != or Year % == :
return True
else:
return False
def year_month_days(Year, Month):
if Month in (, , , , , , ):
return
elif Month in (, , , ):
return
elif is_leap_year(Year):
return
else:
return
def year_days(Year):
if is_leap_year(Year):
return
else:
return
def weekday_year_month(Year, Month):
Weekday =
for year in range(, Year):
Weekday = (Weekday + year_days(year) ) %
for month in range(, Month + ):
Weekday = (Weekday + year_month_days(Year, month)) %
print Weekday
Y = int(raw_input())
M = int(raw_input())
weekday_year_month(Y, M)
如在漢諾塔遊戲中,我們希望将塔A上的n個盤子,通過塔B移動到塔C,則對于任意輸入的n,給出移動的步驟。
輸入格式:
一個正整數n
輸出格式:
移動的步驟
輸入樣例:
2
輸出樣例:
Move 1 from A to B
Move 2 from A to C
Move 1 from B to C
#!/usr/bin/env python
#coding: utf-8
def hanoi(n, A, B, C):
if n == :
print 'Move', n, 'from', A, 'to', C
else:
hanoi(n - , A, C, B)
print 'Move', n, 'from', A, 'to', C
hanoi(n - , B, A, C)
num = int(raw_input())
hanoi(num, 'A', 'B', 'C')
第五周:字元串
第五周測驗
字元串s長度為奇數,則顯示中間字元的表達式為?
s[(len(s) - )/]
下載下傳并周遊 names.txt 檔案,輸出長度最長的回文人名。
相關代碼(轉:http://my.oschina.net/u/1431368/blog/305800):
def is_pamax(name):
low =
up = len(name)-
while low < up:
if name[low] != name[up]:
return False
low +=
up -=
return True
f = open("D:/names.txt")
max_length =
for line in f:
name = line.strip()
if is_pamax(name):
temp_length = len(name)
if temp_length > max_length:
max_length=temp_length
print max_length
f.close()
# maxlength=8
f = open("D:/names.txt")
for line in f:
name = line.strip()
if is_pamax(name):
if == len(name):
print name
f.close()
正确答案:
TREFFERT
當輸入為 ‘hello’時,寫出下列程式的輸出結果:
s = raw_input()
y =
for i in s:
y +=
print y, i,
正确答案:
1 h 2 e 3 l 4 l 5 o
當輸入為 ‘cbabc’ 時,下列程式的輸出結果為?
s1 = raw_input()
index =
s2 = ''
while index < len(s1) - :
if s1[index] > s1[index + ]:
s2 += s1[index]
else:
s2 = s2 *
index +=
print s2
正确答案:
cbcbcbcb
若 s = ‘What is your name’, 則 s[11:2:-2] 的結果為?
答案:
ro it
第五周作業 Online Judge
編寫程式,完成下列題目:
題目内容:
“Pig Latin”是一個英語兒童文字改寫遊戲,整個遊戲遵從下述規則:
(1). 元音字母是‘a’、‘e’、‘i’、‘o’、‘u’。字母‘y’在不是第一個字母的情況下,也被視作元音字母。其他字母均為輔音字母。例如,單詞“yearly”有三個元音字母(分别為‘e’、‘a’和最後一個‘y’)和三個輔音字母(第一個‘y’、‘r’和‘l’)。
(2). 如果英文單詞以元音字母開始,則在單詞末尾加入“hay”後得到“Pig Latin”對應單詞。例如,“ask”變為“askhay”,“use”變為“usehay”。
(3). 如果英文單詞以‘q’字母開始,并且後面有個字母‘u’,将“qu”移動到單詞末尾加入“ay”後得到“Pig Latin”對應單詞。例如,“quiet”變為“ietquay”,“quay”變為“ayquay”。
(4). 如果英文單詞以輔音字母開始,所有連續的輔音字母一起移動到單詞末尾加入“ay”後得到“Pig Latin”對應單詞。例如,“tomato”變為“omatotay”, “school” 變為“oolschay”,“you” 變為“ouyay”,“my” 變為“ymay ”,“ssssh” 變為“sssshay”。
(5). 如果英文單詞中有大寫字母,必須所有字母均轉換為小寫。
輸入格式:
一系列單詞,單詞之間使用空格分隔。
輸出格式:
按照以上規則轉化每個單詞,單詞之間使用空格分隔。
輸入樣例:
Welcome to the Python world Are you ready
輸出樣例:
elcomeway otay ethay ythonpay orldway arehay ouyay eadyray
代碼:
#!/usr/bin/env python
# coding: utf-8
import string
s = raw_input()
words = s.split()
newWords = ''
for word in words:
tmp = word.lower()
if tmp[] in 'aeiou':
tmp += 'hay'
elif tmp[] == 'q' and tmp[] == 'u':
tmp = tmp[:] + 'quay'
else:
tmp = tmp[:] + tmp[]
for i in range(, len(tmp)):
if tmp[i] in 'aeiouy':
break;
tmp = tmp[i:] + tmp[:i] + 'ay'
newWords += tmp + ' '
print newWords.strip()
編寫程式,完成下列題目:
題目内容:
依次判斷一系列給定的字元串是否為合法的 Python 辨別符。
輸入格式:
一系列字元串,每個字元串占一行。
輸出格式:
判斷每行字元串是否為合法的 Python 标示符,如果合法則輸出 True,否則輸出 False。
輸入樣例:
abc
_def
21gh
輸出樣例:
True
True
False
代碼:
#!/usr/bin/env python
# coding: utf-8
import re
tmp = raw_input()
while (tmp != ''):
if not re.search(u'^[_a-zA-Z0-9]+$',tmp):
print False
elif not re.search(u'^[_a-zA-Z]+$',tmp[]):
print False
else:
print True
tmp = raw_input()
編寫程式,完成下列題目:
題目内容:
依次計算一系列給定字元串的字母值,字母值為字元串中每個字母對應的編号值(A對應1,B對應2,以此類推,不區分大小寫字母,非字母字元對應的值為0)的總和。例如,Colin 的字母值為 3 + 15 + 12 + 9 + 14 = 53
輸入格式:
一系列字元串,每個字元串占一行。
輸出格式:
計算并輸出每行字元串的字母值。
輸入樣例:
Colin
ABC
輸出樣例:
53
6
代碼:
#!/usr/bin/env python
# coding: utf-8
tmp = raw_input()
while(tmp != ''):
num =
tmp = tmp.lower()
for c in tmp:
i = ord(c) -
if i < or i > :
i =
num += i
print num
tmp = raw_input()
第六周:清單與元組
第六周測驗
關于元組資料結構,下面描述正确的是
A.所有元素資料類型必須相同
B.插入的新元素放在最後
C.元組不支援切片操作
D.支援 in 運算符
正确答案:
D
下列代碼的輸出結果是?
list1 = [, , ]
list2 = list1
list3 = list2
list1.remove()
print list3[]
正确答案:
3
寫出下面程式的輸出結果:([9, 6, 5, 2, 1])
def func(lst):
for i in range(len(lst) - ):
for j in range(i + , len(lst)):
if lst[i] < lst[j] :
lst.insert(i, lst.pop(j))
else:
pass
else:
return lst
return -
lst1 = [, , , , , ]
lst2 = func(lst1)
lst2[:-] = []
print lst1
使用 Python 的算術運算符
+、-、、/、*(沒有%),和數字 2、3、4、5,構造一個表達式,使用所有的4個數字和3個運算符各一次,計算得到 28,在下面的空格中填入不含空格的表達式。提示:建構字元串,然後使用 Python 的 eval() 函數,它的參數為字元串,計算該字元串,并傳回計算結果,例如: eval(‘2*3+4’) 傳回整數 10。
正确答案:
2**3+4*5 或 2**3+5*4 或 4*5+2**3 或 5*4+2**3
有 3 個回文數字,第一個是兩位數,第二個是三位數。将這兩個數字相加得到第三個數字,這是個四位數。請問第三個數字是多少?
正确答案:
1001
第六周作業(Online Judge)
編寫程式,完成下列題目:
題目内容:
定義一個 prime() 函數求整數 n 以内(不包括n)的所有素數(1不是素數),并傳回一個按照升序排列的素數清單。使用遞歸來實作一個二分查找算法函數bi_search(),該函數實作檢索任意一個整數在 prime() 函數生成的素數清單中位置(索引)的功能,并傳回該位置的索引值,若該數不存在則傳回 -1。
輸入格式:
第一行為正整數 n
接下來若幹行為待查找的數字,每行輸入一個數字
輸出格式:
每行輸出相應的待查找數字的索引值
輸入樣例:
10
2
4
6
7
輸出樣例:
-1
-1
3
代碼:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# import re
# import itertools
import math
# import datetime
# import sys
# from PyQt4.QtCore import *
# from PyQt4.QtGui import *
# import numpy as np
# import matplotlib.pyplot as plt
# import copy
def primeindex(n):
l = []
def is_prime(n):
for i in xrange(, int(math.sqrt(n)) + ):
if n % i == :
return False
return True
for i in xrange(, n):
if is_prime(i):
l.append(i)
return l
def bi_search(lst, low, high, x):
while low <= high:
mid = (low + high) /
if lst[mid] == x:
return mid
elif lst[mid] > x:
return bi_search(lst, low, mid - , x)
else:
return bi_search(lst, low + , high, x)
return -
if __name__ == '__main__':
n = int(raw_input())
lp = primeindex(n)
high = len(lp) -
l = []
while True:
num = raw_input()
if num == '':
break
else:
l.append(int(num))
for i in l:
print bi_search(lp, , high, i)
編寫程式,完成下列題目:
題目内容:
帕斯卡三角形,又稱楊輝三角形是二項式系數在三角形中的一種幾何排列。帕斯卡三角形通常從第0行開始枚舉,并且每一行的數字是上一行相鄰兩個數字的和。在第0行隻寫一個數字1,然後構造下一行的元素。将上一行中數字左側上方和右側上方的數值相加。如果左側上方或者右側上方的數字不存在,用0替代。下面給出6行的帕斯卡三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
編寫程式,輸入帕斯卡三角形的高度 n,然後生成和上面例子一樣風格的三角形。
輸入格式:
一個正整數 n
輸出格式:
相應高度的帕斯卡三角形,兩個數字之間有一個空格
輸入樣例:
6
輸出樣例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
代碼:
#!/usr/bin/env python
# coding: utf-8
import datetime as dt
def pascalLine(num):
l = []
if num == :
return l
else:
for i in xrange(num):
l = [] + l[:] + []
l = [l[i] + l[i + ] for i in range(len(l) - )]
return l
if __name__ == '__main__':
n = int(raw_input())
for i in xrange(, n):
l = pascalLine(i)
s = ''
for j in l:
s = s + str(j) + ' '
print ' ' * (n - i - ) + s[:-]
:字典與集合
第七周測驗
(1分) 一個學生的資訊包括:學号、姓名、年齡、性别、電話。如果想儲存一系列學生,并且希望能夠快速的查找某一姓名的學生,則下列資料結構哪個更合适?
A.集合
B.元組
C.清單
D.字典
(1分) 一個學生的資訊包括:學号、姓名、年齡、性别、電話。如果想儲存一系列學生,并且希望能夠根據姓名對他們進行排序,則下列資料結構哪個更合适?
A.集合
B.字典
C.清單
D.元組
寫出下面程式的輸出結果:
d1 = {}
d1[2] = 10
d1['2'] = 20
d2 = {}
d2[2] = d1
d2['2'] = d2
print d2['2']['2']['2']['2'][2][2]
答案:
10
(1分) 下列程式的執行結果是:
def f2 (my_dict):
temp = ''
for key in my_dict:
if temp < key:
temp = key
return temp
a_dict = {'bill':,'rich':,'fred':,'walter':}
print f2(a_dict)
答案:
walter
(1分) 下列程式的輸出結果是:
def f1 (my_dict):
temp =
for value in my_dict.values():
temp = temp + value
return temp
a_dict={'bill':,'rich':,'fred':,'walter':}
print f1(a_dict)
答案:
33