不要再问我关于Zebra打印程序的问题了

各位实在抱歉,Zebra打印的程序只做过那一个,当时研究了一段时间觉得小有体会。现在实在想不起来了,两年半了,时间太久了。代码也在换地方的时候丢掉了。


个人觉得这个不是很难,各位有需要的你们多试试,相信自己肯定可以的。


关于Zebra打印的问题请不要再给我发邮件了。尤其是那些上来就写一句话让我把代码打包发送的人。我能提供的都在那篇文章里了。

 

谢谢!

class Ask(): def __init__(self,choices=['y','n']): # 创建一个提类,默认选项是y和n self.choices = choices # 把选项保存起来 def ask(self): # 提的方法 if max([len(x) for x in self.choices])>1: # 如果选项文字比较长(多于1个字符) for i,x in enumerate(self.choices): # 就把选项编上号显示 print("{0}. {1}".format(i,x),flush=True) # 打印:0. 选项1,1. 选项2... x = int(input()) # 等待用户输入数字 return self.choices[x] # 返回对应的选项 else: # 如果选项很短(比如y/n) print("/".join(self.choices),flush=True) # 就直接显示 y/n return input() # 等待用户输入并返回 class Content(): # 创建一个内容基类 def __init__(self,x): self.x=x # 保存内容 class If(Content): # 创建If类,表示"如果"条件 pass # 直接继承Content类,没什么特殊 class AND(Content): # 创建AND类,表示"并且"关系 pass # 直接继承Content类 class OR(Content): # 创建OR类,表示"或者"关系 pass # 直接继承Content类 # 定义动物识别的规则库 rules = { 'default': Ask(['y','n']), # 默认的提方式是y/n 'color' : Ask(['red-brown','black and white','other']), # 颜色有3个选项 'pattern' : Ask(['dark stripes','dark spots']), # 花纹有2个选项 # 定义什么是哺乳动物:有毛发 或者 产奶 'mammal': If(OR(['hair','gives milk'])), # 定义什么是食肉动物:有尖牙+爪子+前视眼睛 或者 吃肉 'carnivor': If(OR([AND(['sharp teeth','claws','forward-looking eyes']),'eats meat'])), # 定义什么是有蹄类动物:是哺乳动物 并且 (有蹄子 或者 反刍) 'ungulate': If(['mammal',OR(['has hooves','chews cud'])]), # 定义什么是鸟:有羽毛 或者 (会飞 并且 下蛋) 'bird': If(OR(['feathers',AND(['flies','lies eggs'])])), # 下面是具体动物的识别规则: 'animal:monkey' : If(['mammal','carnivor','color:red-brown','pattern:dark spots']), 'animal:tiger' : If(['mammal','carnivor','color:red-brown','pattern:dark stripes']), 'animal:giraffe' : If(['ungulate','long neck','long legs','pattern:dark spots']), 'animal:zebra' : If(['ungulate','pattern:dark stripes']), 'animal:ostrich' : If(['bird','long nech','color:black and white','cannot fly']), 'animal:pinguin' : If(['bird','swims','color:black and white','cannot fly']), 'animal:albatross' : If(['bird','flies well']) } class KnowledgeBase(): # 创建知识库类,这是最核心的部分 def __init__(self,rules): # 初始化知识库 self.rules = rules # 保存规则 self.memory = {} # 创建一个记忆字典,记住已经过的问题答案 def get(self,name): # 获取某个特征的值 if ':' in name: # 如果名字中有冒号,比如"color:red-brown" k,v = name.split(':') # 拆成两部分:color 和 red-brown vv = self.get(k) # 先获取颜色到底是什么 return 'y' if v==vv else 'n' # 如果颜色匹配返回y,否则返回n if name in self.memory.keys(): # 如果这个问题之前过 return self.memory[name] # 直接返回记住的答案,不用再 # 在规则库中找相关的规则 for fld in self.rules.keys(): if fld==name or fld.startswith(name+":"): # 找到匹配的规则 value = 'y' if fld==name else fld.split(':')[1] # 计算期望的值 res = self.eval(self.rules[fld],field=name) # 评估这个规则 if res!='y' and res!='n' and value=='y': # 如果得到具体动物名 self.memory[name] = res # 记住答案 return res if res=='y': # 如果规则成立 self.memory[name] = value # 记住答案 return value # 如果没找到对应规则,用默认方式提 res = self.eval(self.rules['default'],field=name) self.memory[name]=res # 记住答案 return res def eval(self,expr,field=None): # 评估表达式 if isinstance(expr,Ask): # 如果是提对象 print(field) # 打印问题 return expr.ask() # 调用提方法 elif isinstance(expr,If): # 如果是If条件 return self.eval(expr.x) # 评估条件内容 elif isinstance(expr,AND) or isinstance(expr,list): # 如果是AND或者是列表 expr = expr.x if isinstance(expr,AND) else expr # 获取实际内容 for x in expr: # 遍历每个条件 if self.eval(x)=='n': # 如果有一个条件不成立 return 'n' # 整个AND就不成立 return 'y' # 所有条件都成立 elif isinstance(expr,OR): # 如果是OR关系 for x in expr.x: # 遍历每个条件 if self.eval(x)=='y': # 如果有一个条件成立 return 'y' # 整个OR就成立 return 'n' # 所有条件都不成立 elif isinstance(expr,str): # 如果是字符串 return self.get(expr) # 递归获取这个特征的值 else: # 其他未知类型 print("Unknown expr: {}".format(expr)) # 创建知识库对象,传入规则 kb = KnowledgeBase(rules) # 开始识别动物 result = kb.get('animal') # 打印识别结果 print(result) 这个代码每一句是什么意思,用小白能听懂的话解释一下
最新发布
11-09
第2关:比较和逻辑运算符 100 学习内容 参考答案 记录 评论 任务描述 相关知识 比较运算符 逻辑运算符 编程要求 测试说明 任务描述 本关任务:判断两个字符串的大小,第一个大于第二个则返回两者逻辑相与的结果,否则返回第二个逻辑取反的结果。 例如:a为字符串"d",b为字符串"b",因为字符串"d"大于字符串"b",所以返回"d"逻辑与"b",即字符串"b"。 相关知识 比较运算符 JavaScript中的比较运算符有==,===,>,<,!=,>=等。 ==叫做相等,===叫做严格相等。双等号和三等号的区别是:三等号要求数据类型和值都相等,双等号只需要值相等即可,相等包含严格相等。 从比较过程来看,严格相等先比较两个对象的数据类型是否相等,不相等则结束比较,返回false,相等在数据类型不同时,尝试进行数据类型转换,例如,在字符串和数字的比较中,字符串会被转为数字再比较;布尔值true转为数字1,布尔值false转为数字0。 如果数据类型相同,相等和严格相等都会直接比较值,值相等返回true。 需要特别注意的是,以上仅仅适用于非对象类型。对于对象类型,相等或者严格相等比较的都是对象的引用,而不是具体的值,就是说,一个对象和其他任何对象都是不相等的,即使两者属性、值都相等。下面给出一些例子: var stringVariable = "2"; var number1 = 2; var number2 = 2; console.log(stringVariable == number1);//true console.log(stringVariable === number1);//false console.log(number1 === number2);//true var studentA = { name:"Bob", age:22 } var studentB = { name:"Bob", age:22 } console.log(studentA == studentB);//false,因为不是同一个对象 var studentC = studentA; console.log(studentA == studentC);//true,因为是同一个对象 将studentA赋值给studentC,这时studentC和studentA指向内存中的同一个地址块,视为同一个对象,所以两者相等。 不等 对应于上面的等号,不等号也有两种:!=和!==。 !=和==互为相反,==成立,!=一定不成立。 !==和===互为相反,严格相等成立,则严格不相等不成立。 其它 大于,小于,大于等于,小于等于的比较规则如下: 比较的两个对象都是数字,按照数学中数字的比较方法。 数字和字符串比较,字符串转为数字后再比较。 字符串和字符串比较,从第一个字符开始,逐个比较,发现不相等立即返回。字符按照ASCII编码值的大小比较,一般只要记住:数字<大写字母<小写字母,字母a小于字母z,A小于Z, 比较过程中,当一个字符串结束另外一个字符串还有,还没有比较出大小,则长的字符串较大。 var number1 = 1;//定义变量number1 var number2 = 2;//定义变量number2 var string1 = "3";//string1 var lowerLetter = "a";//定义变量lowerLetter var upperLetter = "A";//定义变量upperLetter var string1 = "aa";//定义变量string1 var String2 = "ab";//定义变量String2 console.log(number1<number2);//输出true console.log(number2<string1);//输出true console.log(upperLetter<lowerLetter);//输出true console.log(lowerLetter<string1);//输出false console.log(string1<string2);//输出true 逻辑运算符 在介绍逻辑运算符之前,我们必须明确逻辑运算符的操作数只能是布尔型,其他类型都会被转换为布尔型:除了0,null,undefined,""外,其他的值转换为布尔值都是true。 逻辑与 逻辑与有两个操作数,中间用&&连接,只有两个操作数都是true结果才是true; 其中一个操作数不是布尔型,当左操作数为真值时,返回右操作数。当左操作数为假值时,返回左操作数。 逻辑或 逻辑或同样有两个操作数,用||连接,至少有一个操作数为true时结果为true; 其中一个操作数不是布尔型,当左操作数为真值时,返回左操作数。当左操作数为假值时,返回右操作数。 逻辑非 逻辑非只有一个操作数,!后连接操作数或表达式,意思是将操作数取反; 如果操作数不是布尔型,编译器首先将其他类型转换为布尔型,然后返回true或者false。 console.log(true&&false);//false console.log(true||false);//true console.log(!false);//true var number1 = 1; var number2 = 0; var string = "a"; console.log(number1&&string);//输出字符串"a" console.log(number1||string);//输出数字1 console.log(!number1);//false 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下: 完成函数mainJs(); 比较字符串a和b的大小; 如果a>b,则返回a逻辑与b的结果,否则返回a逻辑取反的结果(返回时使用return); 具体请参见后续测试样例。 比较需要用到条件表示式,如下: //打印a和b中较大的哪一个 var a = 1,b = 2; if(a > b) { console.log(a); } else { console.log(b); } 本关涉及的代码文件LoginBoolSymbol.js的代码框架如下: function mainJs(a,b) { //请在此处编写代码 /********** Begin **********/ /********** End **********/ } 测试说明 测试过程: 平台将读取用户补全后的LoginBoolSymbol.js; 调用其中的mainJs()方法,输入若干组测试数据; 最后根据测试结果判断程序是否正确。 以下是测试样例: 测试输入: b,d 预期输出: b 测试输入: z,zz 预期输出: False
10-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值