Exercise1:第一个Python程序

原文链接:http://learnpythonthehardway.org/book/ex1.html

        记住,在学本节之前你应该已经花了大量时间在Exercise0中学会了怎样安装一个文本编辑器并且知道如何使用它,能够使用命令行终端,以及可以使用这两个来很好的编程。如果你没有做到这些,那么你就不要继续往下学了,因为继续下去只会让你难受。这仅仅是这一次我会在开始的练习中提醒你不要跳过或者不听劝的独自前行。

        在一个名为ex1.py的文件中输入下面这些文本内容,文件名以.py结尾在Python中非常重要需要多注意。

print	"Hello World!"
print	"Hello Again"
print	"I like typing this."
print	"This is fun."
print	'Yay!Printing.'
print	"I'd much rather you 'not'."
print	'I "said" do not touch this.'
(*************此处省略掉了在Mac OSX编辑的效果截图*********)

如果你用的是像我的一样的EditPlus(呵呵,我没有去下Notepad++,差不多啦,建议不要学习我)你可以看到像下面的截图:


如果你的看起来和我的不是很一模一样也不要担心,关键点在这里:

1.主要到我在编辑器的左边没有输入行数,这些之所以在书中也打印出来时为了当说到一些特殊的行时,我可以这样说:”看第5行...“,你就不要在Python脚本中输入这些行数了。

2.注意到在每一行开始的print好像看起来和我上面写的看起来有点不一样。相似,并不是完全相同。每一个字符在不用的编辑器中都有其相匹配的大小。但是,它们颜色是不一样的,不过颜色没有关系,关键是你输入的字符一样就行。

然后在命令行终端输入并运行:python ex1.py

如果你输入正确的话可以看到和我下面相同的输出,否则你一定是输错了什么,就不要去怀疑你的电脑坏了。

在Windows的命令行工具中你可以看到如下结果:


在python ex1.py前面你肯能看到不同的名称,这些名称是跟你电脑或其他东西相关的,重要的是你输入的命令和输出的结果和我的一样。

如果你有一个看起来像下面的错误:

$ python ex/ex1.py
  File "ex/ex1.py", line 3
    print "I like typing this.
                             ^
SyntaxError: EOL while scanning string literal
学会如何读懂这些错误非常重要因为你以后会遇到很多这种错误,即使是我也犯了很多这样的错误。现在就让我们一行一行查看错误所在:

1.开始我们在命令行终端运行了ex1.py的脚本。

2.Python告诉我们在ex1.py的第三行有一个错误。

3.然后它把这一行打印了出来。

4.然后它用一个^(插入符)指向问题所在,提示我们是不是缺少了一个”(分号)?

5.最后,它打印出一个"SyntaxError"并且告诉我们可能关于错误的一些东西。这些错误提示非常模糊,不过如果你把这条错误提示输入到任何搜索引擎中去查找的话,你就会看到很多和你遇到一样错误的人并且你有可能从中学到如何去解决这个问题。


警告:

如果你来自其他国家,你可能会遇到ASCII编码错误,解决这个只要在你的脚本的最前面添加下面这条语句:

# -*- coding: utf-8 -*-
这就可以帮你解决在你的脚本中无法使用UTF-8编码的问题。

研究训练:

        在学习过程中你也需要研究训练,你应该试着做出里面包含的东西。如果你不能做出来,那么先跳过它,回过头再来解决它。

        对于这次的练习,请试着解决这些事情:

        1.编写你的脚本再另外打印一行内容。

        2.编写你的脚本使其只打印出所有行中的某一行。

        3.在某一行的最前面加上一个'#'(井号),看看它做了什么,找出这个符号有什么作用。

        从现在开始我不会解释每一个练习是怎样实现的除非这个练习有不同之处。

笔记:

         在英文中井号有很多单词可以表示,如‘octothorpe’、‘pound'、’hash'、'mesh‘等,你只要选择一个让你用的舒服的就行了。


