python期末複習題解析

一、填空題

1.Python標準庫math中用來計算平方根的函數是__________。

sqrt
計算平方根可以用pow(x,0.5)或者x**0.5,但這裏問的是那個函數專門用來求平方根

2.在python中__________表示空類型。

None表示空類型

  1. 列表、元組、字符串是Python的_________(有序?無序)序列。

有序
這裏的有序不是指裏面的元素遞增或遞減,而是指下標是有序的

4.查看變量類型的Python內置函數是________________。

type()
type()函數查看變量類型

  1. 查看變量內存地址的Python內置函數是_____________。

id()
id()函數可以查看變量的內存地址

  1. 表達式[1, 2, 3]*3的執行結果爲______________________。

[1, 2, 3, 1, 2, 3, 1, 2, 3]

  1. list(map(str, [1, 2, 3]))的執行結果爲_____________________。

[‘1’, ‘2’, ‘3’]
map(function, iterable, …)
function是指函數,這裏是str,iterable是指可迭代對象,這裏是[1,2,3],把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回。這裏就是把str()作用在列表上,返回一個新列表,其結果就是每個元素變成了str類型

  1. 已知 x = 3,並且id(x)的返回值爲 496103280,那麼執行語句 x += 6 之後,表達式 id(x) == 496103280 的值爲___________。

(False)
我們可以試一試 在這裏插入圖片描述
在這裏插入圖片描述
可以看到3和9已經放到了不相鄰的內存地址了

  1. 已知 x = 3,那麼執行語句 x *= 6 之後,x的值爲____。

(18)

  1. 表達式“[3] in [1, 2, 3, 4]”的值爲________________。

(False)

  1. 假設列表對象aList的值爲[3, 4, 5, 6, 7, 9, 11, 13, 15, 17],那麼切片aList[3:7]得到的值是______________________。

[6, 7, 9, 11]
下標從零開始,左閉右開

  1. 使用列表推導式生成包含10個數字5的列表,語句可以寫爲_______________。

[5 for i in range(10)]
題目中說用列表推導式,不然可以直接寫成[5]*10

  1. 假設有列表a = [‘name’, ‘age’, ‘sex’]和b = [‘Dong’, 38, ‘Male’],請使用一個語句將這兩個列表的內容轉換爲字典,並且以列表a中的元素爲“鍵”,以列表b中的元素爲“值”,這個語句可以寫爲_____________________。

c = dict(zip(a, b))
zip() 函數用於將可迭代的對象作爲參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。
在這裏插入圖片描述

  1. 任意長度的Python列表、元組和字符串中最後一個元素的下標爲________。

-1

  1. Python語句’’.join(list(‘hello world!’))執行的結果是____。

‘hello world!’
Python join() 方法用於將序列中的元素以指定的字符連接生成一個新的字符串。
在這裏插入圖片描述
但這裏’hello world!'是不用符號去join,所有還是原樣

  1. 轉義字符’\n’的含義是___________________。

回車換行

  1. Python語句list(range(1,10,3))執行結果爲____________。

[1, 4, 7]

  1. 切片操作list(range(6))[::2]執行結果爲________________。

[0, 2, 4]

  1. 表達式 ‘ab’ in ‘acbed’ 的值爲________。

False

  1. Python 3.x語句 print(1, 2, 3, sep=’:’) 的輸出結果爲________。

1:2:3

  1. 表達式 int(4**0.5) 的值爲____________。

2

  1. 達式 sorted([111, 2, 33], key=lambda x: -len(str(x))) 的值爲____________。

[111, 33, 2]
sorted(iterable, cmp=None, key=None, reverse=False)
iterable – 可迭代對象。
cmp – 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則爲,大於則返回1,小於則返回-1,等於則返回0。
key – 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
reverse – 排序規則,reverse = True 降序 , reverse = False 升序(默認)。
這裏key可看成是比較的一種方法,key是指求字符串x的相反數,用這個key值進行比較,111的key值是-3,2的key值是-1,33的key值是-2,
排序應該是-3,-2,-1,對應的就是[111,33,2]

  1. 已知列表對象x = [‘11’, ‘2’, ‘3’],則表達式 max(x) 的值爲__。

