Python基础检测:20171105

第一周的预习结束了

效果并不理想,最后的检测也是有个别同学表现还可以.最后一次检测,除了依旧不是放在一个文件里,文件也没有标注作者从而导致我没办法一一回复外,有些问题写的不好意外.基本没什么毛病,摔!

本次问题是以小故事的形式展开并串联的,并没有什么特殊的意思.本人不善言谈,更不善于搭讪.拒撩.

答案与解析

第一题,公式转换,计算误差

# 1. 门前有两棵树,其中一棵是枣树,我每天早上起来都会吃掉原三分之一又一个枣,一个星期刚好吃完,请问我一共吃了几个枣? (循环)

def question_1(n=7):
    from fractions import Fraction
    x = 0
    for day in range(n, 0, -1):
        print("星期", day, "过完后剩下", x, "颗枣")
        x = (x + 1) /Fraction(2,3) # 使用分数,避免因为数值精度产生误差
    print("那么,第一天开始的时候就有:", x, "颗枣")

第一题演示结果
这道题的没什么难点,而且每个问题都给出了解题思路.从答题看,该题目主要有两个问题,一个是公式问题,简单来说(列一元方程,未知数转换到公式一侧.)然后没了,要是不会,我也没有办法.这可能不是适不适应我的节奏的问题,可能是适不适合编程的问题.第二,是数值精度的问题,因为问题求解中需要计算小数,而且连乘较多,不使用分数计算会导致误差在连乘过程中不断增加.

第二题,yield关键字

# 2. 另一个树也是枣树,一不小心打落了距离地面三米六一个枣,枣掉在地上,弹了起来,弹起来的距离是下落距离的1/2,,第十次弹起了多高?(用yield)

def length(n):
    l = 3600
    while n > 0:
        l = l / 2
        yield l
        n -= 1
        # print(l)


def question_2():
    print(list(length(10))[9])

之前的斐波那契数列已经有过了,不会的话,就反省一下是不是自己偷懒了

第三题,屏幕输入输出

# 3. 我枣吃多了肚子疼去医院看病,护士问我名字和性别对我说,"你好,XX先生/XX女士" (人机交互)


def question_3(bl_test=False, name="FontTian", sex='1'):
    if bl_test:
        name = input("名字?")
        sex = input("性别?")
    else:
        pass
    if sex in ['男', '1']:
        sex = '先生'
    else:
        sex = '女士'
    print("你好 ,%s%s" % (name, sex))

以前多次写过的,不会的还是反省一下自己是不是偷懒了吧.语法相对简单,到时我给的提示可能让之前没有留意前两次实例的人混淆……

第四题

我给出的是扩展的写法,使用了exec方法,实现这个

# 4. 医生给我开了药房,我把药方拿给护士小姐姐,拿药,付钱的时候小姐姐需要一个计算器(计算机,加减乘除,exit退出)

# 不考虑异常
# def question_4():
while True:
    x = input("变量1\n")
    if x == "exit":
        break
    y = input("运算符号\n")
    z = input("变量2\n")
    exec("ans = " + x + y + z)
    import time
    time.sleep(3)
    print(ans)

或者使用choice关键字也可以,这个其实才是最简单一个,因为是choice的教学例子,在各种地方也最为常见,除非没学:

def add(x, y):
   return x + y
def subtract(x, y):
   return x - y
def multiply(x, y):
   return x * y
def divide(x, y):
   return x / y
print("选择运算:")
print("1、相加")
print("2、相减")
print("3、相乘")
print("4、相除")
choice = input("输入你的选择(1/2/3/4):")
num1 = int(input("输入第一个数字: "))
num2 = int(input("输入第二个数字: "))
if choice == '1':
   print(num1,"+",num2,"=", add(num1,num2))
elif choice == '2':
   print(num1,"-",num2,"=", subtract(num1,num2))
elif choice == '3':
   print(num1,"*",num2,"=", multiply(num1,num2))
elif choice == '4':
   print(num1,"/",num2,"=", divide(num1,num2))
else:
   print("非法输入")

第五题

存储文件,老问题了,之前也考过一次,算是复习

# 5. 护士小姐姐温柔又漂亮,所以我和小姐姐要了手机号,我赶紧把手机号存了起来(输入你的手机号,并存入txt文件)

def question_5():
    MP = input("小姑娘,你很漂亮,能留个联系方式吗?\n")  # 突然发现,原来我不会搭讪......
    with open("/home/fonttian/Data/17_DS_AI/20171103_MP.txt", "w") as f:
        f.write(MP)

第六题

考逻辑,双层循环解决.

