使用if结构的小游戏

if语句的规则:

  1. 每一条if语句必须包含一个else;
  2. 如果这个else永远都不应该被执行到,因为它本身没有任何意义,那么你必须在else后面使用一个叫做die的函数;
  3. if语句嵌套不要超过两层;
  4. 将if语句当做段落来对待;
  5. 布尔测试应当简单,如果复杂,则要将运算先放到一个变量里面,并且为变量值取一个好名字。

循环的规则

  1. 只有在循环中永不停止时使用while循环;
  2. 其他类型的循环都使用for循环;

调试的技巧

  1. 不要使用调试器;
  2. 最好的方法市使用print将想要检查的关键环节变量打印出来;
  3. 让程序一部分一部分的运行起来,不要等一个很长的脚本写完后才去运行它,写一点、运行一点、修改一点。

《笨办法学Python》习题35

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sys import exit

def gold_room():
    print "这是一个堆满了金子的房间。你想拿多少?"

    next = raw_input("> ")
    if "0" in next or "1" in next:
        how_much = int(next)
    else:
        dead("哥们,赶紧敲个数!")

    if how_much < 50:
        print "乖娃子,心不黑。\n拿着金子回家吧!"
        exit(0)
    else :
        dead("人心不足蛇吞象,去死吧!")

def bear_room():
    print "这边有一个熊窝"
    print "大黑熊正在大快朵颐的嚼蜂蜜。"
    print "在熊熊的背后就是通向另一间屋子的门。"
    print "你敢走向大熊么?"
    bear_moved = False

    while True:
        next = raw_input("> ")

        if next == "拿走蜂蜜":
            dead("熊熊发现了你,然后猛扑了过来撕掉了你的脸。你挂点了!")
        elif next == "嘲笑熊熊" and not bear_moved:
            print "大黑熊离开了门口,你赶紧夺门而逃。"
            bear_moved = True
        elif next == "嘲笑熊熊" and bear_moved:
            dead("大熊咆哮着撕掉了你的大腿。")
        elif next == "开门" and bear_moved:
            gold_room()
        else:
            print "我不知道发生了什么!"

def cthulhu_room():
    print "这里住着一个恐怖的克苏鲁!"
    print "在你彻底崩溃之后会在这里饿死!"
    print "你选择逃跑,还是吃掉你的脑袋?"

    next = raw_input("> ")

    if "逃跑" in next:
        start()
    elif "脑袋" in next :
        dead("尝起来还不错……")
    else:
        cthulhu_room()

def dead(why):
    print why, "你玩完了!"
    exit(0)

def start():
    print "你不幸掉到了一个黑漆漆的洞窟里面……"
    print "在你的面前有两扇门,一个在左,一个在右。"
    print "你选择哪一边?"

    next = raw_input("> ")

    if next == "左":
        bear_room()
    elif next == "右":
        cthulhu_room()
    else:
        dead("懦弱而不敢抉择的你饿死在这无尽的黑暗之中……")

start()

德国特强消石素是假药

由于夫人最近得了胆结石,大舅子就从香港给夫人买了一瓶“德国特强消石素”。估计是被那边的药店销售给骗了。

没有品牌名称、没有生产方信息、没有说明书、没有功效说明。号称德国产品,却全身都是英文标识。只有一个德国汉堡的制造商的信息。查询该厂商网站只有生产一些减肥、减脂类保健品的信息,没有药物商品信息。

产品成分完全就是大豆卵磷脂的配方表,Dietary Supplement也表明这是一个膳食添加剂。

虽然这玩意吃不坏人,或许还真有一点点功效,但270块买150粒三无卵磷脂明摆着在骗人。

数据和C

/* rhodium.c 用金属铑衡量您的体重 */
#include<stdio.h>
int main(void){
    float weight;
    float value;
    printf("Are you worth your weight in rhodium?\n");
    printf("Let's chek it out.\n");
    printf("Please enter your weight in pounds:");

    scanf("%f", &weight);

    value = 770 * weight * 14.5833;
    printf("Your weight in rhodium is worth $%.2f.\n",value);
    printf("You are easily worth that! If rhodium prices drop.\n");
    printf("eat more to maintain  your value.\n");

    return 0;
}

变量与常量的区别在于变量的值可以在程序执行过程中变化与指定,而常量不可以。


整数和浮点数的区别:
1. 整数没有小数部分、浮点数可以有小数部分;
2. 浮点数表示范围大于整数;
3. 对于一些算术运算,浮点数会损失更多精度;
4. 浮点数往往只是实际值的近似;
5. 浮点运算通常比整数运算慢。


int类型市有符号整数,一般取值范围市-32768~32768.系统通过使用一个只是正负符号的特定位来表示有符号整数。

使用printf()打印语句时,切记每个要显示的值都必须对应自己的格式说明符,并且显示值的类型要同说明符相匹配。