‘3’
爲什麼是‘3’而不是’11‘呢?
要注意的是這裏的不是數字,而是字符串,字符串的比較先從第一位開始,如果第一位相等,在比較第二位,題中第一位先進行比較,應該是’1‘,’2‘,’3’,當然是‘3’開頭的大。

  1. 表達式 min([‘11’, ‘2’, ‘3’]) 的值爲_________________。

‘11’
和上一題相同只是這個是比較誰更小

  1. 已知列表對象x = [‘11’, ‘2’, ‘3’],則表達式max(x, key=len) 的值__。

‘11’
給出了key ,那就是比較key的值,這題的key給出的方法是求長度(元素個數),分別求一下key值,爲2,1,1,所以最大的應該是‘11’

  1. 語句 x = (3,) 執行後x的值爲_______________。

(3,)
tuple類型

  1. 語句 x = (3) 執行後x的值爲________________。

3
int 類型

  1. x = {1:2},那麼執行語句 x[2] = 3之後,x的值爲________________。

{1: 2, 2: 3}

  1. 字典對象的_____________方法返回字典中的“鍵-值對”列表。>items()

  2. 使用列表推導式得到100以內所有能被13整除的數的代碼可以寫作____________。

[i for i in range(100) if i%13==0]

  1. 表達式 3 ** 2 的值爲_________。

9

  1. 表達式 3 * 2的值爲___________。

6

  1. 已知 x = [3, 5, 7],那麼執行語句 x[len(x):] = [1, 2]之後,x的值爲______________。

[3, 5, 7, 1, 2]
len(x)爲3
x[len(x):]就是x[3:],表示在第3個無素後添加1,2

  1. 表達式 list(zip([1,2], [3,4])) 的值爲_______________。

[(1, 3), (2, 4)])
zip()函數上面的題目介紹過了

  1. 已知 x = [1, 2, 3, 2, 3],執行語句 x.pop() 之後,x的值爲_____。

[1, 2, 3, 2]
pop() 函數用於移除列表中的一個元素(默認最後一個元素),並且返回該元素的值。

  1. 表達式 [x for x in [1,2,3,4,5] if x<3] 的值爲______。

[1, 2]

  1. 表達式 [index for index, value in enumerate([3,5,7,3,7]) if value == max([3,5,7,3,7])] 的值爲__________________。

[2, 4]
index指下標
這裏的max應該是7,也就是說如過值等於7,就把下標加入到列表中

  1. 已知 path = r’c:\test.html’,那麼表達式 path[:-4]+‘htm’ 的值爲_____。

‘c:\test.htm’
一個簡單的對字符串的操作,值得注意的是,下標從右往左數的時候是從-1開始的,而不是從0開始

  1. 表達式 ‘%d,%c’ % (65, 65) 的值爲________。

‘65,A’
65對應的字符是A

  1. 表達式 ‘The first:{1}, the second is {0}’.format(65,97) 的值爲_______。

‘The first:97, the second is 65’
1和0可以看成是下標

  1. 表達式 ‘:’.join(‘abcdefg’.split(‘cd’)) 的值爲______________。

‘ab:efg’
在cd處將字符分爲兩部分,在用:把這兩部分連接

  1. 表達式 isinstance(‘abcdefg’, str) 的值爲____________。

True
isinstance() 函數來判斷一個對象是否是一個已知的類型,類似 type()。 判斷給的數據是否與給的類型相一致

  1. 表達式 ‘Hello world. I like Python.’.find(‘python’) 的值爲__。-

-1
Python find() 方法檢測字符串中是否包含子字符串 str ,如果指定 beg(開始) 和 end(結束) 範圍,則檢查是否包含在指定範圍內,如果包含子字符串返回開始的索引值,否則返回-1。

  1. 表達式 ‘,’.join('a b ccc\n\n\nddd '.split()) 的值爲__________。

