python学习实例(2)

举报
兔老大 发表于 2021/04/19 23:36:01 2021/04/19
【摘要】 #===================================#2.2 不同进制间的转换#=================================== #+++++++++++++++++++++++++++++++++++#2.2.1. 二进制数转换为十进制数#+++++++++++++++++++++++++++++++++++ #<程序:2-...

  
  1. #===================================
  2. #2.2 不同进制间的转换
  3. #===================================
  4. #+++++++++++++++++++++++++++++++++++
  5. #2.2.1. 二进制数转换为十进制数
  6. #+++++++++++++++++++++++++++++++++++
  7. #<程序:2-to-10进制转换>
  8. b=input("Please enter a binary number:")
  9. d=0;
  10. for i in range(0,len(b)):
  11. if b[i] == '1':
  12. weight = 2**(len(b)-i-1)
  13. d = d+weight;
  14. print(d)
  15. #<程序:改进后的2-to-10进制转换>
  16. b=input("Please enter a binary number:")
  17. d=0; weight=2**(len(b)-1);
  18. for i in range(0,len(b)):
  19. if b[i] == '1':
  20. d = d+weight;
  21. weight=weight//2; #‘//’是整数除法
  22. print(d)
  23. #+++++++++++++++++++++++++++++++++++
  24. #2.2.2. 十进制数转换为二进制数
  25. #+++++++++++++++++++++++++++++++++++
  26. #<程序:整数的10-to-2进制转换>
  27. x= int(input("Please enter a decimal number:"))
  28. r = 0;
  29. Rs = [];
  30. while(x != 0):
  31. r = x% 2
  32. x = x//2
  33. Rs = [r]+Rs
  34. for i in range(0,len(Rs)):
  35. #从最高位到最低位依次输出;Rs[0]存的是最高位, Rs[len(Rs)-1]存的是最低位。
  36. print(Rs[i],end='')
  37. #<程序:整数的10-to-2进制转换-递归>
  38. def convert(x): #把10进制数x转换为2进制数,并返回结果列表。
  39. if x<2: return([x]) #x=0 或 1,所以返回x
  40. r= x%2; #r 是2除x的余数
  41. return(convert(x//2)+[r]) # 结果=[x//2的二进制,r]
  42. num = int(input("Please enter a decimal number:"))
  43. Rs= convert(num)
  44. for i in range(0, len(Rs)):
  45. print (Rs[i],end='')
  46. #=====================================================================================
  47. #===================================
  48. #2.4. 一切都是逻辑(Logic)
  49. #===================================
  50. #+++++++++++++++++++++++++++++++++++
  51. #2.4.3. 用逻辑做加法
  52. #+++++++++++++++++++++++++++++++++++
  53. #<程序: 全加器>
  54. def FA(a,b,c): # Full adder
  55. Carry = (a and b) or (b and c) or (a and c)
  56. Sum = (a and b and c) or (a and (not b) and (not c)) \
  57. or ((not a) and b and (not c)) or ((not a) and (not b) and c)
  58. return Carry, Sum
  59. #<程序:完整的加法器 Carry Ripple adder>
  60. def add(x,y): # x, y are lists of True or False, c is True or False
  61. # return carry and a list of x+y
  62. while len(x) < len(y): x = [False]+x #前面补0
  63. while len(y) < len(x): y = [False]+y #前面补0
  64. L=[];Carry=False
  65. for i in range(len(x)-1,-1,-1): #从最后一位一个个往前加
  66. Carry,Sum=FA(x[i],y[i],Carry)
  67. L=L+[Sum]
  68. return (Carry, L)
  69. #<程序:乘法器>
  70. def multiplier(x,y): # 求x*y
  71. S=[];
  72. for i in range(len(y)-1,-1,-1):
  73. if y[i] == True: #y[i]是 1,要将x加进到S
  74. C, S=add(S,x)
  75. if C==True: S=[C]+S
  76. x=x+[False] #每一次x都要向左移一位,后面补0
  77. return(S)

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/83025184

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。