練習(xí)題

第一題

有一分?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)整動物的位置:

image.png

用變量跟蹤動物的位置(即位置號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 北京奧運會男足參賽國家:

科特迪瓦务傲,阿根廷凉当,澳大利亞,塞爾維亞售葡,荷蘭看杭,尼日利亞,日本挟伙,美國楼雹,中國,新西蘭尖阔,巴西烘豹,比利時,韓國诺祸,喀麥隆携悯,洪都拉斯,意大利

提示:分配一個筷笨,刪除一個


image.png
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)過我們編寫的程序解析后辩越,會打印出下面的圖形

image.png
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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旨巷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子添忘,更是在濱河造成了極大的恐慌采呐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搁骑,死亡現(xiàn)場離奇詭異斧吐,居然都是意外死亡,警方通過查閱死者的電腦和手機靶病,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門会通,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人娄周,你說我怎么就攤上這事涕侈。” “怎么了煤辨?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵裳涛,是天一觀的道長。 經(jīng)常有香客問我众辨,道長端三,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任鹃彻,我火速辦了婚禮郊闯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己团赁,他們只是感情好育拨,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著欢摄,像睡著了一般熬丧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怀挠,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天析蝴,我揣著相機與錄音,去河邊找鬼绿淋。 笑死闷畸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的躬它。 我是一名探鬼主播腾啥,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼东涡,長吁一口氣:“原來是場噩夢啊……” “哼冯吓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起疮跑,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤组贺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后祖娘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體失尖,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年渐苏,在試婚紗的時候發(fā)現(xiàn)自己被綠了掀潮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡琼富,死狀恐怖仪吧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鞠眉,我是刑警寧澤薯鼠,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站械蹋,受9級特大地震影響出皇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哗戈,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一郊艘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦纱注、人聲如沸步做。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽全度。三九已至,卻和暖如春斥滤,著一層夾襖步出監(jiān)牢的瞬間将鸵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工佑颇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留顶掉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓挑胸,卻偏偏與公主長得像痒筒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茬贵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容