‘a,b,ccc,ddd’
Python split() 通過指定分隔符對字符串進行切片,如果參數 num 有指定值,則分隔 num+1 個子字符串
默認以空格爲分隔符,包含 \n
還可以指定num的值來規定分隔次數,默認爲-1,分隔所有

  1. 已知 x = ‘123’ 和 y = ‘456’,那麼表達式 x + y 的值爲____。

‘123456’

  1. 表達式 ‘abcab’.replace(‘a’,‘yy’) 的值爲___________。

‘yybcyyb’
把‘a’替換爲’yy’

  1. 已知 table = ‘’.maketrans(‘abcw’, ‘xyzc’),那麼表達式 ‘Hellow world’.translate(table) 的值爲______________________。

‘Helloc corld’
str.translate(table[, deletechars])
Python translate() 方法根據參數table給出的表(包含 256 個字符)轉換字符串的字符,要過濾掉的字符放到 del 參數中。
table – 翻譯表,翻譯表是通過maketrans方法轉換而來。
deletechars – 字符串中要過濾的字符列表。
在本題,就是把’a’替換爲’x’,‘b’替換爲’y’,‘c’替換爲’z’,‘w’替換爲’c’

  1. 已知x = {‘b’:1, ‘a’:2},那麼執行語句x.update({‘a’:3, ‘d’:4})之後,表達式sorted(x.items())的值爲____________________。

[(‘a’, 3), (‘b’, 1), (‘d’, 4)]

  1. 已知x = list(range(20)),那麼語句print(x[100:200])的輸出結果爲_______________。

[]

  1. 表達式sorted({‘a’:9, ‘b’:3, ‘c’:78}.values())的值爲_____________。

[3, 9, 78]
取出值之後還要排序

  1. type(1+2*3.14)的結果是:_____________。

<class ‘float’>

二、閱讀程序

  1. 寫出下面代碼的執行結果。
def Join(List, sep=None):	
	return (sep or ',').join(List)
print(Join(['a', 'b', 'c']))
print(Join(['a', 'b', 'c'],':'))

a,b,c
a: b :c
第二行沒有空格,不留空格,兩個冒號會變成🅱️

  1. 若k爲整數,下述while循環執行的次數爲:
k=1000
while k>1:
     print(k)
     k=k//2

9次
在這裏插入圖片描述
這裏看得出是執行了10次的,但爲什麼是9次呢,答案是在第9次的3.90625後k/2的結果是1.93125,題目規定的k是整數,取整後就是1,此時第10次不會再進行了、

  1. 寫出下面代碼的運行結果。
def Sum(a, b=3, c=5):
    return sum([a, b, c])
print(Sum(a=8, c=2))
print(Sum(8))
print(Sum(8,2))

13
16
15
b,c是有默認值的,當不給定bc值的時候,就取默認值

  1. 寫出下面代碼的運行結果。
i=1
while i+1:
   if i>4:
      print("%d"%i)
      i+=1
      break
   print("%d"%i)
   i+=1
   i+=1

1
3
5
需要注意的只有 while i+1:這個地方的 i 的值不會改變

  1. 寫出下面代碼的運行結果
def Sum(*p):
    return sum(p)
print(Sum(3, 5, 8))
print(Sum(8))
print(Sum(8, 2, 10))

16
8
20
*p指傳入一個序列
**p就是傳入一個字典

  1. 寫出下面代碼的運行結果
s = 0
for i in range(1,101):
    s += i
else:
    print(1)

1

  1. 寫出下面代碼的運行結果
s = 0
for i in range(1,101):
    s += i
    if  i == 50:
        print(s)
        break
else:
    print(1)

1275
當for循環正常結束時,纔會執行else語句,在本題,當i=50時,通過break結束循環,不會執行else語句

  1. 寫出下面代碼的運行結果
