練習(xí)
- 有一分?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())
- 給一個(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)
- 有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])
- 題:編寫(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')
- 機(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)
- 龜兔賽跑
(模擬龜兔賽跑)本練習(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('兔贏')
- 猜單詞游戲
需求
給定單詞數(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')