1、求第n项的斐波那契数列的值(n>=1)
def fib (n):
n1,n2,n3=1,1,0
if n<=2:
return 1
while n>2:
n3=n1+n2
n1,n2=n2,n3
n=n-1
return n3
if __name__=='__main__':
x=int(input("请输入一个数:"))
print("斐波那契数列的第{0}项是{1}".format(x, fib(x)))
2:小明考试非常好,妈妈为了奖励小明,给一对刚刚出生的兔子,
兔子可以经过四个月,可以长大称为成年的兔子,可以生育新的兔子,
假设成年兔子,每个月生一对小兔子,问,第n个月共有多少对兔子(加上兔子不死)
def get_rabbit(num):
if num < 5:
return 1
return get_rabbit(num - 1) + get_rabbit(num - 4)
if __name__ == '__main__':
# 在python中,main函数的作用,主要是用来书写测试代码
# 这种测试代码不需要导入其他模块调用,就可以写在main函数中
print(get_rabbit(8))
3、给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),
可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数
import os
def get_num_duplicate(nums):
temp = 0
for i in range(0, len(nums)):
temp ^= i ^ nums[i]
return temp
if __name__ == '__main__':
nums = [1,2,8,3,4,5,6,7,8]
d = get_num_duplicate(nums)
print(f"数组中重复的是{d}")
print(os.path.abspath(os.curdir))
def r_num(n):
if n == 1 or n == 2:
return 1
else:
return r_num(n-1)+r_num(n-2)
m=int (input("请输入一个数:"))
print("第%d个月有%d 对兔子"%(m,r_num(m)))
4、 某个人进入如下一个棋盘中,要求从左上角开始走,最后从右下角出来(要求只能前进,不能后退),
问题:共有多少种走法?
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
checkerboard = [
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
]
def board (arr):
if arr is None:
return 0
if len(arr) == 1 and len(arr[0])==1:
return 1
for i in range(len(arr[0])):
arr[0][1]=1
for i in range (len(arr)):
arr[1][0]=1
for i in range(1,len(arr)):
for j in range (1,len(arr[0])):
arr[i][j]=arr[i-1][j]+arr[i][j-1]
return arr[len(arr)-1][len(arr[0])-1]
if __name__=='__main__':
ls=[
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
]
count = board(ls)
print(f"从左上角开始走,到右下角,共有{count}种走法")
5、写一个方法,计算列表所有偶数下标元素的和(注意返回值)
def get_sum(ls):
sum=0
i=0
while i < len(ls):
sum += ls[i]
i += 2
return sum
ls = [1,2,3,4,5]
print("列表是:{},偶数下标元素和是:{}".format(ls,get_sum(ls)))
7、请使用函数完成选择、冒泡、插入三种排序
ls=[1,3,4,24,4,3,7,74,54,24]
def xuanze(ls):
x = len(ls)
if x<2:
return
for i in range (x):
a = i
for j in range(i+1,x):
if ls[a]>ls[j]:
a = j
if i != a:
ls[i],ls[a]=ls[a],ls[i]
return ls
xuanze (ls)
def maomao(ls):
x = len(ls)
if x< 2:
return
for i in range(x):
for j in range(x-1-i):
if ls[j]>ls[j+1]:
ls[j],ls[j+1]= ls[j+1],ls[j]
return ls
maomao(ls)
def charu(ls):
x=len (ls)
if x<2:
return
for i in range(x):
a,j=ls[i],i-1
while j>=0 and ls [j]>a:
ls[j+1]=ls[j]
j -= 1
ls [j+1]=a
return ls
charu(ls)
8.根据完整的路径从路径中分离文件路径、文件名及扩展名
ls="F:\菜姬.txt\python\Lib\html\entities.py"
def file(ls):
way = ls[0:11]
name=ls[11:15]
extension=ls[16:]
print(way,name,extension)
file(ls)
9.获取字符串中汉字的个数
ls="F:\菜姬.txt\python\Lib\html\entities.py"
def number(l):
count = 0
for item in l:
if 0X4E00 <= ord(item)<= 0x9Fa5:
count += 1
return count
print(number(ls))
10.将字母全部转换为大写或小写
11.根据标点符号对字符串进行分行
12.去掉字符串数组中每个字符串的空格
13.随意输入你心中想到的一个书名,然后输出它的字符串长度。 (len()属性:可以得字符串的长度)
book = str (input("请输入书名:"))
print(len(book))
14.两个学员输入各自最喜欢的游戏名称,判断是否一致,如果相等,则输出你们俩喜欢相同的游戏;如果不相同,则输出你们俩喜欢不相同的游戏。
people1 = str(input("请输入一个数:"))
people2 = str(input("请输入一个数:"))
for i in people1:
for j in people2:
if i == j:
print("你们喜欢相同的游戏!")
else :
print("你们喜欢不同的游戏!")
15.上题中两位同学输入 lol和 LOL代表同一游戏,怎么办?
people1 = str (input("请输入一个游戏:"))
people2 = str (input("请输入一个游戏:"))
if people1.upper()==people2.upper():
print("你们的游戏相同")
else:
print("你们的游戏不相同")
16.让用户输入一个日期格式如“2008/08/08”,将 输入的日期格式转换为“2008年-8月-8日”。
time = input("请输入年月日:")
sl = time.split("/")
newtime="{}年-{}月-{}日".format(sl[0],int(sl[1]),int(sl[2]))
print(newtime)
17.接收用户输入的字符串,将其中的字符进行排序(升序),并以逆序的顺序输出,“cabed”→"abcde"→“edcba”。
ls ='cabed'
l=list(ls)
l.sort()
print(l)
l.reverse()
print(l)
18.接收用户输入的一句英文,将其中的单词以反序输出,“hello c sharp”→“sharp c hello”。
english=input("请输入一句英文:")
a = english.split(" ")
b = a[::-1]
wp = " ".join (b)
print (wp)
19.从请求地址中提取出用户名和域名http://www.163.com?userName=admin&pwd=123456
url ='http://www.163.com?userName=admin&pwd=123456'
ls = url.split("/")
s1=ls[2]
ls2 = s1.split("?")
print("域名是:{}".format(ls2[0]))
s1 = ls2[1]
ls3 = s1.split("&")
si = ls3[0]
ls4 = si.split("=")
print("用户名是:{}".format(ls4[1]))
20.有个字符串数组,存储了10个书名,书名有长有短,现在将他们统一处理,若书名长度大于10,则截取长度8的子串并且最后添加“...”,加一个竖线后输出作者的名字。
ls = ["火影忍者","海贼王","名侦探柯南","死神","斗罗大陆","武庚纪","狐妖小红娘","狂人日记","从百草园到三味书屋","cold brew"]
dir = {"火影忍者":"岸本齐史","海贼王":"尾田荣一郎","名侦探柯南":"青山刚昌","死神":'久保带人',"斗罗大陆":"唐家三少","武庚纪":"郑键合","狐妖小红娘":"小新","狂人日记":'鲁迅',"从百草园到三味书屋":'鲁迅',"cold brew":"xxx"}
for i in range (0,len(ls)):
s= ls[i]
if len(s)> 10 :
s= s[0:9]+"..._"+str(dir(ls[i]))
ls[i]=s
print(ls)
21.让用户输入一句话,找出所有"呵"的位置。
s = input("请输入一段话;")
ls = []
for i in range(0,len(s)):
if s[i]=="呵":
ls.append(i)
print("呵的位置是%s",ls)
22.让用户输入一句话,找出所有"呵呵"的位置。
s = input("请输入一段话;")
ls = []
for i in range(0,len(s)):
if s[i]=="呵"and s[i+1]=="呵":
ls.append(i)
print("呵呵的位置是%s",ls)
23.让用户输入一句话,判断这句话中有没有邪恶,如果有邪恶就替换成这种形式然后输出,如:“老牛很邪恶”,输出后变成”老牛很**”;
word = input("请输入您要说的话;")
print("邪恶消失后:",format(word.replace("邪恶","**")))
24.如何判断一个字符串是否为另一个字符串的子串
find()
index()
双层循环完成
??
25.如何验证一个字符串中的每一个字符均在另一个字符串
中出现过
双层循环
name = "mkyong is learning python 123 "
if name.find("python") != -1:
print("found python!")
else:
print("nothing")
26.如何随机生成无数字的全字母的字符串
import random
import string
random_str =''.join(random.sample(string.ascii_lowercase,10))
print(random_str)
27.如何随机生成带数字和字母的字符串
import random
import string
random_str = ''.join(random.sample(string.ascii_letters + string.digits, 20))
print(random_str)
28.如何判定一个字符串中既有数字又有字母
string=input("请输入数据\n")
if(not(string.isdigit()) and not(string.isalpha())):
print("该数据中有数字也有字母")
29.字符串内的字符排序(只按字母序不论大小写)
import random
import string
random_str = ''.join(random.sample(string.ascii_lowercase , 10))
random_str = "".join((lambda x:(x.sort(),x)[1])(list(random_str)))
print(random_str)
30.判断一个字符是否是回文字符串(面试题)
"1234567654321"
"上海自来水来自海上"
def is_palindrome(count):
for i in range(0,len(count)//2):
if count[i] != count[len(count)-i-1]:
return False
return True
word="上海自来水来自海上"
print(is_palindrome(word))
31、找出10000以内能被5或6整除,但不能被两者同时整除的数(函数)
def get_num(n):
for i in range (1,n+1):
if (i%5==0 or i%6==0) and not (i%5==0 and i%6==0):
print(i)
n=int (input("请输入一个数:"))
get_num(n)