x = list(range(10))
for index, value in enumerate(x):
    if value == 3:
        x[index] = 5
else:
    print(x)

[0, 1, 2, 5, 4, 5, 6, 7, 8, 9]
這個循環是指找到值爲3的元素,並把值改爲5

9.閱讀下面的代碼,解釋其功能:

import string
x = string.ascii_letters +string.digits
import random
print(''.join(random.sample(x,10)))

輸出由英文字母大小寫或數字組成的長度爲10且不重複的隨機字符串

10.寫出下面代碼的運行結果

def demo():
    x = 5
x = 3
demo()
print(x)

demo()裏的x是demo()函數的局部變量,demo()函數結束這個x被回收,與要執行的x不是同一個

11.寫出下面代碼的運行結果

def demo(lst, k):
    if k < len(lst):
        return lst[k:] + lst[:k]
lst=[1,2,3,4,5,6]
demo(lst,4)

[5, 6, 1, 2, 3, 4]
返回一個列表,將傳進來的列表在k處前後交換

12.寫出下面代碼的運行結果

def foo(s):
   if s=="":
      return s
   else:
      return s[1:]+s[0]
print (foo('Happy New Year!'))

appy New Year!H
把字符串的第一個元素放到最後

13.寫出下面代碼的運行結果

l1=[1,2,3,6,87,3]
l2=['aa','bb','cc','dd','ee','ff']
d={}
for index in range(len(l1)):
    d[l1[index]]=l2[index]
print(d)

{1: ‘aa’, 2: ‘bb’, 3: ‘ff’, 6: ‘dd’, 87: ‘ee’}
d是一個字典,for循環就是給字典賦值的過程,以L1爲key,以L2爲value

14.寫出下面代碼的運行結果

list1=[1,2]
list2=list1[::]
list1[0]=3
print(list1,list2)

[3, 2] [1, 2]
list1[::]就是list1整體,但如果是list1[::-1]就是把list1逆序

15.寫出下面代碼的運行結果

age, subject,college=(24,"計算機","非重點")
if (age > 25 and subject=="電子信息工程") or (college=="重點" and subject=="電子信息工程" ) or (age<=28 and subject=="計算機"):
    print("恭喜,你已獲得我公司的面試機會!")
else:
   print("抱歉,你未達到面試要求")

恭喜,你已獲得我公司的面試機會!
滿足第三個條件

16.寫出下面代碼的運行結果

for num in range(2,10):
   if num % 2 == 0:
      continue
   print("Find a odd numer", num)

Find a odd numer 3
Find a odd numer 5
Find a odd numer 7
Find a odd numer 9

17.寫出下面代碼的運行結果

for i in range(1, 7):
   print(' ' * 2 * (6 - i), end='')
   for j in range(i, 0, -1):
      print(j, end=" ")
   print()

在這裏插入圖片描述
他這個地方打不出這麼多空格,只能放截圖了
第一個print控制空格
第二個print控制數字
第三個輸出換行,print的end參數默認是換行

  1. 下面程序輸入>>>rev(‘I love you’)返回值爲
def rev1(s):
    s=s.split()
    s1=' '.join(reversed(s))
   return s1

you love I
先按空格分成[I,love,you]三部分,再把這三部分逆序,然後用空格把三部分連接起來

  1. 閱讀程序,打印結果是
def addInterest(balance,rate):
    newBalance=balance*(1+rate)
    balance=newBalance
def main():
    amount=1000
    rate=0.05
    addInterest(amount,rate)
    print (amount)
main()

1000
amount傳進去就是形參了,形參的改變不會引起實參的改變,看一眼就知道是1000

  1. 閱讀程序,打印結果是
def demo(newitem,old_list=[]):
    old_list.append(newitem)
    return old_list
def main():
    print(demo('a'))
    print(demo('b'))
