继续分享Python入门基础题(day3)
1.输出所有的水仙花数, 自幂数(三位数,各位数字的立方和等于自身)。
答:
for i in range(100, 1000):
a = i // 100
b = i % 10
c = i // 10 % 10
if ((a * a * a) + (b * b * b) + (c * c * c)) == i:
print(i, "是水仙花数")
2.请去除a字符串多次出现的字母,仅留最先出现的一个。例 ‘azbcabbd’,经过去除后,输出 ‘azbcd’
答:
a = input("请输入一个字符串:")
s = list(set(a))
s.sort(key=a.index)
print(s)
3.这是一个网址,但是前面有错误的空格字符
" http://news.gzcc.cn/html/xiaoyuanxinwen/4.html"
(1) 去掉前面的空格
(2) 删除http: // 前缀
(3) 去掉后缀.html并输出数字4
(4) 显示这段文字中有多少个n
(5) 使用 / 分隔成多个单词
答:
s = " http://news.gzcc.cn/html/xiaoyuanxinwen/4.html"
s1 = s.lstrip() # 去除左边所有空格
print(s1)
s2 = s1.replace('http://', '') # 去除http://前缀
print(s2)
s3 = s2.replace('.html', '4') # 去除.html并替换成4
print(s3)
s4 = s.count('n')
print(s4)
s5 = s.split('/')
print(s5)
4.一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
答:
def hws(s):
for i in range(5):
a = int(s) // 10000
b = int(s) // 1000 % 10
c = int(s) % 100 // 10
d = int(s) % 10
if a == d and b == c:
print(s, "是回文数")
else:
print(s, "不是回文数")
hws(12321)
5.输入一些数值,以stop作为输入的结束。求列表的最大值与最小值,和与平均值
答:
s = s1 = []
a = s2 = MAX = MIN = AVG = 0
while True:
s = input("请输入数值,按stop结束")
if s == 'stop':
break
else:
s1.append(int(s))
a += 1
s2 += int(s)
MAX = max(s1)
MIN = min(s1)
AVG = s2 / a
print("列表中的最大值为:{0},最小值为:{1},和为:{2},平均值为:{3}".format(MAX, MIN, s2, AVG))
6.现存任意两个字符串s1与s2,判断s1中的字符在s2中存在的个数(重复的算1个,一条语句实现)
? s2 = “hellodladfljdkfj”
? s1 = “hllz”
答:
s2 = 'hellodladfljdkfj'
s1 = 'hllz'
print({s: s2.count(s) for s in s1})
7.编写函数,第一个参数指定今天是星期几(1~ 7),第二个参数指定天数n,返回n天后是星期几。
答:
def xq(a, n):
s1 = n % 7 + a
if s1 > 7:
s1 = s1 % 7
print("今天是星期:", a)
print(n, "天后是星期", s1)
xq(2, 10)
8.写函数,检查用户传入的序列(字符串)的每一个元素是否含有空内容(传入的序列元素只考虑都是字符串,使用isspace方法即可),如果有告诉调用者是哪个元素,如果没有则告诉调用者没有空格。
答:
def jc(ss):
abc = 0
for i in range(len(ss)):
if ss[i].isspace():
print("第", i, "个位置有空格")
abc = 1
elif abc == 0 and i == len(ss) - 1:
print("没有空格")
jc("dk dk fnd")
9.写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者,否则返回“不符合要求”提示
答:
def cca(ll):
L = len(ll)
if L > 2:
s1 = ll[:2]
print(s1)
else:
print("不符合要求")
cca("abcdefg")
10.编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组的形式返回结果。
答:
def tj(s):
dx = xx = sx = qt = 0
for d in s:
if 'A' <= d <= 'Z':
dx += 1
elif 'a' <= d <= 'z':
xx += 1
elif '0' <= d <= '9':
sx += 1
else:
qt += 1
return (dx, xx, sx, qt)
aa = tj('ABCaaaaa123456--')
print(aa)
11.统计考试成绩,给定一个字典,里面包含学生成绩,使用函数,实现求平均成绩,最高成绩的学生,最低成绩的学生,全班成绩排名
ss = {“tom”: 60, “kate”: 100, “jerry”: 80, “lily”: 89, “luly”: 100}
答:
def pingjun(s1):
L = len(s1)
SUM = sum(s1.values())
A11 = SUM / L
return A11
ss = {"tom": 60, "kate": 100, "jerry": 80, "lily": 89, "luly": 100}
for i in sorted(ss, key=ss.__getitem__, reverse=True):
print(i, ss[i])
MAX = max(ss)
MIN = min(ss)
print("成绩最高的同学是:{0},成绩最低的同学是:{1}".format(MAX, MIN))
AVG = pingjun(ss)
print("平均成绩为:", AVG)
12.假设市面上有4种面值硬币,20元、10元、5元、1元。输入一个钱数,能够使用最少的硬币凑成这个钱数。
答:
def money(m):
a = m // 20
b = m % 20
c = b // 10
d = b % 10
e = d // 5
f = d % 5
print("需要{0}个20元,需要{1}个10元,需要{2}个5元,需要{3}个1元".format(a, c, e, f))
money(55)
13.猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想吃时,只剩下一个桃子了。求第一天共摘多少个桃子。(迭代法)
答:
s = 1
for i in range(9, 0, -1):
s = (s + 1) * 2
print("第一天共摘了:", s, "个桃子")
14.求平方和,有列表[1,……9],把每一个元素都取一下平方,然后累加求和
使用普通函数和面向过程思维解决问题
使用高阶函数解决问题
答:
#普通函数
def sum(a):
global sss
for i in range(9):
ss = a[i] * a[i]
sss += ss
return sss
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
sss = 0
A = sum(a)
print(A)
# map()高阶函数
def sum1(x):
return x
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = list(map(sum1, a))
s1 = 0
for j in range(9):
s1 += b[j]
print(s1)
15.自己实现一下map函数,然后再自己调用一下。
答:
# 实现map函数功能
def sum(a):
global sss
for i in range(9):
ss = a[i] * a[i]
sss += ss
return sss
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
sss = 0
A = sum(a)
print(A)
16.写一个lambda表达式,实现两个数的相加
答:
s = lambda a, b: a + b
print(s(6, 7))
17.编写“计算机类”,属性包括CPU型号,内存大小,硬盘大小。行为包括介绍CPU型号,展示内存大小,展示硬盘大小,综合介绍
答:
class computer:
def __init__(self, xh, nc, yp):
self.xh = xh
self.nc = nc
self.yp = yp
def showall(self):
self.showcpu()
self.shownc()
self.showyp()
def showcpu(self):
print("cpu型号:", self.xh)
def shownc(self):
print("内存大小:", self.nc)
def showyp(self):
print("硬盘大小:", self.yp)
a = computer("intel", "8G", 512)
a.showcpu()
a.shownc()
a.showyp()
a.showall()
18. 编写一个计数器,能够记录一个类创建了多少个对象。
答:
class Count:
count = 0
def __init__(self):
Count.count = Count.count + 1
a1 = Count()
a2 = Count()
a3 = Count()
print("这个类创建了{0}个对象".format(Count.count))
19.猜拳游戏
分析类:属性、方法自己玩家:Player选角色[“美羊羊”,“喜羊羊”, “沸羊羊”]
? 出拳
石头1
剪刀2
布3
计算机玩家:Computer
选角色[“1美羊羊”,“2喜羊羊”, “3沸羊羊”] 随机选角
? 随机出拳
game类,包含了整个游戏流程,让玩家选角色、出拳、计算机选角色、出拳、比较出拳,显示结果
再玩一次
赢 + 1分
可以循环玩
当游戏结束之后,可以提示计算机和玩家的分数
答:
import random
class game:
def __init__(self, aa, bb):
self.aa = aa
self.bb = bb
def USER(self):
count1 = 0
count2 = 0
while True:
###玩家选角色
user1 = int(input("请您选择您的角色:[1美羊羊,2喜羊羊,3沸羊羊],按4退出"))
if user1 == 4:
print("您的胜利分数为:", count1, "电脑玩家的胜利分数为:", count2)
break
if user1 == 1:
b = '美羊羊'
elif user1 == 2:
b = '喜羊羊'
elif user1 == 3:
b = '沸羊羊'
else:
print("输入错误,请重新输入!")
###电脑随机角色
strs1 = ['美羊羊', '喜羊羊', '沸羊羊']
n = random.randint(0, len(strs1)) # 返回一个字符串数组随机位置的字符串
###电脑随机出拳
strs2 = ['石头', '剪刀', '布']
n = random.randint(0, len(strs2))
print("您的角色是:", b)
chuquan = int(input("请出拳:[石头1,剪刀2,布3]"))
if chuquan == 1:
chuquan = '石头'
elif chuquan == 2:
chuquan = '剪刀'
elif chuquan == 3:
chuquan = '布'
print("您出的拳是:", chuquan)
print("电脑玩家的角色是:", strs1[n])
print("电脑玩家出的拳是是:", strs2[n])
# 比较出拳
if chuquan == '石头' and strs2[n] == '剪刀':
print("您胜!")
count1 += 1
elif chuquan == '石头' and strs2[n] == '布':
print("电脑胜!")
count2 += 1
elif chuquan == '剪刀' and strs2[n] == '布':
print("您胜!")
count1 += 1
elif chuquan == '剪刀' and strs2[n] == '石头':
print("电脑胜!")
count2 += 1
elif chuquan == '布' and strs2[n] == '石头':
print("您胜!")
count1 += 1
elif chuquan == '布' and strs2[n] == '剪刀':
print("电脑胜!")
count2 += 1
else:
print("平手!")
ss = game('USER', 'PC')
ss.USER()
20.矩形与正方形两个类,求周长与面积。分别使用不继承与继承两种方式。
答:
# 继承方式求矩形和正方形面积周长
class juxing:
def __init__(self, c, k):
self.c = c
self.k = k
def sum(self):
zc = self.c + self.c + self.k + self.k
mj = self.c * self.k
if self.c == self.k:
print("正方形周长为:", zc)
print("正方形面积为:", mj)
else:
print("矩形周长为:", zc)
print("矩形面积为:", mj)
class zhengfangxing(juxing):
def __init__(self, c, k):
juxing.__init__(self, c, k)
a = juxing(10, 20)
b = zhengfangxing(10, 10)
a.sum()
b.sum()
# 非继承方式求矩形和正方形面积周长
class juxing:
def __init__(self, c, k):
self.c = c
self.k = k
def sum1(self):
zc = self.c + self.c + self.k + self.k
mj = self.c * self.k
print("矩形周长为:", zc)
print("矩形面积为:", mj)
class zhengfangxing:
def __init__(self, c, k):
self.c = c
self.k = k
def sum2(self):
zc = self.c + self.c + self.k + self.k
mj = self.c * self.k
print("正方形周长为:", zc)
print("正方形面积为:", mj)
a = juxing(5, 10)
a.sum1()
b = zhengfangxing(5, 5)
b.sum2()
21.编写如下的继承结构,类C继承(A,B),类D继承(B,A),类E继承(C,D)或者(D,C),会出现什么情况?
答: 类E会导致程序出错。
class A:
pass
class B:
pass
class C(A, B):
pass
class D(B, A):
pass
class E(D, C):
pass
print(C.mro())
print(D.mro())
print(E.mro())
22.使用random.random(),函数实现返回[a,b]之间的整数。(a<=x<=b)
答:
# 用于产生0-100之间的随机整数 0<=x<=100
import random
for i in range(3):
x = random.randint(0, 100)
print(x)
23.自行计算常数e的近似值。(1 / 0! + 1 / 1! + 1 / 2! + 1 / 3! + ……)
答:
# 计算常数e的近似值
i = 1
a = 1
e = 1
while i <= 10:
a = a * i
e = e + 1 / a
i += 1
print(e)