参考
题目
- 1、有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
for i in range(1, 5):
for j in range(1, 5):
for h in range(1, 5):
if i != j and j != h and i != h:
result = i*100 + j*10 + h
print(result)
- 2、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?(ps: 有3种方法: https://github.com/Shirmay1/Python3_Case/tree/master/examples_fifty/2_190427.py )
def method3(I):
pro = int(I)
r = 0
profile = {1000000: 0.01, 600000: 0.015, 400000: 0.03, 200000: 0.05, 100000: 0.075, 0: 0.1}
for i in range(6):
if pro > list(profile.keys())[i]:
r += (pro-list(profile.keys())[i])*list(profile.values())[i]
pro = list(profile.keys())[i]
print(r)
II = input('请输入当月利润(元):')
method3(II)
- 3、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(ps: 平方 **0.5 )
for t in range(-99, 10000):
j = (t+100)**0.5
m = (t+100+168)**0.5
if int(j)*int(j) == t+100 and int(m)*int(m) == t+100+168:
print(t)
- 4、输入某年某月某日,判断这一天是这一年的第几天?
year = input('请输入年份:')
month = input('请输入月份:')
day = input('请输入天:')
mondic = {'1': 31, '2': 28, '3': 31, '4': 30, '5': 31, '6': 30, '7': 31, '8': 31, '9': 30, '10': 31, '11': 30, '12': 31}
count = int(day)
for i in range(1, int(month)):
count += mondic[str(i)]
if int(month) > 2:
# 对于整百年
if int(year) % 100 == 0:
if int(year) % 400 == 0:
count += 1
elif int(year) % 4 == 0:
count += 1
else:
print('是平年')
print('这一天是{}年的第{}天'.format(year, count))
- 5、输入三个整数x,y,z,请把这三个数由小到大输出。(ps: list.sort() 或 sorted(list))
numlist = []
for i in range(3):
num = input('请输入一个整数:')
numlist.append(num)
numlist.sort()
for i in numlist:
print('从小到大输出为:', i)
- 6、斐波那契数列。f(0) = 0; f(1) = 1 ;f(n) = f(n-2) + f(n-1) (n>=2);(ps:两种方法,列出一种非递归的, https://github.com/Shirmay1/Python3_Case/tree/master/examples_fifty/6_190501.py)
# 循环
def fun2(n):
if n == 0:
return 0
a, b = 1, 1
for i in range(n - 1):
a, b = b, a + b
return a
print(fun2(10))
- 7、将一个列表的数据复制到另一个列表中。两种方法,一种切片,一种导入copy模块
import copy
# 不可直接将列表赋给一个变量(如:list2=list1),这不是复制,而是引用,引用会带着原始列表一起改变,
list1 = [1, 3, 'hello', ('dog', 'cat')]
list2 = list1[:]
list3 = copy.copy(list1)
print(list2)
print(list3)
- 8、输出 9*9 乘法口诀表。(ps: end=’ '不换行)
for i in range(1, 10):
for j in range(1, i+1):
print('{}×{}='.format(i, j), i*j, end=' ')
print('')
- 9、 暂停一秒输出。
import time
lis = [0, 1, 2, 3, 4, 5]
for i in lis:
print(i)
time.sleep(1)
- 10、暂停一秒输出,并格式化当前时间。
import time
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
time.sleep(1)
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
- 11、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(ps:与第6题斐波那契数列相似,有3种方法见:https://github.com/Shirmay1/Python3_Case/tree/master/examples_fifty/11_190506.py)
def fun(n):
if n == 1 or n == 2:
return 1
else:
return fun(n-1) + fun(n-2)
num = {}
for i in range(1, 22):
rabitnum = fun(i)
num[str(i)] = rabitnum
print(num)
- 12、判断101-200之间有多少个素数,并输出所有素数。
for num in range(101, 201):
lis = []
for i in range(2, num):
if num % i == 0:
lis.append(i)
break
if len(lis) == 0:
print(num)
- 13、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。(ps: 与第3题相似,用了**3代表3次方)
for num in range(100, 1000):
i = num % 10
j = num // 10 % 10
k = num // 100
if i**3 + j**3 + k**3 == num:
print(num)
- 14、将一个正整数分解质因数。例如:输入90,打印出90=2 * 3 * 3 * 5。(ps:当找到之后直接sys.exit()程序退出)
import sys
def prime(num, copynum, strn, multi):
for i in range(2, num):
if num % i == 0:
strn += '{}*'.format(i)
multi *= i
if multi == copynum:
print(multi, '=', strn[:-1])
sys.exit()
num = num//i
prime(num, copynum, strn, multi)
stanum = int(input('请输入一个整数:'))
prime(stanum, stanum, '', 1)
- 15、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
def judge(scor):
if scor >= 90:
per = 'A'
elif scor >= 60:
per = 'B'
else:
per = 'C'
print('{}分的同学等级为{}'.format(scor, per))
score = input('请输入分数:')
judge(int(score))
- 16、输出指定格式的日期。(ps:与第10题可以一起看)
import time
import datetime
print(time.strftime('%Y/%m/%d %H:%M:%S', time.localtime()))
print(time.strftime("%Y-%m-%d %X"))
print(datetime.date(1941, 1, 5).strftime('%Y/%m/%d'))
- 17、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。有两种方法见:https://github.com/Shirmay1/Python3_Case/tree/master/examples_fifty/17_190512.py
# 123runoobc kdf235*(dfl
s = input('请输入一行字符(包含英文字母、空格、数字和其它字符):')
alpha, spac, dcima, other = [], [], [], []
for i in s:
if i.isalpha():
alpha.append(i)
elif i.isspace():
spac.append(i)
elif i.isdecimal():
dcima.append(i)
else:
other.append(i)
print('英文字母{}个,空格{}个,数字{}个,其它字符{}个'.format(len(alpha), len(spac), len(dcima), len(other)))
- 18、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
n = int(input('请输入个数n:'))
a = int(input('请输入数字a:'))
s = 0
Sn = 0
for i in range(n):
t = a * 10**i
s += t
print(s)
Sn += s
print('计算和为:', Sn)
- 19、一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。(ps,与14题思路类似,sys.stdout.write()和print输出类似;print(‘hello’)与sys.stdout.write(‘hello+’\n’)等价)
from sys import stdout
for j in range(2, 1001):
k = []
n = -1
s = j
for i in range(1, j):
if j % i == 0:
n += 1
s -= i
k.append(i)
if s == 0:
print(j)
for i in range(n):
stdout.write(str(k[i]))
stdout.write(' ')
print(k[n])
- 20、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
heigh = []
sum_heigh = 0
hei = 100
for i in range(1, 11):
if i == 1:
sum_heigh = 100
else:
sum_heigh += hei*2
hei /= 2
heigh.append(hei)
print('总高度:', sum_heigh)
print('第10次反弹高度:', heigh[-1])
- 21、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,
又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
count = 1
for day in range(9, 0, -1):
count = (count+1) * 2
print('第{}天'.format(day), count)
- 22、两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
lis1 = ['a', 'b', 'c']
lis2 = ['x', 'z', 'y']
for i in lis2:
if i == 'x':
for j in lis1:
if j == 'a' or j == 'c':
continue
else:
print('order is {}--{}'.format(i, j))
lis1.remove(j)
elif i == 'z':
for j in lis1:
if j == 'c':
continue
else:
print('order is {}--{}'.format(i, j))
lis1.remove(j)
else:
for j in lis1:
print('order is {}--{}'.format(i, j))
- 23、打印出如下图案(菱形)
lis_num = [1, 3, 5, 7, 5, 3, 1]
for i in lis_num:
s = ' ' * (4-(i+1)//2) + i * '*'
print(s)
- 24、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和
a, b = 2, 1
sum = 0
for i in range(1, 21):
sum += a/b
a, b = a+b, a
print(sum)
- 25、求1+2!+3!+…+20!的和。
sum = 0
t = 1
for n in range(1, 21):
t *= n
sum += t
print('1+2!+3!+...+20!={}'.format(sum))
- 26、利用递归方法求5!
def fact(j):
sum = 0
if j == 0:
sum = 1
else:
sum = j * fact(j - 1)
return sum
print(fact(5))
- 27、利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
def output(s):
if(len(s) > 0):
print(s[-1])
output(s[0:-1])
s = input('Input a string:')
desc_output(s)
- 28、有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
def age(n):
if n == 1:
c = 10
else:
c = age(n - 1) + 2
return c
print(age(5))
- 29、给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
num = input('请输入一个不多于5位的正整数:')
print('该数是{}位数'.format(len(num)))
for i in range(1, len(num)+1):
print(num[-i], end='')
- 30、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
num = input('请输入一个五位数:')
if num[0] == num[-1] and num[1] == num[-2]:
print('{}是回文数。'.format(num))
else:
print('{}不是回文数。'.format(num))
- 31、请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
week = {'M': 'Monday','T': {'u': 'Tuesday', 'h': 'Thursday'}, 'W': 'Wednesday', 'F':'Friday','S':{'a':'Saturday','u':'Sunday'}}
letter1 = input("请输入首字母:")
letter1 = letter1.upper()
if (letter1 in ['T','S']):
letter2 = input("请输入第二个小写字母:")
print(week[letter1][letter2])
else:
print(week[letter1])
- 32、按相反的顺序输出列表的值。
a = ['one', 'two', 'three']
for i in a[::-1]:
print(i)
- 33、按逗号分隔列表
L = [1, 2, 3, 4, 5]
s1 = ','.join(str(n) for n in L)
print(s1)
- 34、练习函数调用。
def hello_world():
print('hello world')
def three_hellos():
for i in range(3):
hello_world()
if __name__ == '__main__':
three_hellos()
- 35、文本颜色设置。
class Bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
print(Bcolors.WARNING + "警告的颜色字体?")
- 36、求100之内的素数
for num in range(2, 100):
lis = []
for i in range(2, num):
if num % i == 0:
lis.append(i)
break
if len(lis) == 0:
print(num)
- 37、对10个数进行排序。
a = input('请输入10个数字,以英文逗号分开:')
split_lis = a.split(',')
split_lis.sort()
print(split_lis)
- 38、求一个3*3矩阵主对角线元素之和。
lis = []
sum_lis = 0
for i in range(3):
a = []
for j in range(3):
a.append(int(input('请输入一个数:')))
lis.append(a)
sum_lis += lis[i][i]
print('3*3矩阵为:', lis)
print('3*3矩阵主对角线元素之和为:', sum_lis)
- 39、有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
a = [1, 4, 6, 9, 13, 16, 19, 28, 40, 100, 0]
b = int(input('请输入要插入的数:'))
a.append(b)
a.sort()
print(a)
- 40、将一个数组逆序输出。
a = [9, 6, 5, 4, 1]
print(a[::-1])
- 41、模仿静态变量的用法。
class Static:
StaticVar = 5
def varfunc(self):
self.StaticVar += 1
print(self.StaticVar)
print(Static.StaticVar)
a = Static()
for i in range(3):
a.varfunc()
- 42、学习使用auto定义变量的用法。
num = 2
def autofunc():
num = 1
print('internal block num = {}'.format(num))
num += 1
for i in range(3):
print('The num = {}'.format(num))
num += 1
autofunc()
- 43、模仿静态变量(static)另一案例
class Num:
nNum = 1
def inc(self):
self.nNum += 1
print('nNum = {}'.format(self.nNum))
if __name__ == '__main__':
nNum = 2
inst = Num()
for i in range(3):
nNum += 1
print('The num = {}'.format(nNum))
inst.inc()
- 44、Python 两个矩阵相加;两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:
X = [[12, 7, 3],
[4, 5, 6],
[7, 8, 9]]
Y = [[5, 8, 1],
[6, 7, 3],
[4, 5, 9]]
result = [[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
# 迭代输出行
for i in range(len(X)):
# 迭代输出列
for j in range(len(X[0])):
result[i][j] = X[i][j] + Y[i][j]
for r in result:
print(r)
- 45、统计 1 到 100 之和。
print(sum(range(1, 101)))
- 46、求输入数字的平方,如果平方运算后小于 50 则退出。
while True:
num = int(input('请输入一个数:'))
num = num ** 2
if num < 50:
break
- 47、两个变量值互换
def exchange(a, b):
a, b = b, a
print('a:{},b:{}'.format(a, b))
exchange(1, 'hello')
48、数字比较。
i = 10
j = 20
if i > j:
print('{}大于{}').format(i, j)
elif i == j:
print('{}等于{}'.format(i, j))
elif i < j:
print('{}小于{}'.format(i, j))
else:
print('未知')
- 49、使用lambda来创建匿名函数。
m, n = eval(input('请输入两个数字,并以逗号分隔:'))
h = lambda x, y: x//y
print(h(m, n))
- 50、输出一个随机数
import random
# 生成 10 到 20 之间的随机数
print(random.uniform(10, 20))