Python練習題(一)

字典及列表

  1. 題目:在這裏插入圖片描述
    代碼:
		n = int(input())
  		d = {}
  		for i in range(n):
  			a, b = (str(x) for x in input().split(' '))
  			d[b] = a
  		L = []
  		s = str(input())
  		while s != "dog":
  			L.append(d.get(s, "dog"))
  			s = str(input())
  		for c in L:
  			print(c)
  1. 題目:在這裏插入圖片描述
    在這裏插入圖片描述
    代碼:
  		L = []
  		n = int(input())
  		for i in range(n):
  			str_m = input()
  		    num = str_m.split(' ')
  		    if num[0] == "1":
  		        stu_id = num[1]
  		        flag = 1
  		        for temp in L:
  		            if stu_id == temp['id']:
  		                print("Students already exist")
  		                flag = 0
  		                break
  		            else:
  		                continue
  		        if flag == 1:
  			        stu = {}
          			stu['id'] = num[1]
         			stu['name'] = num[2]
         			stu['score1'] = num[3]
         			stu['score2'] = num[4]
          			stu['score3'] = num[5]
          			L.append(stu)
          			print("Add success")
  			elif num[0] == "2":
 			    stu_id = num[1]
  			    flag = 1
  			    for temp in L:
      			    if stu_id == temp['id']:
          			    index_id = L.index(temp)
          			    flag = 0
              			break
          			else:
              			continue
      			if flag == 1:
          			print("Students do not exist")
      			else:
      			    del L[index_id]
          			print("Delete success")
  			elif num[0] == "3":
      			stu_id = num[1]
      			flag = 1
      			for temp in L:
         			 if stu_id == temp['id']:
              			temp['score1'] = num[2]
              			temp['score2'] = num[3]
              			temp['score3'] = num[4]
              			print("Update success")
              			flag = 0
              			break
          			else:
              			continue
      			if flag == 1:
          			print("Students do not exist")
  			elif num[0] == "4":
      			stu_id = num[1]
      			flag = 1
      			for temp in L:
          			if stu_id == temp['id']:
              			print("Student ID:" + temp['id'])
              			print("Name:" + temp['name'])
              			print("Average Score:%.1f" % ((int(temp['score1']) + int(temp['score2']) + int(temp['score3']))/3))
              			flag = 0
              			break
          			else:
              			continue
      			if flag == 1:
          			print("Students do not exist")
  1. 題目:
    在這裏插入圖片描述
    代碼:
        c = input().lower()
        n = int(input())
        L=[]
        for i in range(n):
    		a = str(input())
    		if(a.lower().count(c) >= 3):
        		L.append(a)
		for i in range(-1, -len(L)-1, -1):#還可以用L.reverse()
    		print(L[i])
  1. 題目:
    在這裏插入圖片描述
    在這裏插入圖片描述
    代碼:
   		n = int(input())
   		L = []
   		for i in range(n):
   			L.append(input())
   		c = input()
   		L = sorted(list(filter(lambda i: i.startswith(c), L)))
   		for i in L:
   			print(i)
  1. 題目:
    在這裏插入圖片描述
    代碼:
   		n = int(input())
   		d = {}
   		for i in range(n):
   			a, b = map(str, input().split())
   			d.setdefault(b, []).append(a)
   		c = input()
   		L = sorted(d[c])
   		for i in L:
   			print(i)
  1. 題目:
    在這裏插入圖片描述
    代碼:
		import math
		a, b = map(int, input().split())
		l = []
		for i in range(a, b + 1):
    		for j in range(2, int(math.sqrt(i)) + 2):
		        if i % j == 0:
            		break
    		else:
        	ii = str(i)[::-1]
        	if str(i) == ii:
            	l.append(i)
		for i in l:
    		print(i)
  1. 題目:
    在這裏插入圖片描述
    在這裏插入圖片描述
    代碼:
		n = int(input())
		L = []
		for i in range(n):
    		b = {}
    		b['n'], b['s'], b['y'], b['m'], b['d'], b['v'], b['r'] = map(str, input().split())
		    L.append(b)
		L = sorted(L, key = lambda x : (int(x['v']), -int(x['y']), -int(x['m']), -int(x['d']), -int(x['s']), -int(x['r'])))
		for b in L:
    		print(b['n'], b['s'], b['y'], b['m'], b['d'], b['v'], b['r'])
  1. 題目:
    在這裏插入圖片描述
    在這裏插入圖片描述
    代碼:
		import re
		n = int(input())
		d = {}
		for i in range(n):
    		a = input()
    		d[''.join(re.findall('[A-Z]+', a))] = a
		for i in sorted(d):
    		print(d[i])

