Python基础 函数类题型 (PYTHON123)

1.

阶乘计算


编写函数,计算任意数据n的阶乘(不使用递归)‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

并使用该函数,计算一个输入数据的阶乘值

解法1:直接调用Python阶乘函数库

import math
a=input()
value = math.factorial(int(a))
print(value)

简述思路:通过a变量接收输入值,再调用阶乘函数math.factorial(),需注意的是input()输入后默认返回值为字符串类型,可通过强制转换int()转变为整形,或者用eval()函数对input()值进行转换

import math
a=eval(input())
value = math.factorial(a)
print(value)

解法2:循环

n = int(input())
ns = 1
for i in range(1,n+1):
    ns = ns*i
print(ns)

简述思路:就是定义一个变量ns赋予一个初始值1,然后利用for循环直接累乘得到最终结果。

2.

递归函数


编写递归函数,计算任意数据n的阶乘‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

并使用该函数,计算一个输入数据的阶乘值

解法1:

b=eval(input())

def factorial(b):
    if b==1:
        return 1
    else:
        return b * factorial(b - 1)
print(factorial(b))

简述思路:先定义递归函数然后通过用户输入值对自身进行递归调用

解法2:

def p(n):
    x=1
    i=1
    while(i<=n):
        x=x*i
        i=i+1
    return x
n=int(input("请输入一个整数:"))
print(n,"!的值为:",p(n))

简述思路:利用了循环的算法来进行阶乘计算

3.

进制转换


编写函数:把任意十进制整数n转换成k进制数(不使用递归)

先补充下进制转换相关内容(Python相关函数)

2进制8进制10进制16进制
2进制_bin(int(n,8))bin(int(n,10))bin(int(n,16))
8进制oct(int(n,2))_oct(int(n,10))oct(int(n,16))
10进制int(n,2)int(n,8)_int(n,16)
16进制hex(int(n,2))hex(int(n,8))hex(int(n,10))_

2进制转换成其他进制:

2进制转换成8进制:oct(int(n,2))

n=input()
print(oct(int(n,2)))

其他进制转换大体思路一致:先将本进制转换为十进制int(n,x),然后依据转换函数来转换

注意:我们可以发现,除了转换成10进制的数,其他的进制转换结果都带有前缀,2进制是0b,8进制是0o,16进制是0x。但是我们在绝大部分使用进制转换后的数据时,是不需要它的前缀的。下面有两种方法去除前缀:

一种思路:使用字符串切片操作

原理:就是将进制转换后得到的结果对其进行字符串切片操作,将得到的结果从第三个字符开始取结果即可,这样我们可以得到不带前缀的结果

举例

//10进制转换成2进制
n=int(input())
print(bin(n)[2:])//切片操作

另一种思路:使用format函数进行格式化数字操作

原理:format函数里面有格式化数字的方法可以直接实现进制转换的功能

在formata函数内部槽的格式控制标记添加各进制转换的标识

举例

#其他类型转换为2进制
n=input()
print("{:b}".format(int(n,8)))
//先将8进制的数转换为10进制,
//然后在format的槽中添加一个b,等价于实现了bin函数的功能
//但是此结果是不带有0b前缀的

2进制8进制10进制16进制小写16进制大写Unicode
标识符bdoxXc

4.

   

数字形式转换 I


获得用户输入的一个正整数输入,输出该数字对应的中文字符表示。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

0到9对应的中文字符分别是:零一二三四五六七八九

解法:

numberlist='零一二三四五六七八九'
c=input()
for i in c:
    print(numberlist[eval(i)],end="")

思路:最开始想用数字转换的函数结果没有,于是又想到用列表的形式,根据输入整形的大小转换为列表的下标来输出对应中文数字。需要注意点是下标应用eval(i)表示,结尾要有end=""

5.

        温度转换


温度的刻画有两个不同体系:摄氏度(Celsius)和华氏度(Fabrenheit)。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

请编写程序将用户输入华氏度转换为摄氏度,或将输入的摄氏度转换为华氏度。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

转换算法如下:(C表示摄氏度、F表示华氏度)‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         C = ( F - 32 ) / 1.8‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         F = C * 1.8 + 32

考法1:输入输出的温度采用大写字母开头

temp=input()
if temp[0] in ['C','c']:
    F=eval(temp[1:])*1.8+32
    print("F{:.2f}".format(F))
elif temp[0] in ['F','f']:
    C=(eval(temp[1:])-32)/1.8
    print("C{:.2f}".format(C))

考法2:输入输出的温度采用大写字母结尾

TempStr=input()
if TempStr[-1] in ['f','F']:
    C = (eval(TempStr[0:-1])-32)/1.8
    print("{:.2f}C".format(C))

elif TempStr[-1] in ['c','C']:
    F = 1.8*eval(TempStr[0:-1])+32
    print("{:.2f}F".format(F))
else:
    print("输入格式错误")

考察点:主要是对字符串的访问方式考察,采用[N:M]格式取值上为[,) ,取首字符就是temp[0],

尾字符temp[-1], 取除首字符剩下字符是temp[1: ], 取尾字符之前的字符是temp[0:-1]

6.

字符串逆序输出


用户输入一个字符串,倒序输出。

解法1:字符串切片

str=input()
print(str[::-1])

解释:切片方式:第一个表示开始索引(留空0), 第二个表示结束索引(留空为最后一个,即-1,也就是字符串的最后一个字符), 第三个是步长(每次取最后一个)

解法2:reversed()函数

str=input()
print(''.join(reversed(str)))

reversed是Python内置的倒置函数

ps.补充下join函数

join()是一个字符串方法,它返回被子字符串连接的字符串。

参数:The join() method takes join()方法需要可迭代的元素来一次返回它的一个成员,比如列表,元组,字符串,字典和集合

返回值: join()方法返回一个被子字符串连接的字符串。

Type Error: 如果这个可迭代元素包含任何不是字符串的值,join()函数就会抛出TypeError。

用法其一:用空字符连接

list1 = ['g','r','e','a','t']  
print("".join(list1)) 

输出

great

解法3:借组列表进行翻转

str=input()
lit=[]#创建空列表
for i in str:
    lit.append(i)#依次填入列表
lit.reverse()#列表的反转函数
print(''.join(lit))#与空字符拼接输出反转后字符串

7.

字符替换


假设有段英文,其中有单独字母“P”被误写为“p”,请编写程序进行纠正。

s=input()
print(s.replace("p","P"))

8.

获取浮点数的整数部分和小数部分


要求用户输入一个小数,能够分别获取整数部分和小数部分,并输出

解法(split函数)

a=input()
x,y=a.split ('.')
print('整数{}小数{}'.format(x,int(y)//1))

补充:split函数

通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)

语法:str.split(str="", num = string.count(str) ) [n]

str:表示为分隔符,默认为空格,但是不能为空('')。

num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量
            [n]:表示选取第n个分片

 注意:当使用空格作为分隔符时,对于中间为空的项会自动忽略

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值