Python正式課第七天

練習(xí)

  1. 有一分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13…求出這個(gè)數(shù)列的前20項(xiàng)之和。
# 1.有一分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13…求出這個(gè)數(shù)列的前20項(xiàng)之和。
from functools import reduce

def compute():
    result = 0
    lst = []
    fenzi = 2
    fenmu = 1
    lst.append(fenzi / fenmu)
    for i in range(19):
        fenmu,fenzi = fenzi,fenmu+fenzi
        # tmp = fenzi
        # fenzi = tmp + fenmu
        # fenmu = tmp
        lst.append(fenzi / fenmu)

    # for k in lst:
    #     result += k

    result = reduce(lambda x,y: x+y,lst)

    return result

print(compute())
  1. 給一個(gè)不多于5位的正整數(shù),要求:一、求它是幾位數(shù),二、逆序打印出各位數(shù)字。
# 第一種方法
num = input('請(qǐng)輸入一個(gè)數(shù)字:')

num = int(num)
lst = []
while num > 0:
    gewei = num % 10
    lst.append(gewei)
    num = num // 10

print(len(lst))
print(lst)


num = 56789
lst = []
while num > 0:
    gewei = num % 10
    lst.append(str(gewei))
    num = num // 10

print(len(lst))
print(lst)

strnum = '@'.join(lst)
print(strnum)

email = 'zhangsan@qq.com'
infolst = email.split('@')
print(infolst)
print(infolst[0])
print(infolst[1])

email2 = '@'.join(infolst)
print(email)

# 第二種方法
num = input('請(qǐng)輸入一個(gè)數(shù)字:')
print(len(num))
num_reverse = num[::-1]
print(num_reverse)

  1. 有n個(gè)人圍成一圈,順序排號(hào)。從第一個(gè)人開(kāi)始報(bào)數(shù)(從1到3報(bào)數(shù)),凡報(bào)到3的人退出圈子,問(wèn)最后留下的是原來(lái)第幾號(hào)的那位。


num = int(input('請(qǐng)輸入人數(shù):'))

lst = list(range(1,num+1))
lst_len = len(lst)

while lst_len > 2:
    #刪除掉第三個(gè)元素
    lst.pop(2)
    #得到前面的子列表
    before = lst[:2]
    #得到后面的子列表
    lst = lst[2:]
    #合并后前兩個(gè)列表
    lst.extend(before)
    lst_len = len(lst)

print(lst[-1])
  1. 題:編寫(xiě)一個(gè)程序,根據(jù)控制臺(tái)輸入的事務(wù)日志計(jì)算銀行帳戶的凈金額。 事務(wù)日志格式如下所示:
    D 100
    W 200
    D表示存款,而W表示提款。
    假設(shè)為程序提供了以下輸入:
    D 300
    D 300
    W 200
    D 100
    然后,輸出應(yīng)該是:
    500
a = ''
if a:
    print('ddd')

# isMan = True
# tmp = not isMan
# print(tmp)

money = 0
while True:
    cmd = input('請(qǐng)輸入命令:')

    if not cmd:
        break

    # cmd = 'W 300'
    cmdlst = cmd.split(' ')
    if cmdlst[0] == 'D':
        if len(cmdlst) > 1:
            if cmdlst[1].isdigit():
                money += int(cmdlst[1])
    elif cmdlst[0] == 'W':
        if len(cmdlst) > 1:
            if cmdlst[1].isdigit():
                money -= int(cmdlst[1])
    else:
        pass

print(money)
print('end')

  1. 機(jī)器人從原點(diǎn)(0,0)開(kāi)始在平面中移動(dòng)。 機(jī)器人可以通過(guò)給定的步驟向上,向下,向左和向右移動(dòng)。 機(jī)器人運(yùn)動(dòng)的痕跡如下所示:
    UP 5
    DOWN 3
    LETF 3
    RIGHT 2
    方向之后的數(shù)字是步驟。 請(qǐng)編寫(xiě)一個(gè)程序來(lái)計(jì)算一系列運(yùn)動(dòng)和原點(diǎn)之后距當(dāng)前位置的距離。如果距離是浮點(diǎn)數(shù),則只打印最接近的整數(shù)。
    例:如果給出以下元組作為程序的輸入:
    UP 5
    DOWN 3
    LETF 3
    RIGHT 2
    然后,程序的輸出應(yīng)該是:2