文件

  1. 題目:
    在這裏插入圖片描述
    代碼:
		# 繪製樣式
		def draw(y, x):
			if (y > 58 and y < 69) or (x > 58 and x < 69):
				return 15  # 對應十六進制的 F
			else:
				return 0

		class Readbmp:
    		file = open("black.bmp", "rb")
    		# 讀取 bmp 14字節的文件頭
    		fileheader = file.read(14)
    		# 讀取 bmp 40字節的位圖信息頭
    		infoheader = file.read(40)
    		# 讀取 bmp 64字節的調色板
    		colorpalette = file.read(64)
			file.close()

		img = Readbmp()
		# 新建 test.bmp 文件
		test = open("test.bmp", "wb")
		# 寫入源文件的文件頭
		test.write(img.fileheader)
		# 寫入源文件的位圖信息頭
		test.write(img.infoheader)
		# 寫入源文件的調色板
		test.write(img.colorpalette)
		# 着色
		for i in range(0, 128):
    		for j in range(0, 64):
        		if draw(i, 2*j) == 0 and draw(i, 2*j + 1) == 0:  # 黑色
            		test.write(b'\x00')
        		elif draw(i, 2*j) == 15 and draw(i, 2*j + 1) == 0:
            		test.write(b'\xF0')
        		elif draw(i, 2*j) == 0 and draw(i, 2*j + 1) == 15:
            		test.write(b'\x0F')
        		elif draw(i, 2*j) == 15 and draw(i, 2*j + 1) == 15:  # 白色
            		test.write(b'\xFF')
		#        elif draw(i, 2*j) == 1 or draw(i, 2*j + 1) == 1:  # 暗紅
		#            test.write(b'\x11')
		#        elif draw(i, 2*j) == 2 or draw(i, 2*j + 1) == 2:  # 綠色
		#            test.write(b'\x22')
		#        elif draw(i, 2*j) == 3 or draw(i, 2*j + 1) == 3:  # 灰綠
		#            test.write(b'\x33')
		#        elif draw(i, 2*j) == 4 or draw(i, 2*j + 1) == 4:  # 深藍
		#            test.write(b'\x44')
		#        elif draw(i, 2*j) == 5 or draw(i, 2*j + 1) == 5:  # 紫色
		#            test.write(b'\x55')
		#        elif draw(i, 2*j) == 6 or draw(i, 2*j + 1) == 6:  # 藍綠
		#            test.write(b'\x66')
		#        elif draw(i, 2*j) == 7 or draw(i, 2*j + 1) == 7:  # 灰色
		#            test.write(b'\x77')
		#        elif draw(i, 2*j) == 8 or draw(i, 2*j + 1) == 8:  # 灰白
		#            test.write(b'\x88')
		#        elif draw(i, 2*j) == 9 or draw(i, 2*j + 1) == 9:  # 亮紅
		#            test.write(b'\x99')
		#        elif draw(i, 2*j) == 10 or draw(i, 2*j + 1) == 10:  # 亮綠色
		#            test.write(b'\xAA')
		#        elif draw(i, 2*j) == 11 or draw(i, 2*j + 1) == 11:  # 亮黃色
		#            test.write(b'\xBB')
		#        elif draw(i, 2*j) == 12 or draw(i, 2*j + 1) == 12:  # 亮藍色
		#            test.write(b'\xCC')
		#        elif draw(i, 2*j) == 13 or draw(i, 2*j + 1) == 13:  # 粉紫色
		#            test.write(b'\xDD')
		#        elif draw(i, 2*j) == 14 or draw(i, 2*j + 1) == 14:  # 藍白
		#            test.write(b'\xEE')

		test.close()

  1. 題目:
    在這裏插入圖片描述
    代碼:
		def gcd(x, y):
    		while x % y != 0:
        		x, y = y, (x % y)
    		return y
    	
    	# 打印
    	def show(z, m):
    		z0 = z // gcd(z, m)
    		m0 = m // gcd(z, m)
        	print('{}/{}'.format(z0, m0))

		# 分數類
		class func:
    		def __init__(self, z, m):
        		self.z = z
        		self.m = m

    		def add(self, another):
        		z0 = self.z * another.m + self.m * another.z
        		m0 = self.m * another.m
        		show(z0, m0)

    		def sub(self, another):
        		z0 = self.z * another.m - self.m * another.z
        		m0 = self.m * another.m
        		show(z0, m0)

    		def mul(self, another):
        		z0 = self.z * another.z
        		m0 = self.m * another.m
        		show(z0, m0)

    		def div(self, another):
        		z0 = self.z * another.m
        		m0 = self.m * another.z
        		show(z0, m0)

    		def dao(self):
    			show(self.m, self.z)

		    def dec(self):
        		print("%.1f" % (self.z/self.m))


		a, b, c, d = map(int, input().split())
		f1 = func(a, b)
		f2 = func(c, d)
		show(f1.z, f1.m)
		show(f2.z, f2.m)
		f1.add(f2)
		f1.sub(f2)
		f1.mul(f2)
		f1.div(f2)
		f1.dao()
		f1.dec()

