计算器内部算法的练习:
1、熟练基本运算、算术运算、赋值运算、按位运算
2、定义函数、while语法
3、检验字符串中是否包含另一字符串,用in
1.基本运算符
基本运算符:+ - * / ,和普通数学运算符一样,容易理解
2.算术运算符
%,取模,即余数,例如:5%3=2
**,取幂,即多少次方,例如:2**3=8
//,取整除数,例如:10//3=3
3.赋值运算符
在每个基本运算符和算术运算符后边加上=,即+=,-=,*=,/=,%=,**=,//=
意思为与自身进行运算,例如:i*=3,等效于i=i*3;i**=3,等效于i=i**3
4.按位运算
底层是将运算数先转换成二进制,再进行运算。具体有以下的位运算
&,与运算。测试以下看看效果
i = 11
j = 12
result = i&j
print(bin(i))
print(bin(j))
print(result)
print(bin(result))
先将i,j都转换成二进制打印,方便观察规律
0b1011
0b1100
0b1000
解析:0b 1(两个1变成1)0(一个1一个0变成0)0(一个1一个0变成0)0(一个1一个0变成0)
收获:&运算,将上下相同为1的位,等于1;不同的位(一个1,一个0),等于0
|,或运算
i = 10
j = 8
result = i|j
print(bin(i))
print(bin(j))
print(result)
print(bin(result))
0b1010
0b1000
0b1010
解析:0b 1(两个1变成1)0(两个0变成0)1(一个1一个0变成1)0(两个0变成0)
收获:|运算,将含有1(一个1或者两个都是1)的位,等于1;两个都是0的位,等于0
^,异或运算
i = 2
j = 3
result = i^j
print(bin(i))
print(bin(j))
print(result)
print(bin(result))
0b10
0b11
0b01(补一位0)
解析:0b 0(两个1变成0)1(一个0一个1变成1)
收获:^运算,将上下相同为1的位,等于0;不同的位(一个1,一个0),等于1。这个和&与运算有点相反
~,取反运算
i = 2
j = ~i
print(j)
收获:相比网上其他的解释,可以这么理解比较简便,2,取反=-2,再-1
<<,左取运算符
i = 2
j = i<<2
print(bin(i))
print(bin(j))
0b10
0b1000
收获:左取运算底层也是二进制的运算,往左移动两位,空余的部分则用0填充。
>>,右取运算符
i = 13
j = i>>3
print(bin(i))
print(bin(j))
0b1101
0b1___
收获:和左取运算符相似,右取运算符往右移动3位时,像是从右边被吞取了3位(即101被吞掉),剩下0b1
5.运算符的应用练习
用相对较笨的if elif方法简单实现计算器的算法应用,一开始目的为了练习各运算符的编写,后边写着写着想实现不断地调用运算函数,就想了下用while循环来测试全部运算符。
同时也碰到了字符串判断包含的用法in,以及发现打印结果时需要强制转换str;
其中将变量判断是否含有小数点. ,目的为了使整数和浮点数类型也能进行运算。
# 运算函数
def calculate():
# 定义两个值的输入变量
first_number = input("请输入第一个数字:")
operation = input("请输入运算符:")
second_number = input("请输入第二个数字:")
# 转换类型
if '.' in first_number or '.' in second_number:
# first_number, second_number = float(first_number), float(second_number)
first_number = float(first_number)
second_number = float(second_number)
else:
# first_number, second_number = int(first_number), int(second_number)
first_number = int(first_number)
second_number = int(second_number)
# 定义运算符号
if operation == "+":
result = first_number + second_number
elif operation == "-":
result = first_number - second_number
elif operation == "*":
result = first_number * second_number
elif operation == "/":
result = first_number / second_number
elif operation == "%":
result = first_number % second_number
elif operation == "**":
result = first_number ** second_number
elif operation == "//":
result = first_number // second_number
elif operation == "&":
result = first_number & second_number
elif operation == "|":
result = first_number | second_number
elif operation == "^":
result = first_number ^ second_number
print("运算结果是:" + str(result))
return
# 是否需要继续运算
def cal_while():
while True:
calculate()
if input("请问是否继续运算:") in ('yes','是的','YES','好','ok'):
continue
else:
print("运算结束!")
break
if __name__ == '__main__':
cal_while()
总结:练习了才会记得,练习了才会碰到更多的点,驱动你去找到解决方法。