1、有1、2、3、4 四个数字,请打印出所有由它们组成的互不相同且不重复的三位数。
解:用i,j,k分别代表百位、十位和个位,那么i,j,k的取值范围都是range(1, 5);每个位上的数字互不相同,即i != j and j != k and k != i
;将i,j,k套入循环中,代码如下:
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and j != k and k != i:
print(i * 100 + j * 10 + k)
但是这样输出每行只能显示一个结果,可以用一个n来控制每行结果数目:
n = 0
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and j != k and k != i:
x = i * 100 + j * 10 + k
n += 1
if n%4:
print("%d" % x, end = ", ")
else:
print(x)
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,求应发放奖金总数?
解:一个很简单的初中数学题,于是我自信满满地贴上了自己的代码:
I = float(input("请输入当月利润(万元):"))
if I <= 10:
bonus = I * 0.1
elif 10 < I < 20:
bonus = 10 * 0.1 + (I - 10) * 0.075
elif 20 < I < 40:
bonus = 10 * 0.1 + 10 * 0.075 + (I - 20) * 0.05
elif 40 < I < 60:
bonus = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (I - 40) * 0.03
elif 60 < I < 100:
bonus = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + (I - 60) * 0.015
elif I > 100:
bonus = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.015 + (I - 60) * 0.01
print("应发放奖金 %0.4f 万元" % bonus)
我还是注意到了最后输出时候的单位问题,0.4f用来保留4位小数。但是这个世界就是有那么多牛逼哄哄的大神,他们的思维就是和小白不一样啊!大神的代码:
I = float(input("请输入当月利润,单位为万元:"))
bns = 0 #初始化奖金总数
cat = [100, 60, 40, 20, 10, 0] #金额分6档
pct = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1] #每档的提成比例
for i in range(6):
if I > cat[i]:
I = I - cat[i] #注意:刨掉档位金额后,应将值重新赋给I,每一档位分开计算
bns += I * pct[i] #每一档位的奖金累计相加
print('当月应发放奖金总数为%0.4f万元' % bns)
高,实在是高!
3、一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
解:这要用到math里头的sqrt()
取平方根。主要思路是这个数字n满足(n+100)
和(n+268)
都能被完全开平方。除以1之后没有余数,就是一个整数。
import math
n = 0
while True:
if math.sqrt(n + 100) % 1 == 0 and math.sqrt(n + 268) % 1 == 0:
print(n)
n += 1
这样的话程序不会终止,可以改一下:
import math
m = int(input("n不得超过多少?"))
n = 0
while n <= m:
if math.sqrt(n + 100) % 1 == 0 and math.sqrt(n + 268) % 1 == 0:
print(n)
n += 1
4、输入某年某月某日,判断这一天是这一年的第几天?
# -*- coding: utf-8 -*-
"""
题目:输入某年某月某日,判断这一天是这一年的第几天?
"""
#规定用户输入的格式,取出对应的年月日
date = input("请按xxxx-xx-xx的格式输入日期:")
year, month, day = date.split("-")
year = int(year); month = int(month); day = int(day)
#将闰年和平年的月份天数放入列表
list_ping = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
list_run = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
list = list_run
else:
list = list_ping
x = list[month - 1] + day
print("这一天是%d年的第 %d 天" % (year, x))
将经过的月份天数直接放入一个列表,然后取出来跟天数相加
5、输入三个整数 x,y,z,请把这三个数由小到大输出。
# -*- coding: utf-8 -*-
"""
题目:输入三个整数 x,y,z,请把这三个数由小到大输出。
"""
x, y, z = input("请输入需要排序的三个数并以空格分开:").split()
if x > y:
temp = x
x = y
y = temp
if x > z:
temp = x
x = z
z = temp
if y > z:
temp = y
y = z
z = temp
print(x, y, z)
6、用 *号输出字母 C的图案。
print(' ****')
print('*')
print('*')
print('*')
print(' ****')
7、输出九九乘法表
# -*- coding: utf-8 -*-
"""
题目:输出九九乘法表
"""
# =============================================================================
# 我的思路是,首先输出第9行的表,那么代码就可以写成:
# for i in range(1, 10):
# print("%d * 9 = %d" % (i, i * 9), end = '\t')
# 再输出第八行:
# for i in range(1, 9):
# print("%d * 8 = %d" % (i, i * 8), end = '\t')
# 找到规律,将范围用j表示,外面套一个for循环,得到代码:
# =============================================================================
for j in range(2, 11):
print("\n")
for i in range(1, j):
print("%d * %d = %d" % (i, (j - 1), i * (j - 1)), end = '\t')
8、斐波拉契数列
一种非常容易理解的方式:
# -*- coding: utf-8 -*-
"""
题目:输出斐波拉契数列的前n项
"""
#求斐波拉契数列的第n项
def fib(n):
if n == 1 or n == 2:
num = 1
else:
num = fib(n - 2) + fib(n - 1) #每一项都是前面两项的和
return num
n = int(input("需要数列的前多少项:"))
for i in range(1, n+1):
print(fib(i))
还有个方法是不断地将两个数换位置:
# -*- coding: utf-8 -*-
"""
题目:斐波拉契数列
"""
a = 0
b = 1
n = int(input("需要斐波拉契数列前多少项"))
for i in range(1, n + 1):
print(b)
#==============================================================================
# temp = a
# a = b
# b = temp + b
# 可以换成下面这么个简单写法:
#==============================================================================
a, b = b, a + b
9、判断101-200之间有多少个素数,并输出所有素数
# -*- coding: utf-8 -*-
"""
题目:判断101-200之间有多少个素数,并输出所有素数
"""
def prime(n):
#函数的功能是判断n是否为素数,是素数返回True,否则返回False
for i in range(2, n):
if n % i == 0:
return False
return True
n = 0
for i in range(101, 201):
if prime(i):
n += 1
print("范围内的第%d个素数是%d" %(n, i))
10、打印出所有的“水仙花数” ,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身
# -*- coding: utf-8 -*-
"""
题目:打印出所有的“水仙花数” ,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身
"""
for n in range(100, 1000):
g = n % 10
s = n // 10 % 10
#==============================================================================
# 两个反斜杠“//”表示取商,三位数取商再取余数,就可以表示中间的数字
# pow(x, y)意思是求x的y次方
#==============================================================================
b = n // 100
if pow(g, 3) + pow(s, 3) + pow(b, 3) == n:
print(n)