函數(全局變量)

  1. 題目:
    在這裏插入圖片描述
    在這裏插入圖片描述
    代碼:
		all = 0  # 點數之和
		countA = 0  # (可以使用“點數加10”的)A牌數量
		useA = 0  # 手牌A牌“點數加10”使用次數

		# 客觀價值————牌面,用於最後輸出時排序
		def obj(o):
    		return {
        		'A': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7,
        		'8': 8, '9': 9, '10': 10, 'J': 11, 'Q': 12, 'K': 13,
        		'Spade': 1, 'Heart': 2, 'Diamond': 3, 'Club': 4
    		}.get(o, 'error')

		# 主觀價值————玩家定義的牌面,用於計算點數(牌面A另作討論)
		def sub(s, x):
    		return {
        		'A': lambda x: x+1,
        		'2': lambda x: x+2,
        		'3': lambda x: x+3,
        		'4': lambda x: x+4,
        		'5': lambda x: x+5,
        		'6': lambda x: x+6,
        		'7': lambda x: x+7,
        		'8': lambda x: x+8,
        		'9': lambda x: x+9,
        		'10': lambda x: x+10,
        		'J': lambda x: x+10,
        		'Q': lambda x: x+10,
        		'K': lambda x: x+10
    		}[s](x)

		# 選擇是否消耗手牌A牌的“點數加10”
		def use(al, cA, uA):
    		global all, countA, useA
    		while al <= 21 and cA > 0:
        		al += 10
        		cA -= 1
        		uA += 1
    		while al > 21 and uA > 0:
        		al -= 10
        		cA += 1
        		uA -= 1
    		all = al
    		countA = cA
    		useA = uA

		# 讀入兩張牌
		str1, str2 = input().split()
		str3, str4 = input().split()
		if str2 == 'A':
    		countA += 1
		if str4 == 'A':
    		countA += 1
		all = sub(str2, all)
		all = sub(str4, all)
		use(all, countA, useA)

		c = []  # 花色
		n = []  # 牌面
		c.extend([str1, str3])
		n.extend([str2, str4])

		# 遊戲過程1:判斷是不是Blackjack
		if all == 21:
    		flag = 1
		else:
    		flag = 0

		# 遊戲過程2:要牌
		while all < 17:
    		str5, str6 = input().split()
    		c.append(str5)
    		n.append(str6)
    		print('Hit')  # 證明要牌
    		if str6 == 'A':
        		countA += 1
        		print('{} {} {}'.format(str5, 1, 11))
    		elif str6 == 'J' or str6 == 'K' or str6 == 'Q':
        		print('{} {}'.format(str5, 10))
    		else:
        		print(str5, obj(str6))
    		all = sub(str6, all)
    		use(all, countA, useA)

		# 遊戲過程3:停止要牌並結算
		print('Stand')
		k = len(c)
		for i in range(0, k):
    		for j in range(i + 1, k):
        		if obj(n[i]) > obj(n[j]):
            		c[i], c[j] = c[j], c[i]
            		n[i], n[j] = n[j], n[i]
        		elif obj(n[i]) == obj(n[j]) and obj(c[i]) > obj(c[j]):
            		c[i], c[j] = c[j], c[i]
		for i in range(0, k - 1):
    		print('{}{}'.format(c[i], n[i]), end=' ')
		print('{}{}'.format(c[k-1], n[k-1]))
		if all > 21:
    		print('Bust')
		elif flag == 1:
    		print('Blackjack')
		else:
    		print(all)
發佈了16 篇原創文章 · 獲贊 15 · 訪問量 2757
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章