import math

init_pos = [0, 0]
while True:
    cmd = input('請(qǐng)輸入命令:')

    if not cmd:
        break

    cmdlst = cmd.split(' ')
    if cmdlst[0] == 'U':
        init_pos[1] += int(cmdlst[1])
    elif cmdlst[0] == 'D':
        init_pos[1] -= int(cmdlst[1])
    elif cmdlst[0] == 'L':
        init_pos[0] -= int(cmdlst[1])
    elif cmdlst[0] == 'R':
        init_pos[0] += int(cmdlst[1])
    else:
        pass


distance = int(round(math.sqrt(init_pos[0]*init_pos[0] + init_pos[1]*init_pos[1])))

print(distance)
  1. 龜兔賽跑
    (模擬龜兔賽跑)本練習(xí)中要模擬龜兔賽跑的寓言故事。用隨機(jī)數(shù)產(chǎn)生器建立模擬龜兔賽跑的程序。 對(duì)手從70個(gè)方格的第1格開(kāi)始起跑,每格表示跑道上的一個(gè)可能位置,終點(diǎn)線在第70格處。 第一個(gè)到達(dá)終點(diǎn)的選手獎(jiǎng)勵(lì)一個(gè)新鮮蘿卜和萵苣。兔子要在山坡上睡一覺(jué),因此可能失去冠軍。 有一個(gè)每秒鐘滴答一次的鐘,程序應(yīng)按下列規(guī)則調(diào)整動(dòng)物的位置:
image.png

用變量跟蹤動(dòng)物的位置(即位置號(hào)1到70)。每個(gè)動(dòng)物從位置1開(kāi)始,如果動(dòng)物跌到第1格以外,則移回第1格。 產(chǎn)生隨機(jī)整數(shù)1≤i≤10),以得到上表中的百分比。對(duì)于烏龜,1≤i≤5時(shí)快走,6≤i≤7時(shí)跌跤,8≤i≤10時(shí)慢走,兔子也用相似的方法。 起跑時(shí),打?。?BANG !!!!! AND THEY' RE OFF !!!!! 時(shí)鐘每次滴答一下(即每個(gè)重復(fù)循環(huán)),打印第70格位置的一條線,顯示烏龜?shù)奈恢肨和兔子的位置H。 如果兩者占用一格,則烏龜會(huì)咬兔子,程序從該位置開(kāi)始打印 OUCH!!!。除T、H和OUCH!!!以外的其他打印位置都是空的。 打印每一行之后,測(cè)試某個(gè)動(dòng)物是否超過(guò)了第70格,如果是,則打印獲勝者,停止模擬。 如果烏龜贏,則打印TORTOISE WINS!!!YAY!!!。如果兔子贏,則打印Hare wins.Yush。 如果兩個(gè)動(dòng)物同時(shí)贏,則可以同情弱者,讓烏龜贏,或者打印It's a tie。如果兩者都沒(méi)有贏,則再次循環(huán),模擬下一個(gè)時(shí)鐘滴答。 準(zhǔn)備運(yùn)行程序時(shí),讓一組拉拉隊(duì)看比賽,你會(huì)發(fā)現(xiàn)觀眾有多么投入。

import time
from random import randint

print('begin')

hPos = 0
tPos = 0

while True:
    paodao = '_' * 70
    num = randint(1,10)

    if 1<=num<=5:
        tPos+=3
    elif 6<=num<=7:
        tPos-=6
    else:
        tPos+=1

    if num<=2:
        hPos=hPos
    elif 3<=num<=4:
        hPos+=9
    elif num==5:
        hPos-=12
    elif 6<=num<=8:
        hPos+=1
    else:
        hPos-=2


    if tPos < 0:
        tPos = 0
    if hPos < 0:
        hPos = 0

    if tPos > 70 or hPos > 70:
        break

    if tPos == hPos:
        # yao
        paodao = paodao[:tPos] + '咬' + paodao[tPos+1:]
    else:
        paodao = paodao[:tPos] + '龜' + paodao[tPos + 1:]
        paodao = paodao[:hPos] + '兔' + paodao[hPos + 1:]

    print(paodao)
    time.sleep(0.3)


