我的第一个Android小项目 冰炭不投de小计算器

一.前言

这是我首个使用java写的app,也在学习郭霖老师的第一行代码和李刚老师的疯狂java讲义之时,进行的练习之作,刚刚学习java和android,有些地方可能并没有做的很完善,希望大家可以多多包涵。

二.环境准备和所需知识点

1. 编译器:Andriod Studio

2. 新建一个项目并选择全部默认

3. 知识点:

  • 对Android界面和布局的了解
  • 对Android活动的了解
  • 对Java基础知识的了解(面向对象,集合)
  • 算法:中缀表达式转后缀表达式,后缀表达式计算结果

三.实现效果和界面,运行截图

1.实现效果:

  • 加减混合运算(浮点数)
  • 可带括号
  • 可保留上次计算结果

2.效果截图


四.界面的编写

1.布局

  • 我使用的是百分比布局,使用前在app/build.gradle文件中添加一条语句
compile 'com.android.support:percent:24.2.1'
  • 修改的地方:
  • 修改后,点击弹出了提醒语句中的 Sync Now

2.关于颜色搭配,推荐一个网站网站地址

3.界面的编写

  1. 所使用的控件:TextView Buttom
  2. 修改Activity_main.xml文件代码,内容如下
<android.support.percent.PercentRelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/buttonEqual"android:text="="android:layout_alignParentRight="true"android:textSize="25sp"android:background="#FFFFCD"android:layout_alignParentBottom="true"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonAdd"android:text="+"android:layout_alignParentRight="true"android:textSize="25sp"android:background="#F0FFFF"android:layout_above="@id/buttonEqual"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonSign"android:text="-"android:layout_alignParentRight="true"android:textSize="25sp"android:background="#F0FFFF"android:layout_above="@id/buttonAdd"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonMul"android:text="×"android:textSize="25sp"android:background="#F0FFFF"android:layout_alignParentRight="true"android:layout_above="@id/buttonSign"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonDiv"android:text="÷"android:layout_alignParentRight="true"android:textSize="25sp"android:background="#F0FFFF"android:layout_above="@id/buttonMul"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonDot"android:text="."android:layout_alignParentBottom="true"android:textSize="25sp"android:background="#FFFAF0"android:layout_toLeftOf="@id/buttonDiv"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button3"android:text="3"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@id/buttonDot"android:layout_toLeftOf="@id/buttonDiv"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button6"android:text="6"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button3"android:layout_toLeftOf="@id/buttonDiv"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button9"android:text="9"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button6"android:layout_toLeftOf="@id/buttonDiv"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonBack"android:text="删除"android:textSize="23sp"android:background="#F5F5F5"android:layout_above="@+id/button9"android:layout_toLeftOf="@id/buttonDiv"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button0"android:text="0"android:textSize="25sp"android:background="#F5F5F5"android:layout_alignParentBottom="true"android:layout_toLeftOf="@id/buttonDot"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button2"android:text="2"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@id/button0"android:layout_toLeftOf="@id/button3"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button5"android:text="5"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button2"android:layout_toLeftOf="@id/button6"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button8"android:text="8"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button5"android:layout_toLeftOf="@id/button9"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonRightBracket"android:text=")"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button8"android:layout_toLeftOf="@id/buttonBack"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonAC"android:text="AC"android:layout_alignParentBottom="true"android:textSize="25sp"android:background="#FFFAF0"android:layout_toLeftOf="@id/button0"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button1"android:text="1"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@id/button0"android:layout_toLeftOf="@id/button2"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button4"android:text="4"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button1"android:layout_toLeftOf="@id/button5"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button7"android:text="7"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button4"android:layout_toLeftOf="@id/button8"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonLeftBracket"android:text="("android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button7"android:layout_toLeftOf="@id/buttonRightBracket"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><TextViewandroid:id="@+id/textView"android:layout_width="0dp"android:layout_height="0dp"app:layout_widthPercent="100%"app:layout_heightPercent="25%"android:layout_above="@+id/buttonLeftBracket"android:background="#FFFAFA"android:gravity="bottom|right"android:text=""android:textColor="#292421"android:textSize="30dp"/></android.support.percent.PercentRelativeLayout>

