开发

Python正式课第七天

2019-11-12  本文已影响0人  code与有荣焉

练习

  1. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
# 1.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
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. 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
# 第一种方法
num = input('请输入一个数字:')

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('请输入一个数字:')
print(len(num))
num_reverse = num[::-1]
print(num_reverse)

  1. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。


num = int(input('请输入人数:'))

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

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

print(lst[-1])
  1. 题:编写一个程序,根据控制台输入的事务日志计算银行帐户的净金额。 事务日志格式如下所示:
    D 100
    W 200
    D表示存款,而W表示提款。
    假设为程序提供了以下输入:
    D 300
    D 300
    W 200
    D 100
    然后,输出应该是:
    500
a = ''
if a:
    print('ddd')

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

money = 0
while True:
    cmd = input('请输入命令:')

    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. 机器人从原点(0,0)开始在平面中移动。 机器人可以通过给定的步骤向上,向下,向左和向右移动。 机器人运动的痕迹如下所示:
    UP 5
    DOWN 3
    LETF 3
    RIGHT 2
    方向之后的数字是步骤。 请编写一个程序来计算一系列运动和原点之后距当前位置的距离。如果距离是浮点数,则只打印最接近的整数。
    例:如果给出以下元组作为程序的输入:
    UP 5
    DOWN 3
    LETF 3
    RIGHT 2
    然后,程序的输出应该是:2
import math

init_pos = [0, 0]
while True:
    cmd = input('请输入命令:')

    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. 龟兔赛跑
    (模拟龟兔赛跑)本练习中要模拟龟兔赛跑的寓言故事。用随机数产生器建立模拟龟兔赛跑的程序。 对手从70个方格的第1格开始起跑,每格表示跑道上的一个可能位置,终点线在第70格处。 第一个到达终点的选手奖励一个新鲜萝卜和莴苣。兔子要在山坡上睡一觉,因此可能失去冠军。 有一个每秒钟滴答一次的钟,程序应按下列规则调整动物的位置:
image.png

用变量跟踪动物的位置(即位置号1到70)。每个动物从位置1开始,如果动物跌到第1格以外,则移回第1格。 产生随机整数1≤i≤10),以得到上表中的百分比。对于乌龟,1≤i≤5时快走,6≤i≤7时跌跤,8≤i≤10时慢走,兔子也用相似的方法。 起跑时,打印: BANG !!!!! AND THEY' RE OFF !!!!! 时钟每次滴答一下(即每个重复循环),打印第70格位置的一条线,显示乌龟的位置T和兔子的位置H。 如果两者占用一格,则乌龟会咬兔子,程序从该位置开始打印 OUCH!!!。除T、H和OUCH!!!以外的其他打印位置都是空的。 打印每一行之后,测试某个动物是否超过了第70格,如果是,则打印获胜者,停止模拟。 如果乌龟赢,则打印TORTOISE WINS!!!YAY!!!。如果兔子赢,则打印Hare wins.Yush。 如果两个动物同时赢,则可以同情弱者,让乌龟赢,或者打印It's a tie。如果两者都没有赢,则再次循环,模拟下一个时钟滴答。 准备运行程序时,让一组拉拉队看比赛,你会发现观众有多么投入。

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. 猜单词游戏
    需求
    给定单词数组(不少于10个),程序随机选择其中的一个,并显示单词字符长度个横线(-),用户有5次猜测机会,用户每次猜一个字母,如果正确,则将在相应的位置上显示出来;如错误则猜测机会减一,重复该过程,直至单词的全部字母全部猜出或者猜测次数用完,最后宣布用户胜利或失败。
    实例
    例如随机选出的单词是apple,程序先打印- - - - - 用户输入p,程序打印 -pp-- 用户输入e,程序打印 -pp-e 用户输入t,程序打印 -pp-e 您还有4次机会 用户输入a,程序打印 app-e 用户输入l,程序打印 apple 恭喜您,取得胜利。
import random
words = ['program','banana','tiger','policeman','interface']
#程序出单词(随机)

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

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

#显示这个单词给用户(用-标示),-的个数要等于单词的长度
# print('-' * len(word))
wordLst = list(toguess)
print(''.join(wordLst))

guessTime = 5
#开始猜单词
while True:
    if '-' not in wordLst:
        break

    if guessTime <= 0:
        break

    #让用户输入一个要猜的字符
    c = input('请输入要猜的字符:')

    if c in word:
        for i,w in enumerate(word):
            if w == c:
                wordLst[i] = c
    else:
        guessTime -= 1
        print(f'你还剩下{guessTime}次机会')


    print(''.join(wordLst))


if guessTime > 0:
    print('you win')
else:
    print('you lose')
上一篇下一篇

猜你喜欢

热点阅读