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 | |
标识符 | b | d | o | x | X | c |
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个分片
注意:当使用空格作为分隔符时,对于中间为空的项会自动忽略