4.隐藏自带标题

  • 修改app/src/main/res/values/styles.xml文件 修改内容如下:
<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="windowActionBar">false</item><item name="windowNoTitle">true</item></style></resources>

5.修改app图标和名字

  • 修改名字
    修改app/src/main/res/values/Strings.xml文件 修改内容如下:
<resources><string name="app_name">冰炭不投de小计算器</string>
</resources>
  • 修改图标

    1. 将图标放在pp/src/main/res/mipmap文件中
    2. 修改AndroidManifest.xml文件
android:allowBackup="true"
android:icon="@mipmap/图片名字" //修改这句
android:label="@string/app_name"

五.活动的编写

1. 思路

  • 为每个控件起相对应的名字和监控器,点击不同控件触发不同的事件

2. 计算器中应该考虑的异常,并禁止输入

  • 小数点不可在一个数字中多次出现
  • 除了*- 和/-之外 其他任意两个符号不可同时出现
  • 负号的处理,负号可以出现在首位,负号可以出现在*/后面
  • 右括号必须小于等于左括号的数量
  • 左括号前不能是数字,右括号后不能是数字
  • 等于时,左右括号数量必须相同,才能输出结果
  • 其他没有考虑到的错误,使用异常抛出错误

3.其他应该优化的地方

  • 除0
  • 已有符号时,再输入符号时,覆盖之前输入的符号
  • 保存上次计算结果
  • 删除键
  • 清屏键

4.修改MainAcitivy中的代码,内容如下