main(

[‘a’]
[‘a’, ‘b’]
'a’傳入後old_list就有元素a了,把’b’傳進去就有[‘a’,‘b’]了

  1. 閱讀程序,打印結果是
def func5(a, b, *c):
   print(a, b)
   print("length of c is %d, c is " % len(c), c)
func5(1, 2, 3, 4, 5, 6)

1 2
length of c is 4, c is (3, 4, 5, 6)

  1. 閱讀程序,打印結果是
def demo(*para):
    avg = sum(para)/len(para)
    g = [i for i in para if i>avg]
    return (avg,)+tuple(g)
print(demo(1,2,3,4))

(2.5, 3, 4)
demo()函數的意思是先求出傳入元素的平均值,返回由平均值和大於平均值的元素組成的元組

  1. 閱讀程序,打印結果是
def f(w=1,h=2):
   print(w,h)
f()
f(w=3)
f(h=7)
f(a=3)

1 2
3 2
1 7
錯誤
最後這個報錯信息明顯不是打印一個錯誤,但答案就是這麼寫的,我們就不多糾結了

  1. 閱讀程序,打印結果是
def sort(number1,number2):
   if number1<number2:
      return number1,number2
   else:
      return number2,number1
n1,n2=sort(3,2)
print('n1 is ',n1)
print('n2 is ',n2)

n1 is 2
n2 is 3

  1. 閱讀程序,打印結果是
def demo(m, n):
    if m>n:
        m, n = n, m
    p = m*n
    while m!=0:
        r = n%m
        n = m
        m = r
    return (n,p//n)
print( demo(20, 30)

(10, 60)
注意輸出格式,返回的是一個元組

三、 程序填空題

  1. 下面代碼的功能是,隨機生成50個介於[1,20]之間的整數,然後統計每個整數出現頻率。請把缺少的代碼補全
import random
x = [random.____________(1,20) for i in range(_______)]
r = dict()
for i in x:
    r[i] = r.get(i, _____)+1
for k, v in r.items():
   print(k, v)

分別填寫randint、50、0
randint用於產生隨機整數,
字典的get()方法,是通過鍵名找對對應的值,這裏通過把x的元素當作鍵名,把找到的次數當作值,每找到一次,value就加一,一次得到每個整數對應的頻率

  1. 生成包含1000個隨機字符的字符串,然後統計前20個高頻字符,最後以15個位左對齊輸出高頻字符,以5個位右對齊輸出個數。請把缺少的代碼補全。
import random
_____________
x = string.ascii_letters + string.digits + string.punctuation
y = [__________for i in range(1000)]
d = dict()
for ch in y:
   d[ch] = d.get(ch, 0) + 1
items = list(d.items())
items.sort(_________, reverse = True)
for i in range(20):
   word,count = items[i]
   print(________ % (word, count))
  1. import string
  2. randmo.choice(x)
    #隨機選擇序列x的一個元素
  3. key= lambda x:x[1]
    #這裏的x指items的每個元素,每個x又是一個元組,x[1]就是每個元組的第二個元素,元組的第一個元素是字符,第二個是字符對應的次數,從而實現通過次數的多少來實現排序
  4. “%-15s%5d”
  1. 用戶輸入5,打印如右圖字符金字塔圖形,請補全代碼:
    在這裏插入圖片描述
n = input('輸入行數:')
____________
for i in range(1, n + 1):
   print(_______, end = '')
   for j in range(1, 2 * i):
      print('&',___________ )
   print()
  1. n=int(n)
  2. ’ '*(n-i)
  3. end=’’
  1. 質因數分解,如輸入60,則得到60 = 2 * 2 * 3 * 5. 請補全代碼:
x = eval(input("請輸入小於1000的整數:"))
k = 2
_________________
while x > 1:
   if_________:
      print(k, end=" ")
      x = x // k
      if x > 1:
         print("*", end=" ")
   else:
      __________
  1. print(x,’=’,end=’’)
  2. x%k==0
  3. k+=15.
  1. 驗證哥德巴赫猜想:一個大於等於6的偶數可以表示爲兩個素數之和,請補全代碼。
import math
x = eval(input("輸入一個數"))
while x < 6 or x % 2 == 1:  # 大於6的偶數
   x = eval(input("輸入一個數"))
   for n1 in___________:
      m1 = int(math.sqrt(n1) + 1)
   for i in range(2, m1):  # 2-sqrt(n1)
      if_________:
         break
   else:
      ___________
      m2 = math.ceil(math.sqrt(n2) + 1)
      for j in range(2, m2):
         if n2 % j == 0 and j < n2:
            _____________
         else:
            print(x,'=',n1,'+',n2)
  1. range(3,x//2,2)
  2. n1%i==0
  3. n2 = x - n1
  4. break
  1. 右對齊九九乘法表,請補全代碼
    在這裏插入圖片描述
for i in range(1, 10):
   ___________________
      s1 = str(i) + '×' + str(j) + '=' + str(i * j)
      print(________________)
   print()
  1. for j in range(1,i+1):
  2. ‘%8s’%(s1),end=’’
  1. 輸出右邊圖形,請補充程序
    在這裏插入圖片描述
for i ————————————————:
   print((' * ' * (2 * i-1)).center(30))
for i in range(6, 0, -1):
   print(——————————————————)
  1. in range(6)
  2. (’ * ’ * (2 * i-1)).center(30)

前5行由第一個for循環控制

  1. 下面代碼判斷迴文串,請補全代碼:
s = '霧鎖山頭山鎖霧'
low = 0
high =____________
while low < high:
   if__________:  # 倒序和順序不一樣
      print(s, "不是迴文")
      __________
   low += 1
   _______________
else:
   print(s, "是迴文串")
  1. len(s)-1
  2. s[low]!=s[jhigh]
  3. break
  4. high-=1
  1. 輸出右邊圖形,請補充程序
    在這裏插入圖片描述
s='''I am a teacher! You are students!'''
print('='*30)
print('統計信息'.center(28))
print(_____________)
item_width=25
line=s.count('\n')+1
word=s.split()
char=list(s)     #包含空格、標點符號
w_num=0
for w in word:
   w_num+=____________
print('%-*s %5d'%(item_width-3,'行數',line))
print('%-*s %5d'%(_______________,'單詞數',len(word)))
print('%-*s %5d'%(item_width-10,'字符數(包含空格)',_____________))
print('%-*s %5d'%(item_width-11,'字符數(不包含空格)',w_num))
print('-'*30)
  1. ‘_’*30
  2. len(w)
  3. item_width-4
  4. len(char)

通過上下文的提示可知
item_width用來制定輸出大小
line用於求行數
char是該字符串轉化的列表
word是字符串的單詞
w_num通過求每個單詞的長度疊加求得字符數(不含空格)

  1. 輸出右邊圖形,請補充程序
    在這裏插入圖片描述
def demo(t):
   print([1])
   ______________
   line = [1, 1]
   for i in range(2, t):
      _______________
      for j in range(0, len(line) - 1):
         r.append(______________)
      line = [1] + r + [1]
      print(line)
demo(__________)
  1. print([1,1])
  2. r=[]
  3. line[j]+line[j+1]
  4. 10

老楊輝三角了

四、 編程題

  1. 編寫程序,在D盤根目錄下創建一個文本文件test.txt,並向其中寫入字符串hello world。
fp = open(r'D:\test.txt', 'a+')
print('hello world', file=fp)
fp.close()
  1. 編寫程序,生成一個包含20個隨機整數的列表,然後對其中偶數下標的元素進行降序排列,奇數下標的元素不變。(提示:使用切片和sort排序函數。)
import random
x = [random.randint(0,100) for i in range(20)]
print(x)
y = x[::2]
y.sort(reverse=True)
x[::2] = y
print(x)

通過[;;2]的方法把偶數下標對應的元素提取出來,先排好序在直接修改x列表的值

  1. 編寫函數,判斷一個數字是否爲素數,是則返回字符串YES,否則返回字符串NO。再編寫測試函數。
import math
def IsPrime(v):
    n = int(math.sqrt(v)+1)
    for i in range(2,n):
        if v%i==0:
            return 'No'
    else:
        return 'Yes'
print(IsPrime(77))

sqrt()函數是求平方根
最後的測試可以是其它數字

  1. 編寫函數,模擬Python內置函數sorted(lst)。
def sorted(v):
    t = v[::]
    r = []
    while t:
        tt = min(t)
        r.append(tt)
        t.remove(tt)
    return r
print(sorted([1,3,2,4]))

先選出最小的,加入到列表r中,再把這個最小的剔除,重複上述步驟,返回r列表

  1. 編寫程序,生成包含20個隨機數的列表,然後將前10個元素升序排列,後10個元素降序排列,並輸出結果。
import random
x = [random.randint(0,100) for i in range(20)]
print(x)
y = x[0:10]
y.sort()
x[0:10] = y
y = x[10:20]
y.sort(reverse=True)
x[10:20] = y

還是sort()函數好,數據結構的什麼冒泡排序,簡單選擇排序,希爾排序,快速排序學得腦闊痛

  1. 編寫程序,運行後用戶輸入4位整數作爲年份,判斷其是否爲閏年。如果年份能被400整除,則爲閏年;如果年份能被4整除但不能被100整除也爲閏年
x = input('Please input an integer of 4 digits meaning the year:')
x = eval(x)
if x%400==0 or (x%4==0 and not x%100==0):
    print('Yes')
else:
    print('No')
  1. 編寫程序,實現分段函數計算,如下表所示。
    在這裏插入圖片描述
x = input('Please input x:')
x = eval(x)
if x<0 or x>=20:
    print(0)
elif 0<=x<5:
    print(x)
elif 5<=x<10:
    print(3*x-5)
elif 10<=x<20 :
   print(0.5*x-2)
  1. 已知有一個包含一些同學成績的字典,計算成績的最高分、最低分、平均分,並查找最高分同學,最後打印最高分、最低分、平均分、最高分同學。
scores = {"Zhang San": 45, "Li Si": 78, "Wang Wu": 40, "Zhou Liu": 96, "Zhao Qi": 65, "Sun Ba": 90, "Zheng Jiu": 78, "Wu Shi": 99, "Dong Shiyi": 60}
highest = max(scores.values())
lowest = min(scores.values())
average = sum(scores.values())/len(scores)
highestPerson = [name for name, score in scores.items() if score == highest] #分行
print(highest,lowest,average,highestPerson)
  1. 統計不及格的學生及成績,要求:給定一些學生姓名和成績;詢問用戶是否還需要輸入更多的學生姓名和成績,用戶回答是就繼續輸入,繼續詢問;打印所有補考學生名單和成績。
d=[["張三",76],["李四",45],["王五",83],["鄭六",66],['a',54],['c',68],['b',89]]
s1=input("輸入數據Y or N:").strip()#去掉前後空格
while s1 == 'Y':
    s2=input("請輸入學生及成績(空格隔開)")
    name,grade=s2.split()
    d.append([name,grade])
    #d[name]=int(grade)
    s1=input("繼續輸入Y or N:").strip()
else:    
    print(d) 
print("不及格的名單:")
for name,grade in d:
    if float(grade) < 60:
             print("姓名:",name,"\t","成績:",grade)
  1. 由用戶一個一個輸入一個數值型列表,然後將每個元素逐一打印。
lst=[]
n=eval(input('請輸入數字個數:'))
for i in range(n):
     number=eval(input('請輸入數字:'))
     lst.append(number)
for value in lst:
    print(value,end=' ')
  1. 序列求和,n通過用戶輸入:
    在這裏插入圖片描述
n=int(input("請輸入N的值:"))
s=0
fh=1
for i in range(1,n+1):
   s += fh * 1 / i  # 求和語句
   fh = -fh  # 正負交替
print("1-1/2+1/3-1/4...+(-1)^(n-1)/n=",s,i)
  1. 生成一個包含50個兩位隨機整數的列表,然後刪除其中的所有奇數(提示從後向前刪)
import random
lst=[random.randint(1,100) for i in range(50)]
print('50個隨機兩位整數:',lst)
k=len(lst)-1
for i in range(k,-1,-1):#從後往前刪,減少列表元素移動
    if lst[i] % 2==1:
         lst.pop(i)
print("偶數爲",lst)
  1. 愷撒(kaisa)密碼:原文ABCDEFGHIJKLMNOPQRSTUVWXYZ,對應的密文爲:DEFGHIJKLMNOPQRSTUVWXYZABC,請設計程序實現之。
plaincode = input('請輸入明文:')
for p in plaincode:
   if 'a' <= p <= 'z':
      c = chr(ord('a') + (ord(p) - ord('a') + 3) % 26)
      # ord是字符編碼的值,都減掉ord('A')纔可以得到字符的順序0-25
      print(c, end='')
   elif 'A' <= p <= 'Z':
      c = chr(ord('A') + (ord(p) - ord('A') + 3) % 26)
      print(c, end='')
   else:
      print(p, end='')
  1. 如果一個字符串從前往後和從後往前讀時是一樣的,那麼這個字符串就是迴文串。請編寫一個函數判斷是否爲迴文串,同時編寫測試代碼檢驗迴文串。(提示使用切片,注意列表索引的使用)
def isPalindrome(s):
   if s == s[::-1]:  # 切片操作,倒序和順序一樣
      return True
   else:
      return False

s=input('input a string:')
if  isPalindrome(s):
   print('%s is a palindrome!'  % s)
else:
   print('%s is not a palindrome!'%s)
  1. 輸入一串字符,統計每個字符數,用字典輸出.
s=input("輸入一行字符串或句子:")
char_counts={}
for char in s:
        char_counts[char]= char_counts.get(char,0)+1
print(char_counts)
  1. 生成包含100個隨機字符的字符串,然後統計前20個高頻字符.
import string,random
str1=string.ascii_letters +string.digits
str1=str1.lower()
str2=[random.choice (str1) for i in range(100)]
print(str2)
str_count={}
for char in str2:
    str_count[char]=str_count.get(char,0)+1
print(str_count)
items=list(str_count.items())
items.sort(key=lambda x:x[1],reverse=True)   #以數量降序
for i in range(20):
   word, count = items[i]
   print("%-15s  %5d" % (word, count))  # -表示左對齊,s表字符,d表示整數
  1. 編程,如圖,在文件score.txt中寫入五名學生的姓名、學號和3門考試課的成績,然後將所有兩門以上(含兩門)課程不及格的學生信息輸出到文件bad.txt、其他學生信息輸出到pass.txt。

在這裏插入圖片描述

fw = open(r'score2.txt', 'w')
s = ['張三,', ' 2017010101,', ' 66,', ' 77,', ' 88', '\n']
fw.writelines(s)
fw.write('李四, 2017010102, 60, 70, 80\n')
fw.write('王五, 2017010103, 64, 73, 82\n')
fw.write('趙六, 2017010104, 56, 67, 48\n')
fw.write('錢七, 2017010105, 46, 57, 68\n')
fw.close()

f1 = open(r'score2.txt', 'r')
f2 = open(r'bad2.txt', 'w')
f3 = open(r'pass2.txt', 'w')

lines = f1.readlines()
for line in lines:
   data = list(line.split(','))
   print(data)  # ['張三', ' 2017010101', ' 66', ' 77', ' 88\n']
   k = 0
   for i in data[2:]:
      if int(i) < 60:
         k += 1
   if k >= 2:  # 兩門以上(含兩門)課程不及格
      f2.write(line)
   else:
      f3.write(line)
f1.close()
f2.close()
f3.close()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章