天天看點

程式設計入門—Python第一周:程式設計的基礎知識第二周:資料類型、運算符與表達式、變量指派與簡單I/O操作第三周 程式控制結構第四周: 函數與遞歸函數第五周:字元串第六周:清單與元組:字典與集合

更多内容可移駕至我的獨立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