public class MainActivity extends AppCompatActivity implements View.OnClickListener {private TextView textView;private StringBuilder pending=new StringBuilder();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN);setContentView(R.layout.activity_main);textView = (TextView)findViewById(R.id.textView);//类似定义和赋值Button button0 = (Button)findViewById(R.id.button0);Button button1 = (Button)findViewById(R.id.button1);Button button2 = (Button)findViewById(R.id.button2);Button button3 = (Button)findViewById(R.id.button3);Button button4 = (Button)findViewById(R.id.button4);Button button5 = (Button)findViewById(R.id.button5);Button button6 = (Button)findViewById(R.id.button6);Button button7 = (Button)findViewById(R.id.button7);Button button8 = (Button)findViewById(R.id.button8);Button button9 = (Button)findViewById(R.id.button9);Button buttonAdd = (Button)findViewById(R.id.buttonAdd);Button buttonSign = (Button)findViewById(R.id.buttonSign);Button buttonMul = (Button)findViewById(R.id.buttonMul);Button buttonDiv = (Button)findViewById(R.id.buttonDiv);Button buttonEqual = (Button)findViewById(R.id.buttonEqual);Button buttonDot= (Button)findViewById(R.id.buttonDot);Button buttonRightBracket = (Button)findViewById(R.id.buttonRightBracket);Button buttonLeftBracket = (Button)findViewById(R.id.buttonLeftBracket);Button buttonBack = (Button)findViewById(R.id.buttonBack);Button buttonAC = (Button)findViewById(R.id.buttonAC);button0.setOnClickListener(this);//调用监听器button1.setOnClickListener(this);button2.setOnClickListener(this);button3.setOnClickListener(this);button4.setOnClickListener(this);button5.setOnClickListener(this);button6.setOnClickListener(this);button7.setOnClickListener(this);button8.setOnClickListener(this);button9.setOnClickListener(this);buttonAdd.setOnClickListener(this);buttonSign.setOnClickListener(this);buttonMul.setOnClickListener(this);buttonDiv.setOnClickListener(this);buttonEqual.setOnClickListener(this);buttonDot.setOnClickListener(this);buttonRightBracket.setOnClickListener(this);buttonLeftBracket.setOnClickListener(this);buttonBack.setOnClickListener(this);buttonAC.setOnClickListener(this);}@Override//监听器public void onClick(View v){//当前字符串的最后一个和倒数第二个int last = 0;int last_q =0;if(pending.length()!=0){last = pending.codePointAt(pending.length()-1);if (pending.length()>1)last_q =pending.codePointAt(pending.length()-2);}switch (v.getId()) {case R.id.button0:if(last!=')'){pending = pending.append("0");}else {pending = pending.replace(pending.length()-1,pending.length(),"0");}textView.setText(pending);break;case R.id.button1:if(last!=')'){pending = pending.append("1");}else {pending = pending.replace(pending.length()-1,pending.length(),"1");}textView.setText(pending);break;case R.id.button2:if(last!=')'){pending = pending.append("2");}else {pending = pending.replace(pending.length()-1,pending.length(),"2");}textView.setText(pending);break;case R.id.button3:if(last!=')'){pending = pending.append("3");}else {pending = pending.replace(pending.length()-1,pending.length(),"3");}textView.setText(pending);break;case R.id.button4:if(last!=')'){pending = pending.append("4");}else {pending = pending.replace(pending.length()-1,pending.length(),"4");}textView.setText(pending);break;case R.id.button5:if(last!=')'){pending = pending.append("5");}else {pending = pending.replace(pending.length()-1,pending.length(),"5");}textView.setText(pending);break;case R.id.button6:if(last!=')'){pending = pending.append("6");}else {pending = pending.replace(pending.length()-1,pending.length(),"6");}textView.setText(pending);break;case R.id.button7:if(last!=')'){pending = pending.append("7");}else {pending = pending.replace(pending.length()-1,pending.length(),"7");}textView.setText(pending);break;case R.id.button8:if(last!=')'){pending = pending.append("8");}else {pending = pending.replace(pending.length()-1,pending.length(),"8");}textView.setText(pending);break;case R.id.button9:if(last!=')'){pending = pending.append("9");}else {pending = pending.replace(pending.length()-1,pending.length(),"9");}textView.setText(pending);break;case R.id.buttonAdd: // +加if(last>='0' &&last<='9' ||last==')') {pending = pending.append("+");}else if(pending.length()>1&&last!='('){pending = pending.replace(pending.length()-1,pending.length(),"+");}if(pending.length()>1&&last=='-'&&(last_q=='*'||last_q=='/')){pending = pending.replace(pending.length()-2,pending.length(),"+");}textView.setText(pending);break;case R.id.buttonSign:// -减if(last>='0' &&last<='9' ||last==')'||last=='*'||last=='/'||pending.length()==0) {pending = pending.append("-");}else  if(pending.length()>1&&last!='('){pending = pending.replace(pending.length()-1,pending.length(),"-");}if(pending.length()>1&&last=='-'&&(last_q=='*'||last_q=='/')){pending = pending.replace(pending.length()-2,pending.length(),"-");}textView.setText(pending);break;case R.id.buttonMul: // *乘if(last>='0' &&last<='9' ||last==')') {pending = pending.append("*");}else if(pending.length()>1&&last!='('){pending = pending.replace(pending.length()-1,pending.length(),"*");}if(pending.length()>1&&last=='-'&&(last_q=='*'||last_q=='/')){pending = pending.replace(pending.length()-2,pending.length(),"*");}textView.setText(pending);break;case R.id.buttonDiv: // /除if(last>='0' &&last<='9' ||last==')') {pending = pending.append("/");}else if(pending.length()>1&&last!='('){pending = pending.replace(pending.length()-1,pending.length(),"/");}if(last=='-'&&(last_q=='*'||last_q=='/')){pending = pending.replace(pending.length()-2,pending.length(),"/");}textView.setText(pending);break;case R.id.buttonEqual: // =等于if((last>='0' &&last<='9' ||last==')')&&judje2()==0) {InfixInToDuffix inf = new InfixInToDuffix();String jieguo;String a="0";try {a = inf.toSuffix(pending);jieguo=inf.dealEquation(a);}catch (Exception ex){jieguo = "出错";}textView.setText(pending+"="+jieguo);pending = pending.delete(0, pending.length());if(Character.isDigit(jieguo.charAt(0))) {pending = pending.append(jieguo);}}break;case R.id.buttonDot:// 。小数点if(last>='0' &&last<='9'&&judje1()) {pending = pending.append(".");textView.setText(pending);}break;case R.id.buttonRightBracket:// )右括号if((last>='0' &&last<='9'||last==')')&&judje2()==1) {pending = pending.append(")");textView.setText(pending);}break;case R.id.buttonLeftBracket:// (左括号if((last<'0' ||last>'9')&&last!='.'&&last!=')') {pending = pending.append("(");textView.setText(pending);}break;case R.id.buttonBack: //删除if(pending.length()!=0) {pending = pending.delete(pending.length()-1,pending.length());textView.setText(pending);}break;case R.id.buttonAC: //清空pending = pending.delete(0, pending.length());textView.setText(pending);break;default:break;}}private boolean judje1(){String a="+-*/().";int[] b = new int[a.length()];int max;for (int i = 0;i < a.length();i++ ){String c =""+a.charAt(i);b[i] = pending.lastIndexOf(c);}Arrays.sort(b);if(b[a.length()-1]==-1){max = 0;}else{max = b[a.length()-1];}if(pending.indexOf(".",max)==-1){return true;}else{return false;}}private int judje2(){int a=0,b=0;for(int i = 0 ; i < pending.length() ;i++){if(pending.charAt(i)=='(' ) {a++;}if(pending.charAt(i)==')' ) {b++;}}if(a == b)return 0;if(a > b)return 1;return 2;}}