学生遇到的常见问题:

       下面这些问题是学生在线学习本章节时遇到的是实际问题。你也可能在学习过程中也遇到这些问题,所有我就就收集了一些问题并为你们作出了回答。
        1.我可以使用IDLE吗?
        不行,你应该是使用OSX系统的终端或者WIndows系统的命令行工具,就像我在这里用的这些工具。如果你不知道如何使用这些,你可以去附录A中阅读《Command Line Crash Course》这本教程。
         2.怎样让你的文本编辑器编写文字以不同颜色标识?
        将你的文件以.py格式保存,例如ex1.py。然后你就可以看你你输入的有颜色标识了。
         3.当我运行ex1.py的时候出现SyntaxError: invalid syntax的错误。 
        你可以先试着运行Python,然后再试着输入Python程序。关闭你的终端,重新启动它并且立即只运行python ex1.py命令。
        4.出现 can't open file 'ex1.py':[Errno 2] No such file or directory的错误。
        你创建文件所在的路径必须与你安装路径一致。确认你用cd命令先到正确的目录下。例如:如果你保存的文件路径为:lpthw/ex1.py,然后你应该在执行pythong ex1.py输入之前执行cd lpthw/命令。如果你还不明白什么意思的话,你可以去看下第一给问题中提到的《Command Line Crash Course》这本教程。
        5.我怎样使我的文件支持我们国家的字符编码?
         确保你的文件开头有输入这个:# -*- coding: utf-8 -*-。
        6.我的脚本没有运行,得到的返回提示就没有任何输出。
       你最有可能没有按照我上面的内容逐字逐句输入,有可能输入:print  "Hello World"输入成了“Hello World"而把print忘了输入。你的文件内容一定要和我上面截图中的内容一样,我的是print  "Hello World"并且在每一行的前面都有print。确保你的文本内容和我的一样你就可解决这个问题了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是用C语言实现的程序,实现了Exercise 1至6的要求: ```c #include <stdio.h> #include <stdlib.h> #define MAX_PROCESS_NUM 5 // 最大进程数 #define MAX_TIME_SLICE 5 // 最大运行时间片 // 进程控制块 typedef struct PCB { int pid; // 进程ID int priority; // 优先数 int time_required; // 要求运行时间 int dynamic_priority; // 动态优先数 struct PCB *next; // 指向下一个进程控制块的指针 } PCB; // 初始化进程控制块 void init_pcb(PCB *pcb, int pid, int priority, int time_required) { pcb->pid = pid; pcb->priority = priority; pcb->time_required = time_required; pcb->dynamic_priority = priority; pcb->next = NULL; } // 将进程插入就绪队列 void insert_ready_queue(PCB **head, PCB *pcb) { PCB *p, *q; if (*head == NULL || pcb->dynamic_priority > (*head)->dynamic_priority) { pcb->next = *head; *head = pcb; } else { p = *head; q = p->next; while (q != NULL && pcb->dynamic_priority <= q->dynamic_priority) { p = q; q = q->next; } pcb->next = q; p->next = pcb; } } // 从就绪队列中删除进程 PCB *remove_ready_queue(PCB **head) { PCB *pcb = *head; if (*head != NULL) { *head = (*head)->next; } return pcb; } // 动态地调整进程的优先级和要求运行时间 void adjust_priority_and_time(PCB *pcb) { pcb->dynamic_priority--; pcb->time_required--; if (pcb->dynamic_priority < 0) { pcb->dynamic_priority = 0; } } // 显示就绪队列中的进程 void display_ready_queue(PCB *head) { if (head == NULL) { printf("Ready queue is empty.\n"); return; } printf("Ready queue:"); while (head != NULL) { printf(" P%d(%d,%d,%d) ->", head->pid, head->priority, head->dynamic_priority, head->time_required); head = head->next; } printf(" NULL\n"); } int main() { int i; PCB *pcb[MAX_PROCESS_NUM]; PCB *ready_queue = NULL; char process_name[MAX_PROCESS_NUM][3] = {"P0", "P1", "P2", "P3", "P4"}; // 输入每个进程的优先数和要求运行时间 for (i = 0; i < MAX_PROCESS_NUM; i++) { int priority, time_required; printf("%s:\n", process_name[i]); printf("Priority: "); scanf("%d", &priority); printf("Time required: "); scanf("%d", &time_required); pcb[i] = (PCB *)malloc(sizeof(PCB)); init_pcb(pcb[i], i, priority, time_required); } // 将五个进程按给定的优先数从大到小连成就绪队列 for (i = 0; i < MAX_PROCESS_NUM; i++) { insert_ready_queue(&ready_queue, pcb[i]); } // 处理机调度总是选队首进程运行 while (ready_queue != NULL) { PCB *running_process = remove_ready_queue(&ready_queue); printf("Running process: %s\n", process_name[running_process->pid]); adjust_priority_and_time(running_process); if (running_process->time_required > 0) { insert_ready_queue(&ready_queue, running_process); } else { printf("Process %s is finished.\n", process_name[running_process->pid]); free(running_process); } display_ready_queue(ready_queue); } return 0; } ``` 运行程序后,依次输入五个进程的优先数和要求运行时间,程序会将它们按照优先数从大到小的顺序连成就绪队列,并开始动态优先数算法的调度。程序会输出每次运行的进程名,以及进程控制块的动态变化过程。当某个进程的运行时间为零时,程序会将其状态置为“结束”,且从就绪队列中删除。最后程序结束时,会释放所有进程控制块的内存空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值