# 6. 回家之后,我摆弄着我的药,我先把他们办成了一个3*4 的矩阵,又变成了4*3 的矩阵,然后又摆了回来

def question_6():
    print("将3*4 矩阵 转化为 4*3 矩阵")
    martrix = [
        [1, 2, 3, 4],
        [5, 4, 6, 2],
        [9, 10, 12, 15]
    ]

    print([[row[i] for row in martrix] for i in range(4)])

第七题

# 7. 狗狗在一边看着我,似乎他明白了我是在犹豫,要不要给护士小姐姐打电话,所以狗狗用爪子轻轻地摆弄着我的手机,似乎是在鼓励我
# 于是我拿起手机(调用电话类),输入电话号码(传入参数),彩铃响起,是小星星(屏幕输出小星星,双层循环)


"""
    *
   ***
  *****
 *******
  *****
   ***
    *
"""

还是双层循环,没什么意思.但是比较考逻辑,往往阵亡在逻辑上的人不少
低级程序员看调用,中级程序员看逻辑,高级程序员看数学.

def question_7(n=3):
    n = 3
    for i in range(2):
        for j in range(n):
            if i == 0:
                print(" " * (n + 1 - j) + "*" * ((j + 1) * 2 - 1))
                if j == (n - 1):
                    print(" " + "*" * ((j + 2) * 2 - 1))
            else:
                # print(" " * (j) + "*" * ((j + 1) * 2 - 1))
                print(" " * ((j + 1) + 1) + "*" * ((n - j) * 2 - 1))

第八题

# 8. 然而电话并没有人接,我失望地放下手机.似乎有点饿,于是我打开冰箱
"""
我从上到下依次用我的24k钛合金狗眼扫描冰箱,一共发现了
[1,4,5,2,4,87,32,45,23,56,4,6,9,45,56,5,4,2,1,1,32,34,23,32]这些物品

请问我冰箱里一共有多少种不同的物品?
list,set转换获取
"""


def question_8(list=[1, 4, 5, 2, 4, 87, 32, 45, 23, 56, 4, 6, 9, 45, 56, 5, 4, 2, 1, 1, 32, 34, 23, 32]):
    print(len(set(list)))

list,set转换与其性质的问题,基本功属于知识储备层的问题.就算是看了一眼没想起来,百度一下总会会的,和前面的几道题一样,其实都是送分题,不会做,只是证明了,之前的努力要么不够要么路子不对.

第九题

# 9. 我最终从冰箱中拿出了[1,4,6,9,45,56]号食物,请问,我把他们放在一个盘子里,然后又把他们的顺序反了过来,但是只用了一个盘子(数组内存交换)

def question_9(list=[1, 4, 6, 9, 45, 56]):
    n = len(list)
    length = 0
    if n % 2 == 0:
        length = n / 2
    else:
        length = (n - 1) / 2

    for i in range(int(length)):
        list[i] = list[n - i - 1] + list[i]
        list[n - i - 1] = list[i] - list[n - i - 1]
        list[i] = list[i] - list[n - i - 1]

    print(list)

把我之前在面试的时候讲的问题,扩展了一下,整体难度一般,但还算不上送分题.

要点在于,判断数组的长度,因为存储的是数值,在进行长度判断之后,我们只需要加减就行了.

第十题

# 10. 看着盘子里的食物,我突然感觉少了点什么,于是我打开冰箱取出来食物23号,并按照原来的顺序(逆序)将它放在了合适的位置(list,插入)

def question_10(list=[1, 4, 6, 9, 45, 56], number=23):
    if number > list[len(list) - 1]:
        list.append(number)
    else:
        for i in range(len(list)):
            if list[i] > number:
                list.insert(i, number)
                break
                # print(i)
    print(list)

question_1()

这个问题就是进行插入,但是到时存在一个很严重的问题,插入位置错了,或者……自己看了看大小去直接插入(这种方式…..哎,算了无力吐槽.只能说,最起码完成该问题的目标了,只是该让计算机去做的事情,你去做了,很可惜.不是最好的解决方案),我给出的一般都是通用解决方案.这个都一个星期了,要是还是总是替计算机做部分工作的话,那我也不太好说,到底是偷懒,还是投机取巧了……

统一执行


# 11.刚刚拿起食物一号,我的手机突然响了,原来是她,来电话了......恩,所以现在我要去接电话了.

def exec_all_function(n=10):
    for i in range(n):
        if i + 1 == 4:
            continue
        exec("question_" + str(i + 1) + "()")

最后的话

关于函数式编程以及python语言自身的巧妙,还是希望各位,去自行体会吧.但是最起码把自己该做的做了.

posted @ 2017-11-05 18:55  FontTian  阅读(112)  评论(0编辑  收藏  举报