六.算法部分

1. 后缀表达式是什么和计算:链接

2. 中缀缀表达式(常见的表达式)转换成后缀表达式的方法:链接

3.在项目中新建一个InfixInToDuffix的java文件编写代码,如下

public class InfixInToDuffix {//使用集合定义好符号的运算优先级别private static final Map<Character,Integer>basic =new HashMap<Character, Integer>();static {basic.put('-',1);basic.put('+', 1);basic.put('*', 2);basic.put('/', 2);basic.put('(', 0);//在运算中  ()的优先级最高,但是此处因程序中需要 故设置为0}//将中缀表达式转换为后缀表达式public String toSuffix(StringBuilder infix){List<String> queue = new ArrayList<String>();                                    //定义队列  用于存储 数字  以及最后的  后缀表达式List<Character> stack = new ArrayList<Character>();                             //定义栈    用于存储  运算符  最后stack中会被 弹空char[] charArr = infix.substring(0,infix.length()).trim().toCharArray();                                    //字符数组  用于拆分数字或符号String standard = "*/+-()";                                                        //判定标准 将表达式中会出现的运算符写出来char ch = '&';                                                                    //在循环中用来保存 字符数组的当前循环变量的  这里仅仅是初始化一个值  没有意义int len = 0;                                                                 //用于记录字符长度 【例如100*2,则记录的len为3 到时候截取字符串的前三位就是数字】for (int i = 0; i < charArr.length; i++) {//开始迭代int last=0;if(i>0) {last = charArr[i-1];}ch = charArr[i];                                                            //保存当前迭代变量if(Character.isDigit(ch)) {                                                    //如果当前变量为 数字len++;}else if(ch == '.'){                                                        //如果当前变量为  .  会出现在小数里面len++;}else if(ch == '-' && (last =='*'||last=='/'||i==0)){                                                        //如果当前变量为  .  会出现在小数里面len++;continue;}else if(standard.indexOf(ch) != -1) {                                        //如果是上面标准中的 任意一个符号if(len > 0) {                                                            //长度也有queue.add(String.valueOf(Arrays.copyOfRange(charArr, i - len, i)));    //说明符号之前的可以截取下来做数字len = 0;                                                            //长度置空}if(ch == '(') {                                                            //如果是左括号stack.add(ch);                                                        //将左括号 放入栈中continue;                                                            //跳出本次循环  继续找下一个位置}if (!stack.isEmpty()) {                                                    //如果栈不为emptyint size = stack.size() - 1;                                        //获取栈的大小-1  即代表栈最后一个元素的下标boolean flag = false;                                                //设置标志位while (size >= 0 && ch == ')' && stack.get(size) != '(') {            //若当前ch为右括号,则 栈里元素从栈顶一直弹出,直到弹出到 左括号queue.add(String.valueOf(stack.remove(size)));                    //注意此处条件:ch并未入栈,所以并未插入队列中;同样直到找到左括号的时候,循环结束了,所以左括号也不会放入队列中【也就是:后缀表达式中不会出现括号】size--;                                                            //size-- 保证下标永远在栈最后一个元素【栈中概念:指针永远指在栈顶元素】flag = true;                                                    //设置标志位为true  表明一直在取()中的元素}if(ch==')'&&stack.get(size) == '('){flag = true;}while (size >= 0 && !flag && basic.get(stack.get(size)) >= basic.get(ch)) {    //若取得不是()内的元素,并且当前栈顶元素的优先级>=对比元素 那就出栈插入队列queue.add(String.valueOf(stack.remove(size)));                    //同样  此处也是remove()方法,既能得到要获取的元素,也能将栈中元素移除掉size--;}}if(ch != ')') {                                                            //若当前元素不是右括号stack.add(ch);                                                        //就要保证这个符号 入栈} else {                                                                //否则就要出栈 栈内符号stack.remove(stack.size() - 1);}}if(i == charArr.length - 1) {                                                //如果已经走到了  中缀表达式的最后一位if(len > 0) {                                                            //如果len>0  就截取数字queue.add(String.valueOf(Arrays.copyOfRange(charArr, i - len+1, i+1)));}int size = stack.size() - 1;                                            //size表示栈内最后一个元素下标while (size >= 0) {                                                        //一直将栈内  符号全部出栈 并且加入队列中  【最终的后缀表达式是存放在队列中的,而栈内最后会被弹空】queue.add(String.valueOf(stack.remove(size)));size--;}}}String a = queue.toString();return a.substring(1,a.length()-1);}public String dealEquation(String equation){String [] arr = equation.split(", ");                                    //根据, 拆分字符串List<String> list = new ArrayList<String>();                            //用于计算时  存储运算过程的集合【例如list中当前放置  100   20  5  /  则取出20/5 最终将结果4存入list   此时list中结果为  100  4 】for (int i = 0; i < arr.length; i++) {                                    //此处就是上面说的运算过程, 因为list.remove的缘故,所以取出最后一个数个最后两个数  都是size-2int size = list.size();switch (arr[i]) {case "+": double a = Double.parseDouble(list.remove(size-2))+ Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(a));     break;case "-": double b = Double.parseDouble(list.remove(size-2))- Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(b));     break;case "*": double c = Double.parseDouble(list.remove(size-2))* Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(c));     break;case "/": double d = Double.parseDouble(list.remove(size-2))/ Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(d));       break;default: list.add(arr[i]);     break;                                    //如果是数字  直接放进list中}}return list.size() == 1 ? list.get(0) : "运算失败" ;                    //最终list中仅有一个结果,否则就是算错了}}

七 更新优化

在之后的陆续测试中,由学长发现其中的不足之处,对于浮点数的计算,容易发生精度丢失,比如说3*1.3=3.900000000000000000001,对于这种情况我使用了BigDecimal类对运算进行了改进。更改后代码如下(只更改了InfixInToDuffix类下的dealEquation方法)

public String dealEquation(String equation){String [] arr = equation.split(", ");                                    //根据, 拆分字符串List<String> list = new ArrayList<String>();                            //用于计算时  存储运算过程的集合【例如list中当前放置  100   20  5  /  则取出20/5 最终将结果4存入list   此时list中结果为  100  4 】for (int i = 0; i < arr.length; i++) {                                    //此处就是上面说的运算过程, 因为list.remove的缘故,所以取出最后一个数个最后两个数  都是size-2int size = list.size();switch (arr[i]) {case "+": BigDecimal a = new BigDecimal(list.remove(size-2)).add(new BigDecimal(list.remove(size-2))); list.add(String.valueOf(a));     break;case "-": BigDecimal b = new BigDecimal(list.remove(size-2)).subtract(new BigDecimal(list.remove(size-2))); list.add(String.valueOf(b));     break;case "*": BigDecimal c = new BigDecimal(list.remove(size-2)).multiply(new BigDecimal(list.remove(size-2))); list.add(String.valueOf(c));     break;case "/": BigDecimal d = new BigDecimal(list.remove(size-2)).divide(new BigDecimal(list.remove(size-2)),10,BigDecimal.ROUND_HALF_UP); list.add(String.valueOf(d));       break;default: list.add(arr[i]);     break;                                    //如果是数字  直接放进list中}}return list.size() == 1 ? list.get(0) : "运算失败" ;                    //最终list中仅有一个结果,否则就是算错了}

Android小项目———— 冰炭不投de小计算器相关推荐

  1. java基础小项目_java基础小项目练习之1----3天做出飞机大战

    Shoot射击游戏第一天 一.关键问题(理论): 1.简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系 2.简述Hero类构造 ...

  2. python小项目案例-Python小项目:快速开发出一个简单的学生管理系统

    本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管理 学生信息的管理 根据A ...

  3. Python 小项目 猜数字小游戏

    欢迎来到<Python 小项目>专栏,这个专栏会不定时更新Python的小项目,大家可以订阅关注哦! 这次,我们要编写一个非常简单的猜数字小游戏! 先看看运行效果: 代码详细教学: 导入模 ...

  4. c语言课程结束小项目:2048小游戏

    <C语言程序设计基础>学习完毕,完成第一个项目:2048小游戏. //思考:编程时,要先想整个框架还是先想每个函数的算法. //思考:每一个函数要不要传参数(即数组) //思考:每一个函数 ...

  5. Python入门小项目-摇骰子小游戏

    大家平时微信上没少玩骰子吧,骰子比大小是我们经常玩的一个小游戏也十分的简单,就是不同玩家骰子点数比较大小.我们大学宿舍的时候,就经常比大小决定谁下去拿外卖,那时候费非常想让自己是最大的数,现在看来,以 ...

  6. Android小项目---BIM体质指数计算器

    BMI体质指数计算器 一.学习提示 1.1.项目目标:开发一款体质指数计算器,实现输入身高和体重即可判定体型是否正常. 1.2.知识点:Activity:布局:Widget组件(EditText/Bu ...

  7. 面向对象编程小项目,语音播报计算器

    #面向对象计算器,实现一些基本的操作,加减乘除,以及打印结果 import win32com.client #1创建语音播放器class Calculaor:def __check_num_zsq(f ...

  8. c++小项目练习之复数计算器

    准备了一个月的考试终于结束了.总结一下这一个月学到的理论知识,规划一下1月的计划.昨天敲了一天的代码.复数计算器是我敲的第一个比较大的程序,涉及到的主要知识点是运算符的重载和文件操作.纯代码后面再做详 ...

  9. python 设计简易计算器_python小项目——实现简易的计算器

    1 #!usr/bin/evn python 2 #coding:cp936 3 #Author:Siwen 4 5 6 print ("Hello world!")7 8 9 i ...

最新文章

  1. redirect和forward的区别
  2. web API简介(二):客户端储存之document.cookie API
  3. Android开发环境简单配置
  4. 【Netty】Netty 简介 ( 原生 NIO 弊端 | Netty 框架 | Netty 版本 | 线程模型 | 线程 阻塞 IO 模型 | Reactor 模式引入 )
  5. linux系统在虚拟机中迁移的技术难点
  6. golang定时任务的使用
  7. vidalia 更换浏览器代理
  8. 2021牛客暑期多校训练营3,签到题BEFJ
  9. 鼠标功能不全?这几款鼠标增强辅助工具Mac App不能错过
  10. [转载]Qlist的用法
  11. Windows11下Edge浏览器登录工行农行并使用K宝U盾
  12. 计算机软件图标不正常,桌面图标显示不正常,详细教您桌面图标显示不正常怎么解决...
  13. texmacs转到latex(winEdt)
  14. ubuntu下查看电脑内存硬盘CPU显卡驱动等配置命令
  15. IDEA 如何 buil dpath
  16. A Brief History of Just-In-Time 简读
  17. MATLAB | MATLAB中绘图的奇淫技巧合集
  18. 北京有哪些牛逼的中小型公司?
  19. 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。
  20. 3D模型的姿态单位化

热门文章

  1. Spring Cloud Discovery——Consul Discovery
  2. oa服务器域名修改,OA系统端口号和IP设置
  3. 使用致远OA系统,打开Excel类型文件,提示office编辑程序未安装
  4. SEO站群外链建设批量管理
  5. 打造专递课堂,即构成为希沃专递课堂实时音视频技术唯一提供方
  6. 对日或赴日工作日语面试题大总结(2)
  7. 阿里云服务器的购买与搭建
  8. JAVA手机游戏策划书(大纲)
  9. ubuntu系统下adb连接手机
  10. 浅析如何通过家庭教育提升小学生交通安全意识