5.1整形。讲讲Python普通整型和长整型的区别。
普通整型:python的标准型整数是最通用的数字类型,32位机器上,标准整型取值范围是-231到231-1。在64位机器上使用64位编译器编译python,在这个系统上的整型将是64位。python标准整型等价于C的(有符号)长整型。一般用十进制表示整型,python支持八进制和十六进制表示,八进制以“0”开始,十六进制以“0x”或者“0X”开始。
长整型:python的长整型类型可以表达的数值仅仅与机器支持的虚拟内存大小有关,python可以轻松表达很大的整型。长整型类型是标准整型类型的超集,在整型值后加一个L表示这个整型是长整型。虽然小写字母l也可以标记长整型,但是我们建议使用大写L。
5.2操作符。
(a)写一个函数,计算并返回两个数的乘积。
def mul(a,b):
c = a * b
return c
(b)写一段代码调用这个函数,并显示它的结果
print(mul(3,5))
15
5.3标准类型操作符。写一段脚本,输入一个测验成绩,根据下面的标准,输出它的评分成绩(A-F)
A:90~100
B:80~89
C:70~79
D:60~69
F:<60
def score(a):
if a >= 90 and a <= 100:
return 'A'
elif a >= 80 and a < 90:
return 'B'
elif a >= 70 and a < 80:
return 'C'
elif a >= 60 and a < 70:
return 'D'
elif a < 60:
return 'F'
print(score(80))
5.4取余。判断给定年份是否是闰年。使用下面的公式。
一个闰年指的是它可以被4整除,但不能被100整除。或者它既可以被4整除又可以被100整除。1992,1996,2000是闰年,但1967和1900不是闰年。下一个闰年的整世纪是2400年。
def runnian():
a = int(input('Please input a year'))
try:
if a % 4 == 0 and a % 100 != 0:
return '这是一个闰年'
elif a % 400 == 0:
return '这是一个世纪闰年'
else:
return '这不是闰年'
except:
return '你必须输入一个年份'
5.5取余。取一个任意小于1美元的金额。然后计算可以换乘最少多少枚硬币。硬币有1美分,5美分,10美分,25美分4种。举例0.76美元应该=3个25美分+1个1美分,如果结果是2个25美分和26个1美分就不符合要求**
def meifen():
try:
a = float(input('请输入美元的数值'))
(b,x) = divmod(a,0.25)
(c,x) = divmod(x,0.1)
(d,x) = divmod(x,0.01)
#用divmod方法取得每次的取余和余数
print(str(a)+'美元由'+str(b)+'个25美分,'+str(c)+'个10美分和'+str(d)+'个1美分组成。')
except:
print('请输入正确的美元数值')
meifen()
5.6算术。写一个计算器程序。你的代码可以接受这样的表达式,两个操作数加一个操作符:N1 操作符`N2,。其中N1与N2是整型或者浮点型,操作符可以是+,-,*,/,%,,计算这个表达式的结果,然后显示出来。提示:可以使用字符串方法split(),但不能使用内建函数eval()。**
```def jisuanqi():
try:
x = str(input('please input your formula'))
#使用str.split方法将原先的公式分解成一个列表,我们已知的只有符号,因此通过符号将公式分成两部分进行计算。
if len(x.split('+')) == 2:
y = float(x.split('+')[0]) + float(x.split('+')[1])
return y
elif len(x.split('-')) == 2:
y = float(x.split('-')[0]) - float(x.split('-')[1])
return y
elif len(x.split('*')) == 2:
y = float(x.split('*')[0]) * float(x.split('*')[1])
return y
elif len(x.split('/')) == 2:
y = float(x.split('/')[0]) / float(x.split('/')[1])
return y
elif len(x.split('%')) == 2:
y = float(x.split('%')[0]) / float(x.split('%')[1])
return y
elif len(x.split('**')) == 2:
y = float(x.split('**')[0]) / float(x.split('**')[1])
return y
except:
print('please input right formula')
jisuanqi()
5.8.几何。计算面积和体积。
(a)正方形和立方体
(b)圆和球
import math
def area_square():
try:
a = float(input('please input side length'))
x = a **2
return x
except:
return 'please input right side length'
def area_circular():
try:
a = float(input('please input radius'))
x = math.pi * a **2
except:
return 'please input right radius'
def volume_cube():
try:
a = float(input('please input side length'))
x = a ** 3
return x
except:
return 'please input right side length'
def volume_sphere():
try:
a = float(input('please input radius'))
x = 4/3*math.pi*a ** 3
return x
except:
return 'please input right radius'
volume_sphere()
5.9
(a)因为0开头的数是八进制数
(b)因为l是L的小写不是1
5.10
写一对函数来进行华氏度到摄氏度的转化。公式为C=(F-32))*(5/9),使用真正的除法
from __future__ import division
def zhuanhua():
try:
F = float(input('please input right Fahrenheit degree'))
C = (F - 32) * (5 / 9)
return C
except:
return 'please input right Fahrenheit degree'
zhuanhua()
5.11取余。
(d)使用循环和算术运算,求出0~20之间所有的偶数。
def zhengchu():
try:
a = int(input('please input a number'))
b = int(input('please input a number'))
if a % b == 0 or b % a == 0:
print(True)
elif a == 0 or b == 0:
print(True)
else:
print(False)
except:
return 'please input right number'
zhengchu()
5.12系统限制,写一段脚本确认下你的python能处理的整型,长整型,浮点型和复数范围。
import sys
print(sys.maxsize)
print(-sys.maxsize-1)
print(sys.float_info)
print(sys.long_info)
5.13转换。写一个函数,以小时和分钟表示的时间转换为只用分钟表示的时间。
def time():
try:
a = str(input('please input tour time'))
y = a.split(':')
z = int(y[0]) * 60 + int(y[1])
return z
except:
return 'please input a right time'
time()
5.14由日利率计算年利率。
def lilv():
x = float(input('please input daily interest rate'))
y = (1+x) ** 365 -1
return y
5.15最大公约数和最小公倍数。请计算2个整型的最大公约数和最小公倍数。
#思路:先用辗转相除法得出最大公因数,再通过辗转相除法得出每次当前2个数/最大公因数的最大公因数,这样就可以得到所有的公因数了,然后把所有的公因数相乘,再把输入的2个数除以这个公因数相乘的乘积得到的2个商,再把2个商相乘,再乘以这个公因数相乘的乘积就可以得到最小公倍数了。这个算法用了2次递归,速度应该较快。
gongyinshu = [1]
这里初始列表为1的原因是因为如果只有一个公因数无法相乘,如果有个1就可以相乘
def xunhuan(a,b):
min_gongyinshu_1 = 1
#经过N次循环每次都得到最大公因数
if quyu(a,b) == 1:
#递归的基线条件是2个数的最大公因数为1,递归条件就是2个数的最大公因数不为1
for i in gongyinshu:
min_gongyinshu_1 *=i
return min_gongyinshu_1
#当最大公因数为1的时候,把所取得的公因数相乘
else:
#否则每次都取最大公因数,并且存储到列表中,并且把原先的数除以最大公因数再次进行循环
c = quyu(a, b)
gongyinshu.append(c)
a = a / c
b = b / c
return xunhuan(a,b)
def quyu(i,j):
#创建一个递归算法,使用辗转相除法的到最大公约数
x = max(i,j)
y = min(i,j)
z = x % y
if z == 0:
#递归的基线条件是当2个数可以整除时,2个数不能整除就是递归条件
return y
else:
return quyu(y,z)
def common_divisor():
a = int(input('please input a number'))
b = int(input('please input a number'))
c = max(a, b)
d = min(a, b)
if d == 0:
print('最大公约数为0', '最小公倍数为' + str(c))
w = quyu(a, b)
# 通过辗转相除法得到最大公倍数
print('最大公约数是' + str(w))
z = xunhuan(a,b)
min_gongyinshu = (a / z) * (b / z) *z
print('最小公倍数是'+str(min_gongyinshu))
common_divisor()
5.16
a = float(input('please input initial amount'))
b = float(input('please input monthly expenses'))
def zhichu(a,b):
c = a - b
if c <= 0:
c = 0
return print('当前剩余金额' + str(c))
else:
print('当前剩余金额' + str(c))
return zhichu(c,b)
zhichu(a,b)