if tPos > 70:
    print('龜贏')
else:
    print('兔贏')
  1. 猜單詞游戲
    需求
    給定單詞數(shù)組(不少于10個(gè)),程序隨機(jī)選擇其中的一個(gè),并顯示單詞字符長(zhǎng)度個(gè)橫線(-),用戶有5次猜測(cè)機(jī)會(huì),用戶每次猜一個(gè)字母,如果正確,則將在相應(yīng)的位置上顯示出來(lái);如錯(cuò)誤則猜測(cè)機(jī)會(huì)減一,重復(fù)該過(guò)程,直至單詞的全部字母全部猜出或者猜測(cè)次數(shù)用完,最后宣布用戶勝利或失敗。
    實(shí)例
    例如隨機(jī)選出的單詞是apple,程序先打印- - - - - 用戶輸入p,程序打印 -pp-- 用戶輸入e,程序打印 -pp-e 用戶輸入t,程序打印 -pp-e 您還有4次機(jī)會(huì) 用戶輸入a,程序打印 app-e 用戶輸入l,程序打印 apple 恭喜您,取得勝利。
import random
words = ['program','banana','tiger','policeman','interface']
#程序出單詞(隨機(jī))

idx = random.randint(0,len(words)-1)
word = words[1]

print(word)
toguess = '-' * len(word)

#顯示這個(gè)單詞給用戶(用-標(biāo)示),-的個(gè)數(shù)要等于單詞的長(zhǎng)度
# print('-' * len(word))
wordLst = list(toguess)
print(''.join(wordLst))

guessTime = 5
#開(kāi)始猜單詞
while True:
    if '-' not in wordLst:
        break

    if guessTime <= 0:
        break

    #讓用戶輸入一個(gè)要猜的字符
    c = input('請(qǐng)輸入要猜的字符:')

    if c in word:
        for i,w in enumerate(word):
            if w == c:
                wordLst[i] = c
    else:
        guessTime -= 1
        print(f'你還剩下{guessTime}次機(jī)會(huì)')


    print(''.join(wordLst))


if guessTime > 0:
    print('you win')
else:
    print('you lose')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一題 有一分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13…求出這個(gè)數(shù)列的前20項(xiàng)之和。 第二題 ...
    pandarking閱讀 1,324評(píng)論 0 0
  • 謝謝你來(lái)到我們的世界,當(dāng)剛知道你來(lái)的時(shí)候,有點(diǎn)不知所措,第一次在b超見(jiàn)你,莫名的喜悅,慢慢的,你騰騰的踢媽媽,我也...
    美小小妖閱讀 122評(píng)論 0 0
  • 在時(shí)代廣場(chǎng)上,一只蟋蟀,一只老鼠,一只貓成了好朋友。他們快樂(lè)的生活著,可是一個(gè)不好的事情發(fā)生了。蟋蟀在夢(mèng)里...
    kenny515閱讀 212評(píng)論 0 1
  • 圖文/無(wú)為跑者 傘花圓果長(zhǎng)蔓莖, 練就本領(lǐng)可食蟲(chóng)。 遠(yuǎn)觀近賞品奇果, 潤(rùn)肺止痛消浮腫。
    最家游閱讀 865評(píng)論 63 30
  • 生活的節(jié)奏自己掌控, 很多時(shí)候和他人無(wú)關(guān), 顧全自己手里的事情, 才有精力去關(guān)心他人。 沒(méi)有無(wú)緣無(wú)故的好, 也沒(méi)有...
    阿雨有花有云朵閱讀 258評(píng)論 0 5

友情鏈接更多精彩內(nèi)容