/* bases.c -- 十进制书以十进制、八进制、十六进制形式输出 */
#include<stdio.h>
#include<stdlib.h>
int main(void){
    int x;
    printf("Please input your number :\n");
    scanf("%d",&x);

    printf("dec = %d; octal = %o; hex = %x \n",x, x, x);
    printf("dec = %d; octal = %#o; hex = %#x \n",x, x, x);

    return 0;
}

/*charcode.c -- 显示一个字符值的编码值*/
#include<stdio.h>
int main(void){
    char ch;
    ch = getchar();

    printf("The code for %c is %d.\n", ch, ch);
    return 0;   
}

关键字

int,long,short,unsigned,char,double,signed,_Bool,_Complex,_Imaginary

有符号整数

  • int
  • short 或者 short int
  • long 或者 long int
  • long long 或者 long long int

无符号整数

只有0和正值
+ unsigned

字符

  • char

布尔值

_Bool

实浮点数

  • float
  • double
  • long double

复数和虚浮点数

C语言概述

程序(program)由一个或多个函数组成,其中必须有一个名为main()的函数。函数的描述由函数头和函数体组成。函数头(header)包括预处理语句和函数名。可通过圆括号识别一个函数名,圆括号内部可以为空。而函数体(body)位于花括号中并有一系列语句组成,每个语句以一个分号结束。


/*一个简单的C程序*/
#include<stdio.h>
/*
 * 预处理器命令,头文件(header)。
 * 头文件包括了建立最终的可执行程序市编译器需要的信息。
 * 但函数实际代码被包含在库文件中,而不是头文件。
 * 编译器的链接部分负责找到您需要的库代码。
*/

int main(void)
/*
 * 调用main函数,并不接受参数,int表示main()函数返回一个整数。
 * main()是必须开始的函数,是C的基本模块。
 * int指明了函数的返回类型。
 * C90允许使用main(),但C99不允许。建议使用main(void).
 */
 {
//花括号划定了main()函数的界限。
    int num;
    /* 定义一个名为num的变量。这一行叫做声明语句。
     * 说明函数中有一个叫做num的参数,该参数为整数类型。
     * int是C语言的关键字。
     * 在C语言中,所有变量都必须在使用之前定义。
     * 变量命名可供使用的字符有大小写字母、数字和下划线。
     * 第一个字符必须是字母或者下划线。
     * C语言区分大小写。*/
    num = 1;        /*为num赋值,赋值是C的基本操作之一*/

    printf("I am a simple ");   /*调用printf()函数*/
    printf("computer.\n");      /*再次调用printf()函数*/
    printf("My favorite number is %d because it is first.\n",num);
    /* 把num的值给printf()附参,并打印输出,%d表示输出值的位置和形式。
     * printf()是C语言的一个标准函数。圆括号表明printf是一个函数名。
     * 圆括号中的内容是从main函数传递到printf函数的信息,它被成为参数。*/
    return 0;   /*返回语句*/
    /* 返回语句是程序的最后一个语句。int main(void)要求返回一个整数值,
     * 则由return函数返回一个整数值0表示程序的结束。
}   /*结束*/

让程序具有可读性是一个良好的编程习惯。
常用的技巧有:
+ 选择有意义的变量名和使用注释;
+ 使用空行来分隔一个函数概念上多个部分;
+ 每个语句用一行;
+ 程序在开始处用一个注释说明文件的名称和程序的目的;
+ 多个声明


// two_func.c 在一个文件中使用两个函数
#include<stdio.h>
void butler (void);
/* 通知编译器要用到该函数.原型是一种声明的形式,用于告诉编译器使用自定义的函数。
 * butler函数第一个void说明butler()不返回值。
 * 第二个void说明没有参数。
 * void表明是空的,而非无效的。 */
int main(void){
        printf("I will summon the butler function.\n");
        butler();   /*调用函数*/
        printf("Yes. Bring me some tea and writeable CD-ROMS.\n");
        return 0;       
}

void butler(void){  /*函数定义*/
    printf("You rang, sir?\n"); //注意不需要return()函数返回值
}

一门语言的语法就是一套规则,用于管理这种语言中的合法语句组织在一起的方式。语句的语义就是它所表达的意思。编译器可以帮助您发现语法上的错误,但是程序里的语义错误只有在编译完之后才能从程序的行为中表现出来。检测语义错误可能包括跟踪程序的状态,即程序每执行一步之后所有变量的值。

关键字是C语言的词汇。

通过手工方式一步一步的跟踪程序,并记录每个变量,这样就可以监视程序状态。程序状态(program state)是指程序执行过程中的给定点上所有变量值的集合。它是当前计算状态的一个快照。
跟踪程序状态的方法有:
1. 逐步执行程序;
2. 在程序的关键点处加入printf()语句以监视所选变量的值。通过观察变量值的变化来了解程序的执行情况;
3. 使用调试器。调试器是一种程序,它可以一步一步运行另一个程序并检查程序的变量值。