求解一道Python编程题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求解一道Python编程题相关的知识,希望对你有一定的参考价值。

编写程序,实现以下功能:(1)创建空字典dic_student.(2)用户按行依次输入五名学生的姓名和年龄, 存入字典dic_student。 (3)按行输出字典dic_student中的内容, 姓名左对齐三位,和年龄之间用\t分隔。

斐波那契数列自第三个数开始,每个数均为之前两个数的和。

至少有两种方法来实现它。

最常见的利用迭代的方法,其核心思路是

fib(n) = fib(n-1) + fib(n-2)

而在n<2时直接,没有n-2,因此直接返回1:

def fib(num): return 1 if n<2 else fib(num-1) + fib(num-2)

这是一种很简单的实现。在阶梯数不大时,它很好用。当阶梯数很大时,因为二次手迭代,会比较慢。因此,可以在计算中保存中间值(1至n-1的阶梯数)来减少计算量:

这种方式在计算阶梯数10000时就可以保持不错的性能。如果需要多次计算该数列,则可以利用对象来保持这个中间值列表,下列代码中,Fibonaci实例只计算未曾计算的阶梯数,在重复调用时它更具优势:

class Fibonaci(object):

....history=[1, 1]

....def cacl(self, num):

........while len(self.history) <= num:

............self.history.append(self.history[-1] + self.history[-2])

........return self.history[num]

if __name__ == '__main__':

....fib = Fibonaci()

....print(fib.calc(100))

....print(fib.calc(32))

....print(fib.calc(10000))

参考技术A

dic_student =

count = 0

while count < 5:

    name = input()

    age = input()

    dic_student[name] = age

    count += 1

for i, j in dic_student.items():

    print('\\t'.format(i, j))

追问

题目中的左对齐三位要怎么操作呢

追答

姓名左对齐三位是什么意思?这样吗?

dic_student =

count = 0

while count < 5:

    name = input()

    age = input()

    dic_student[name] = age

    count += 1

for i, j in dic_student.items():

    print('    '.format(i, j))

本回答被提问者和网友采纳
参考技术B

记一次面试过程中的Python编程题

这几天面试过程中遇到一道Python编程题,题目如下:

面试中遇到一个Python编程问题:一个字符串,将里面的数字取出来,如果第一个数字前面是+,表示整个数字为正数,如果第一个数字前面是-,表示数字为负数,数字不能越界

1.使用循环,最笨的办法

# coding = \'utf-8\'
# @作者: zach
# @时间:2020/5/8 0008 17:36
# @文件:一道面试题.py
import sys
import re

digit = \'0123456789\'
str0 = \'-b-03dd2+349\'
symbol = \'+-\'

def get_digit(string):
    num = \'\'
    syb = \'\'
    #获取数字
    for i in range(len(string)):
        if string[i] in digit:
            num += string[i]
    #获取正负号
    for j in range(len(string)):
        if string[j] in symbol and string[j+1] in digit:
            syb = string[j]
            break
    num = syb + num
    num = int(num)
    #判断是否越界
    if abs(num) > sys.maxsize:
        return ""
        print("整数越界")
    else:
        return int(num)

n = get_digit(str0)
print(n)

  运行结果:

2.使用filter函数

# coding = \'utf-8\'
# @作者: zach
# @时间:2020/5/8 0008 17:36
# @文件:一道面试题.py
import sys
import re

#通过filter函数获取
num = filter(str.isdigit, str0)
num = \'\'.join(list(num))
print(num)
for j in range(len(str0)):
    if str0[j] in symbol and str0[j+1] in digit:
        sym = str0[j]
        break

num = sym + num
print(int(num))

  运行结果:

3.使用正则表达式获取

# coding = \'utf-8\'
# @作者: zach
# @时间:2020/5/8 0008 17:36
# @文件:一道面试题.py
import sys
import re

num = re.findall(r\'(-?\\d+)\', str0)
num = \'\'.join(num)
print(int(num))

  运行结果:

 

上面3种方法以第3种方法代码最少,效率最高。

各位读者还有什么方法,可以在后面评论

以上是关于求解一道Python编程题的主要内容,如果未能解决你的问题,请参考以下文章

求一道python编程题

关于Python编程问题

急求一道编程题

记一次面试过程中的Python编程题

记一次面试过程中的Python编程题

一道简单的Python数组编程题,可能并不简单