第一題
有一分?jǐn)?shù)序列:2/1崖咨,3/2锻拘,5/3,8/5击蹲,13/8署拟,21/13…求出這個數(shù)列的前20項之和。
def func1():
fenzi = 2
fenmu = 1
li1 = [2]
for i in range(1,20):
#temp = fenzi
#fenzi = temp + fenmu
#fenmu = temp
fenmu, fenzi = fenzi, fenzi + fenmu
li1.append(fenzi/fenmu)
print(sum(li1))
func1()
第二題
給一個不多于5位的正整數(shù)歌豺,要求:一推穷、求它是幾位數(shù),二类咧、逆序打印出各位數(shù)字馒铃。
n = int(input('請輸入一個不超過五位的自然數(shù):'))
while 1:
if n == 0:
break
print(n % 10,end=' ')
n //= 10
第三題
有n個人圍成一圈,順序排號痕惋。從第一個人開始報數(shù)(從1到3報數(shù))区宇,凡報到3的人退出圈子,問最后留下的是原來第幾號的那位值戳。
n2 = int(input('請輸入人數(shù):'))
li2 = [x for x in range(1,n2+1)]
while n2 > 2:
li2.pop(2)
temp1 = li2[2:]
temp2 = li2[:2]
li2 = temp1 + temp2
n2 -= 1
li2.pop(0)
print(li2)
第四題
編寫一個程序议谷,根據(jù)控制臺輸入的事務(wù)日志計算銀行帳戶的凈金額。 事務(wù)日志格式如下所示:
D 100
W 200
D表示存款堕虹,而W表示提款卧晓。
假設(shè)為程序提供了以下輸入:
D 300
D 300
W 200
D 100
然后,輸出應(yīng)該是:
500
total = 0
while 1:
a = input('存款輸入D赴捞,取款輸入W逼裆,空格輸入金額;退出輸入Q:')
if a =='Q':
break
else:
temp = a.split(' ')
x = temp[0]
y = int(temp[1])
if x == 'D':
total += y
print('余額:',total)
elif x == 'W':
total -= y
print('余額:', total)
第五題
機器人從原點(0,0)開始在平面中移動赦政。 機器人可以通過給定的步驟向上胜宇,向下,向左和向右移動。 機器人運動的痕跡如下所示:
UP 5
DOWN 3
LETF 3
RIGHT 2
方向之后的數(shù)字是步驟桐愉。 請編寫一個程序來計算一系列運動和原點之后距當(dāng)前位置的距離封寞。如果距離是浮點數(shù),則只打印最接近的整數(shù)仅财。
例:如果給出以下元組作為程序的輸入:
UP 5
DOWN 3
LETF 3
RIGHT 2
然后狈究,程序的輸出應(yīng)該是:2
def robot():
x = 0
y = 0
final = 0
while 1:
direction = input('請輸入移動的方向(UP/DOWN/LEFT/RIGHT),結(jié)算按C,退出按Q:')
if direction in ['UP','DOWN','LEFT','RIGHT','C','Q']:
if direction != 'C' and direction != 'Q':
distance = int(input('請輸入移動的距離:'))
if direction == 'UP':
y += distance
elif direction == 'DOWN':
y -= distance
elif direction == 'LEFT':
x -= distance
elif direction == 'RIGHT':
x += distance
elif direction == 'C':
final = (float(abs(x)**2 + abs(y)**2))**0.5
print('機器人距離原點%0.3f'%final)
elif direction == 'Q':
break
else:
print('輸入有誤,重新輸入')
robot()
龜兔賽跑
(模擬龜兔賽跑)本練習(xí)中要模擬龜兔賽跑的寓言故事盏求。用隨機數(shù)產(chǎn)生器建立模擬龜兔賽跑的程序抖锥。 對手從70個方格的第1格開始起跑,每格表示跑道上的一個可能位置碎罚,終點線在第70格處磅废。 第一個到達(dá)終點的選手獎勵一個新鮮蘿卜和萵苣。兔子要在山坡上睡一覺荆烈,因此可能失去冠軍拯勉。 有一個每秒鐘滴答一次的鐘,程序應(yīng)按下列規(guī)則調(diào)整動物的位置:
用變量跟蹤動物的位置(即位置號1到70)憔购。每個動物從位置1開始宫峦,如果動物跌到第1格以外,則移回第1格玫鸟。 產(chǎn)生隨機整數(shù)1≤i≤10)导绷,以得到上表中的百分比。對于烏龜屎飘,1≤i≤5時快走妥曲,6≤i≤7時跌跤,8≤i≤10時慢走钦购,兔子也用相似的方法檐盟。 起跑時,打友禾摇: BANG !!!!! AND THEY' RE OFF !!!!! 時鐘每次滴答一下(即每個重復(fù)循環(huán))葵萎,打印第70格位置的一條線,顯示烏龜?shù)奈恢肨和兔子的位置H怨规。 如果兩者占用一格陌宿,則烏龜會咬兔子锡足,程序從該位置開始打印 OUCH!!!波丰。除T、H和OUCH!!!以外的其他打印位置都是空的舶得。 打印每一行之后掰烟,測試某個動物是否超過了第70格,如果是,則打印獲勝者,停止模擬纫骑。 如果烏龜贏蝎亚,則打印TORTOISE WINS!!!YAY!!!。如果兔子贏先馆,則打印Hare wins.Yush发框。 如果兩個動物同時贏,則可以同情弱者煤墙,讓烏龜贏梅惯,或者打印It's a tie。如果兩者都沒有贏仿野,則再次循環(huán)铣减,模擬下一個時鐘滴答。 準(zhǔn)備運行程序時脚作,讓一組拉拉隊看比賽葫哗,你會發(fā)現(xiàn)觀眾有多么投入。
import random
T = 0
H = 0
print('BANG!!!AND THEY\'RE OFF!!!!!')
while 1:
field = '-' * 70
if T >= 70 and H < 70:
print('TORTOISE WINS!!!YAY!!!')
break
elif T < 70 and H >= 70:
print('Hare wins.Yush')
break
elif T >= 70 and H >= 70:
print('It\'s a tie')
break
else:
i_T = random.randint(0,10) + 1
if 1 <= i_T <= 5:
T += 3
elif 6 <= i_T <= 7:
T -= 6
elif 8 <= i_T <= 10:
T += 1
i_H = random.randint(0,10) + 1
if 3 <= i_H <= 4:
H += 9
elif i_H == 5:
H -= 12
elif 6 <= i_H <= 8:
H += 1
elif 9 <= i_H <= 10:
H -= 2
if T == H:
field = field[0:T] + 'OUCH!!!' + field[T:]
else:
field = field[0:T] + 'T' + field[T:]
field = field[0:H] + 'H' + field[H:]
print(field)
猜單詞
需求
給定單詞數(shù)組(不少于10個)球涛,程序隨機選擇其中的一個劣针,并顯示單詞字符長度個橫線(-),用戶有5次猜測機會亿扁,用戶每次猜一個字母酿秸,如果正確,則將在相應(yīng)的位置上顯示出來魏烫;如錯誤則猜測機會減一辣苏,重復(fù)該過程,直至單詞的全部字母全部猜出或者猜測次數(shù)用完哄褒,最后宣布用戶勝利或失敗稀蟋。
實例
例如隨機選出的單詞是apple,程序先打印- - - - - 用戶輸入p呐赡,程序打印 -pp-- 用戶輸入e退客,程序打印 -pp-e 用戶輸入t,程序打印 -pp-e 您還有4次機會 用戶輸入a链嘀,程序打印 app-e 用戶輸入l萌狂,程序打印 apple 恭喜您,取得勝利怀泊。
import random
words = ['apple','python','exercise','basketball','program']
i = random.randint(0,4)
word = words[i]
chance = len(word)
temp =list('_'*len(word))
print(temp)
while 1:
if chance == 0:
print('失敗了')
break
else:
guess = input('請輸入一個字母:')
if guess not in word:
print('猜錯了')
chance -= 1
else:
# idx = 0
# for item in word:
# if guess == item:
# temp[idx] = guess
# idx += 1
for idx,c in enumerate(word):
if guess == c:
temp[idx] = guess
print(temp)
if temp == list(word):
print('猜對了')
break
chance -= 1
奧運會足球隊分組
已知有十六支男子足球隊參加2008 北京奧運會茫藏。寫一個程序,把這16 支球隊隨機分為4 個組霹琼。采用List集合和隨機數(shù)
2008 北京奧運會男足參賽國家:
科特迪瓦务傲,阿根廷凉当,澳大利亞,塞爾維亞售葡,荷蘭看杭,尼日利亞,日本挟伙,美國楼雹,中國,新西蘭尖阔,巴西烘豹,比利時,韓國诺祸,喀麥隆携悯,洪都拉斯,意大利
提示:分配一個筷笨,刪除一個
temp = '科特迪瓦憔鬼,阿根廷,澳大利亞胃夏,塞爾維亞轴或,荷蘭,尼日利亞仰禀,日本照雁,美國,中國答恶,新西蘭饺蚊,巴西,比利時悬嗓,韓國污呼,喀麥隆,洪都拉斯包竹,意大利'
li3 = {x for x in temp.split('燕酷,')}
print(li3)
A = []
B = []
C = []
D = []
while len(li3) >= 4:
A.append(li3.pop())
B.append(li3.pop())
C.append(li3.pop())
D.append(li3.pop())
print(A)
print(B)
print(C)
print(D)
省市縣查詢
根據(jù)用戶的輸入,產(chǎn)生多級列表的效果周瞎,中途可按b返回苗缩,q直接退出
dic1 = {
'山東' : {
'青島' : ['四方','黃島','嶗山','李滄','城陽'],
'濟南' : ['歷城','槐蔭','高新','長青','章丘'],
'煙臺' : ['龍口','萊山','牟平','蓬萊','招遠(yuǎn)']
},
'江蘇' : {
'蘇州' : ['滄浪','相城','平江','吳中','昆山'],
'南京' : ['白下','秦淮','浦口','棲霞','江寧'],
'無錫' : ['崇安','南長','北塘','錫山','江陰']
},
'浙江' : {
'杭州' : ['西湖','江干','下城','上城','濱江'],
'寧波' : ['海曙','江東','江北','鎮(zhèn)海','余姚'],
'溫州' : ['鹿城','龍灣','樂清','瑞安','永嘉']
},
'安徽' : {
'合肥' : ['蜀山','廬陽','包河','經(jīng)開','新站'],
'蕪湖' : ['鏡湖','鳩江','無為','三山','南陵'],
'蚌埠' : ['蚌山','龍子湖','淮上','懷遠(yuǎn)','固鎮(zhèn)']
},
'廣東' : {
'深圳' : ['羅湖','福田','南山','寶安','布吉'],
'廣州' : ['天河','珠海','越秀','白云','黃埔'],
'東莞' : ['莞城','長安','虎門','萬江','大朗']
}
}
while 1:
print('省'.center(50,'*'))
li_p = list(dic1)
for idx in range(len(li_p)):
print(idx + 1,'.',li_p[idx])
temp1 = input('請輸入省編號,或輸入q(quit)退出:')
if temp1 == 'q':
break
else:
while 1:
print('市'.center(50, '*'))
p = li_p[int(temp1)-1]
li_c = list(dic1[p])
for idx in range(len(li_c)):
print(idx + 1,'.',li_c[idx])
temp2 = input('請輸入市編號,或輸入b(back)返回上級菜單,或輸入q(quit)退出:')
if temp2 == 'q':
exit()
elif temp2 == 'b':
break
else:
while 1:
print('縣'.center(50, '*'))
c = li_c[int(temp2)-1]
li_x = dic1[p][c]
for idx in range(len(li_x)):
print(idx + 1,'.',li_x[idx])
temp3 = input('輸入b(back)返回上級菜單声诸,或輸入q(quit)退出:')
if temp3 == 'q':
exit()
elif temp3 == 'b':
break
else:
print('輸入非法酱讶!')
搖骰子
題目:寫一個搖骰子游戲,要求用戶壓大小双絮,賠率一賠一浴麻。
要求:三個骰子,搖大小囤攀,每次打印搖骰子數(shù)软免。
import random
total = 1000
a = 0
b = 0
c = 0
res = ''
print('游戲開始'.center(10,'-'))
while 1:
s_or_b = input('請下注, big or small:')
cost = int(input('下注金額:'))
a = random.randint(1,6)
b = random.randint(1,6)
c = random.randint(1,6)
print([a,b,c],a+b+c)
if a+b+c > 10:
res = 'big'
else:
res = 'small'
if s_or_b == res:
total += cost
print('恭喜焚挠, 你贏了%d元膏萧, 你現(xiàn)在的本金%d元'%(cost,total))
elif s_or_b != res:
total -= cost
print('很遺憾, 你輸了%d元蝌衔, 你現(xiàn)在的本金%d元'%(cost,total))
判斷變量名
1.變量名可以由字母,數(shù)字或者下劃線組成
2.變量名只能以字母或者下劃線開頭
print('1.變量名可以由字母,數(shù)字或者下劃線組成\n2.變量名只能以字母或者下劃線開頭')
s1 = input('請輸入變量名:')
if s1[0].isalpha() or s1[0] == '_':
for x in s1[1:]:
if not (x.isalnum() or x == '_'):
print('%s不是一個合法的變量名'%s1)
print('%s是一個合法的變量名'%s1)
else:
print('%s不是一個合法的變量名'%s1)
考勤記錄
給定一個字符串來代表一個學(xué)生的出勤紀(jì)錄榛泛,這個紀(jì)錄僅包含以下三個字符:
'A' : Absent,缺勤
'L' : Late噩斟,遲到
'P' : Present曹锨,到場
如果一個學(xué)生的出勤紀(jì)錄中不超過一個'A'(缺勤)并且不超過兩個連續(xù)的'L'(遲到),
那么這個學(xué)生會被獎賞。
你需要根據(jù)這個學(xué)生的出勤紀(jì)錄判斷他是否會被獎賞剃允。
示例 1:
輸入: "PPALLP"
輸出: True
示例 2:
輸入: "PPALLL"
輸出: False
print('考勤記錄規(guī)則'.center(20,'-'))
print(' \'A\' : Absent')
print(' \'L\' : Late')
print(' \'P\' : Present')
s2 = input('輸入:')
count1 = int(len(s2))
count2 = 0
if s2.count('A') <= 1:
while count1 > 0:
temp = s2[count1-3:count1]
if temp == 'LLL':
count2 += 1
count1 -= 1
if count2 <= 2:
print(True)
else:
print((False))
else:
print(False)
替換字符
輸入兩個字符串沛简,從第一字符串中刪除第二個字符串中所有的字符。
例如斥废,輸入”They are students.”和”aeiou”椒楣,
則刪除之后的第一個字符串變成”Thy r stdnts.”
輸入描述:
每個測試輸入包含2個字符串
輸出描述:
輸出刪除后的字符串
示例1:
輸入
They are students.
aeiou
輸出
Thy r stdnts.
str1 = input('請輸入字符串1:')
str2 = input('請輸入字符串2:')
for i in str2:
str1 = str1.replace(i,'')
print(str1)
計算均值
編寫一個函數(shù)cacluate, 可以接收任意多個數(shù),返回的是一個元組.
元組的第一個值為所有參數(shù)的平均值, 第二個值是大于平均值的所有數(shù).
def caculate(*num):
a = sum(num) / len(num)
b = []
# for i in num:
# if i > a:
# b.append(i)
b = list(filter(lambda x:x>a,num))
return (a,b)
print(caculate(1,2,3,4,5))
計數(shù)大小寫字母
編寫一個函數(shù), 接收字符串參數(shù), 返回一個元組,
元組的第一個值為大寫字母的個數(shù), 第二個值為小寫字母個數(shù).
例如
輸入:'hello WORLD'
輸出:(5,5)
def func1(*s):
temp = s[0]
a = 0
b = 0
for i in temp:
if i.isupper():
a += 1
elif i.islower():
b += 1
return (a,b)
str1 = input('請輸入字符串:')
print(func1(str1))
函數(shù)練習(xí)1
編寫函數(shù), 接收一個列表(包含30個1~100之間的隨機整形數(shù))
和一個整形數(shù)k, 返回一個新列表.
函數(shù)需求:
- 將列表下標(biāo)k之前對應(yīng)(不包含k)的元素逆序;
- 將下標(biāo)k及之后的元素逆序;
import random
li_num = []
for i in range(30):
num = random.randint(1,100)
li_num.append(num)
print(li_num)
def func2(l,k):
temp1 = l[:k]
temp2 = l[k:]
temp1.reverse()
temp2.reverse()
print(temp1)
print(temp2)
return
func2(li_num,10)
函數(shù)練習(xí)2 模擬輪盤抽獎游戲
輪盤分為三部分: 一等獎, 二等獎和三等獎;
輪盤轉(zhuǎn)的時候是隨機的,
如果范圍在[0,0.08)之間,代表一等獎,
如果范圍在[0.08,0.3)之間,代表2等獎,
如果范圍在[0.3, 1.0)之間,代表3等獎,
模擬本次活動1000人參加, 模擬游戲時需要準(zhǔn)備各等級獎品的個數(shù).
import random
def func3():
dic = {'一等獎':(0,0.08),'二等獎':(0.08,0.3),'三等獎':(0.3,1)}
li = []
a = 0
b = 0
c = 0
for i in range(1000):
num = random.random()
for k,v in dic.items():
if v[0] <= num and num <= v[1]:
li.append(k)
for i in li:
if i == '一等獎':
a += 1
elif i == '二等獎':
b += 1
elif i == '三等獎':
c += 1
print('一等獎:%d'%a)
print('二等獎:%d'%b)
print('三等獎:%d'%c)
func3()
函數(shù)練習(xí)3
對于一個十進(jìn)制的正整數(shù)牡肉, 定義f(n)為其各位數(shù)字的平方和捧灰,如:
f(13) = 1^2 + 3^2 = 10
f(207) = 2^2 + 0^2 + 7^2 = 53
下面給出三個正整數(shù)k,a, b,你需要計算有多少個正整數(shù)n滿足a<=n<=b,
且kf(n)=n
輸入:
第一行包含3個正整數(shù)k统锤,a, b, k>=1, a,b<=10*18, a<=b;
輸出:
輸出對應(yīng)的答案;
范例:
輸入: 51 5000 10000
輸出: 3
def func4(k,a,b):
count1 = 0
def f(n):
sum1 = 0
while n:
sum1 += (n % 10) ** 2
n //= 10
return sum1
for i in range(a,b+1):
if k * f(i) == i:
count1 += 1
return count1
print(func4(51, 5000, 10000))
綜合練習(xí)1 地鐵站
綜合練習(xí)
1.站編號和站名對應(yīng)關(guān)系如下:
1=朱辛莊
2=育知路
3=平西府
4=回龍觀東大街
5=霍營
6 育新
7 西小口
8 永泰莊
9 林萃橋
10 森林公園南門
11 奧林匹克公園
12 奧體中心
13 北土城
14 安華橋
15 安德里北街
//....
將以上對應(yīng)關(guān)系的數(shù)據(jù)存儲到map集合中毛俏,key:表示站編號,value:表示站名饲窿,并遍歷打印(可以不按順序打印):
第10站: 森林公園南門
第6站: 育新
第12站: 奧體中心
第13站: 北土城
//...
2.計算地鐵票價規(guī)則:
總行程 3站內(nèi)(包含3站)收費3元拧抖,
3站以上但不超過5站(包含5站)的收費4元,
5站以上的免绿,在4元的基礎(chǔ)上唧席,每多1站增加2元,
10元封頂嘲驾;
3.打印格式(需要對鍵盤錄入的上車站和到達(dá)站進(jìn)行判斷淌哟,如果沒有該站,提示重新輸入辽故,直到站名存在為止):
注意:每站需要2分鐘
請輸入上車站:
沙河
您輸入的上車站:沙河不存在徒仓,請重新輸入上車站:
上地
您輸入的上車站:上地不存在,請重新輸入上車站:
朱辛莊
請輸入到達(dá)站:
沙河
您輸入的到達(dá)站:沙河不存在誊垢,請重新輸入到達(dá)站:
西二旗
您輸入的到達(dá)站:西二旗不存在掉弛,請重新輸入到達(dá)站:
西小口
從朱辛莊到西小口共經(jīng)過6站收費6元症见,大約需要 12分鐘
str1 = '1=朱辛莊 2=育知路 3=平西府 4=回龍觀東大街 5=霍營 6=育新 7=西小口 8=永泰莊 9=林萃橋 10=森林公園南門 11=奧林匹克公園 12=奧體中心 13=北土城 14=安華橋 15=安德里北街'
li1 = str1.split(' ')
dic1 = {}
for i in li1:
a = i.split('=')
dic1[a[1]] = a[0]
for k,v in dic1.items():
print('第'+v+'站',k)
while 1:
start = input('請輸入上車站:')
if start not in dic1.keys():
print('您輸入的上車站:%s不存在,請重新輸入'%start)
continue
else:
while 1:
end = input('請輸入到達(dá)站:')
if end not in dic1.keys():
print('您輸入的到達(dá)站:%s不存在殃饿,請重新輸入'%end)
continue
else:
n = int(dic1[end]) - int(dic1[start])
t = n * 2
c = 0
if n <= 3:
c = 3
print('從%s到%s共經(jīng)過%d站收費%d元谋作,大約需要%d分鐘'%(start,end,n,c,t))
exit()
elif 3 > n >= 5:
c = 4
print('從%s到%s共經(jīng)過%d站收費%d元,大約需要%d分鐘' % (start, end, n, c, t))
exit()
elif n > 5:
c = 4 + (n - 5) * 2
if c > 10:
c = 10
print('從%s到%s共經(jīng)過%d站收費%d元乎芳,大約需要%d分鐘' % (start, end, n, c, t))
exit()
綜合練習(xí)2 獎學(xué)金
問題描述
某校的慣例是在每學(xué)期的期末考試之后發(fā)放獎學(xué)金遵蚜。發(fā)放的獎學(xué)金共有五種,獲取的條件各自不同:
院士獎學(xué)金奈惑,每人8000元吭净,期末平均成績高于80分(>80),并且在本學(xué)期內(nèi)發(fā)表1篇或1篇以上論文的學(xué)生均可獲得肴甸;
五四獎學(xué)金寂殉,每人4000元,期末平均成績高于85分(>85)原在,并且班級評議成績高于80分(>80)的學(xué)生均可獲得不撑;
成績優(yōu)秀獎,每人2000元晤斩,期末平均成績高于90分(>90)的學(xué)生均可獲得焕檬;
西部獎學(xué)金,每人1000元澳泵,期末平均成績高于85分(>85)的西部省份學(xué)生均可獲得实愚;
班級貢獻(xiàn)獎,每人850元兔辅,班級評議成績高于80分(>80)的學(xué)生干部均可獲得腊敲;
只要符合條件就可以得獎,每項獎學(xué)金的獲獎人數(shù)沒有限制维苔,每名學(xué)生也可以同時獲得多項獎學(xué)金碰辅。例如姚林的期末
平均成績是87分,班級評議成績82分介时,同時他還是一位學(xué)生干部没宾,那么他可以同時獲得五四獎學(xué)金和班級貢獻(xiàn)獎,獎金總數(shù)是4850元沸柔。
基本要求
現(xiàn)在給出若干學(xué)生的相關(guān)數(shù)據(jù)循衰,請計算哪些同學(xué)獲得的獎金總數(shù)最高(假設(shè)總有同學(xué)能滿足獲得獎學(xué)金的條件)。
輸入數(shù)據(jù)格式格式:
輸入的第一行是一個整數(shù)N(1 <= N <= 100)褐澎,表示學(xué)生的總數(shù)会钝。接下來的N行每行是一位學(xué)生的數(shù)據(jù),從左向右依次是姓名工三,期末
平均成績迁酸,班級評議成績先鱼,是否是學(xué)生干部,是否是西部省份學(xué)生奸鬓,以及發(fā)表的論文數(shù)焙畔。姓名是由大小寫英文字母組成的長度不超過
20的字符串(不含空格);期末平均成績和班級評議成績都是0到100之間的整數(shù)(包括0和100)全蝶;是否是學(xué)生干部和是否是西部省份
學(xué)生分別用一個字符表示闹蒜,Y表示是寺枉,N表示不是抑淫;發(fā)表的論文數(shù)是0到10的整數(shù)(包括0和10)。每兩個相鄰數(shù)據(jù)項之間用一個空格分隔姥闪。
輸出數(shù)據(jù)格式:
輸出包括三行始苇,第一行是獲得最多獎金的學(xué)生的姓名,第二行是這名學(xué)生獲得的獎金總數(shù)筐喳。如果有兩位或兩位以上的學(xué)生獲得的獎金最
多催式,輸出他們之中在輸入文件中出現(xiàn)最早的學(xué)生的姓名。第三行是這N個學(xué)生獲得的獎學(xué)金的總數(shù)避归。
N = int(input('請輸入學(xué)生的總數(shù):'))
dic1 = {}
dic2 = {}
yuanshi = []
wusi = []
chengji = []
xibu = []
banji = []
for i in range(N):
s_info = input('請輸入學(xué)生信息荣月,以空格間隔:')
s_li = s_info.split(' ')
dic1[s_li[0]] = s_li[1:]
print(dic1)
for k,v in dic1.items():
if int(v[0]) > 80 and int(v[4]) >= 1:
yuanshi.append(k)
if int(v[0]) > 85 and int(v[1]) > 80:
wusi.append(k)
if int(v[0]) > 90:
chengji.append(k)
if int(v[0]) > 85 and v[3] == 'Y':
xibu.append(k)
if int(v[1]) > 80 and v[2] == 'Y':
banji.append(k)
print(yuanshi)
print(wusi)
print(chengji)
print(xibu)
print(banji)
for k in dic1.keys():
dic2[k] = 0
print(dic2)
for k in dic1.keys():
if k in yuanshi:
dic2[k] += 8000
if k in wusi:
dic2[k] += 4000
if k in chengji:
dic2[k] += 2000
if k in xibu:
dic2[k] += 1000
if k in banji:
dic2[k] += 850
print(dic2)
li_sorted = list(sorted(dic2,key=lambda x:[x],reverse=False))
print(li_sorted)
total = len(yuanshi)*8000 + len(wusi)*4000 + len(chengji)*2000 + len(xibu)*1000 + len(banji)*850
print(li_sorted[0])
print(dic2[li_sorted[0]])
print(total)
綜合練習(xí)3 海龜畫圖
設(shè)想有一只機械海龜,它在程序的控制下在屋里四處爬行梳毙。海龜拿了一支筆哺窄,這只筆或朝
上或朝下,當(dāng)筆朝下時账锹,海龜用筆畫下自己的移動軌跡萌业,當(dāng)筆朝上時,海龜在移動過程中什么也不畫奸柬。
使用一個50x50的數(shù)組生年,并把數(shù)組初始化為0。從一個裝有命令的數(shù)組中讀取各種命令廓奕。不
管是筆朝上還是筆朝下抱婉,都要跟蹤海龜?shù)漠?dāng)前位置。假定海龜總是從地板上(0桌粉,0)出發(fā)
授段,并且開始時筆是朝上的。程序必須處理的一組命令如下:
命令 含義
1 筆朝上
2 筆朝下
3 右轉(zhuǎn)彎
4 左轉(zhuǎn)彎
5番甩,10 向前走10格(或其他的格數(shù))
6 打印50x50的數(shù)組
9 數(shù)據(jù)結(jié)束(標(biāo)記)
假設(shè)海龜現(xiàn)在處于靠近地板中心的某個位置侵贵,下面的“程序”繪制并打印出了一個12*12的方框。
2
5,12
3
5,12
3
5,12
3
5,12
1
6
9
在海龜爬行過程中缘薛,如果筆朝下窍育,把數(shù)組floor中對應(yīng)于海龜所處位置的元素置1卡睦。當(dāng)給出命令6(打印)后漱抓,在數(shù)組中元素為1的位置全部用#號顯示表锻,元素為0的位置全部用*號顯示。
編寫一個可以處理上述海龜命令的程序乞娄。
編寫一些其他的海龜命令瞬逊,用自己編寫的海龜命令處理程序解析,畫出有趣的形狀仪或,比如一個“日”字改鲫。
實例
上面的海龜命令凑阶,經(jīng)過我們編寫的程序解析后辩越,會打印出下面的圖形
import numpy as np
command = """
2
5,12
3
5,12
3
5,12
3
5,12
1
6
9
"""
# command = """ #中間畫口
# # 1
# # 5,19
# # 3
# # 5,19
# # 2
# # 4
# # 5,12
# # 3
# # 5,12
# # 3
# # 5,12
# # 3
# # 5,12
# # 1
# # 6
# # 9
# # """
# command = """ #中間畫4
# 1
# 5,19
# 3
# 5,19
# 2
# 5,12
# 4
# 5,12
# 4
# 5,12
# 3
# 3
# 5,24
# 1
# 6
# 9
# """
# command = """ #中間畫日
# 1
# 5,19
# 3
# 5,19
# 2
# 4
# 5,12
# 3
# 5,24
# 3
# 5,12
# 3
# 5,24
# 3
# 3
# 5,12
# 4
# 5,12
# 1
# 6
# 9
# """
lst = command.split()
print(lst)
floor = np.zeros((50,50),dtype='int32')
# print(map)
isPenUp = True
#0,1,2,3--->向右脓杉,向下,向左到旦,向上
direction = 0
xPos = 0
yPos = 0
def print_floor():
for i in range(floor.shape[0]):
for j in range(floor.shape[1]):
if floor[i,j] == 0:
print('*',end=' ')
else:
print('#',end=' ')
print()
for cmd in lst:
true_cmd_lst = cmd.split(',')
if len(true_cmd_lst) == 1:
true_cmd = int(true_cmd_lst[0])
if true_cmd == 1:
isPenUp = True
elif true_cmd == 2:
isPenUp = False
elif true_cmd == 3:
direction += 1
if direction > 3:
direction = 0
elif true_cmd == 4:
direction -= 1
if direction < 0:
direction = 3
elif true_cmd == 6:
print_floor()
elif true_cmd == 9:
break
else:
true_cmd = int(true_cmd_lst[0])
step = int(true_cmd_lst[1])
if true_cmd == 5:
#向右
if direction == 0:
target = xPos + step
if target >= 50:
target = 49
if not isPenUp:
floor[yPos,xPos:target] = 1
xPos = target - 1
else:
xPos = target - 1
# 向下
if direction == 1:
target = yPos + step
if target >= 50:
target = 49
if not isPenUp:
floor[yPos:target,xPos] = 1
yPos = target - 1
else:
yPos = target - 1
# 向左
if direction == 2:
target = xPos - (step - 1)
if target < 0:
target = 0
if not isPenUp:
floor[yPos, target:xPos] = 1
xPos = target
else:
xPos = target
# 向上
if direction == 3:
target = yPos - (step - 1)
if target < 0:
target = 0
if not isPenUp:
floor[target:yPos, xPos] = 1
yPos = target
else:
yPos = target