用户:
嗯哼君 渠源查看:0 回复:20 评论:0 创建时间:2018-10-14T16:07:02
嗯哼,我就系你们滴嗯哼君啦~~~
经过了上次的教程,大家是不是已经想编写程序了呢?
互转教程:https://www.codemao.cn/community/166395
编写要求:会编写异常、函数及基本算法
好了,让我们开始吧!
首先我们创建一个xinput()函数,用于计算转换
这样做的原因是要使用到函数的一个特性,也就是无限循环。
一开始我们创建了一个叫x的变量,用于询问并储存用户想转换成二进制的数:
def xinput():
x = int(input("要转换为二进制的数为"))
xinput()
由于我们之后还要进行运算,所以将其改为int。
接着我们为了不让用户捣乱输入非数字而设置ValueError异常,让他在用户捣乱的时候提醒他并重新进行函数:
然后我们就要想到:若用户输入的是float怎么办呢?所幸ValueError包括了float,所以我们只需将措辞改一下就行了:
你不能输入不是整数的数据
这里我们用print语句来证明实验,等会就要去掉了
然后我们就要进行程序的核心了——转换二进制。
转换二进制我们主要是用的是列表合并,也可以用递加公式,思路如下:
将每一个余数储存到一个列表中,当数为0后就列表合并,即可。
我们先来进行求余数及储存列表这一块,代码如下:
我们一行一行的来,先看第一行:我们先import了math库,用于下面的math.floor用。
这个一直到else都没变,只不过在input的下面我们新建了一个ys列表,若没有这一步系统会报错。
我们再来while这一行,他的意思是如果(x不等于0)那么重复执行以下的缩进代码,也就是x为0就是我们计算的结束。
接着我们在ys的末尾加了x除以2的余数,也就是求模运算符。
接着我们将x值更新,将他除以2后储存到新的x值中。
因为小数点已经被余数所去掉了,所以我们不需要小数点后面的,于是用了floor(向下取整),得到了一个新的被除数
系统判断他为不为0,若不为0则重复以上循环,若为0就向我们报告
接下来就是最终的报告了,成品代码如下:
我们先在12行将ys的每一项都变成str而不是int,若没有这一步底下的join就不行。
接着我们在while的外面设置了最终数值——y,将其变为ys列表里的每一项合并起来的二进制数值
最后我们print,整个计算过程OK
现在我们来试验一下:
一切完美!
嗯哼君 渠源对头得嘞
在join上一行加一个ys.reverse()就OK了
还有,18行(加上reverse这一行)的global x是声明x为全局变量
Python与源码的区别是源码的函数内变量默认为全局变量,而Python中则不然,所以需要声明一下
点赞0
评论
我用C++做一题:
#include<iostream>
using namespace std;
int main(){
int a,x=0,m=1;
cin>>a;
while(a!=0){
x+=a%2*m;
m*=10;
a/=2;
}
cout<<x;
return 0;
}
点赞0
评论