python 玩具代码
脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单
#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器;
#!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。
#!/usr/bin/python相当于写死了python路径;
#!/usr/bin/env python会去环境设置寻找python目录,推荐这种写法
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
s = (x * x for x in range(5))
print(s)
for x in s:
print(x)
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
f = fib(10)
print('fib(10):', f)
for x in f:
print(x)
# call generator manually:
g = fib(5)
while 1:
try:
x = next(g)
print('g:', x)
except StopIteration as e:
print('Generator return value:', e.value)
break
# 1 杨辉三角 # / \ # 1 1 # / \ / \ # 1 2 1 # / \ / \ / \ # 1 3 3 1 # / \ / \ / \ / \ # 1 4 6 4 1 # / \ / \ / \ / \ / \ # 1 5 10 10 5 1 # 数学规律就是 上一行错位相加 得到 当前行的 每一列的值 # 该方法本质是利用 杨辉三角的数学规律以及 yield 去动态扩展 generator 的特性 def triangel(): l=[1] # 定义第一行元素 while True: # 开启死循环来 动态扩展 generator 注意: 进入 while 循环认为 的 list 认为是保存当前行的 list yield l # 每次都会把 l 这个 list 里保存的上一行的数据先缓存到 generator 里(这时候 l 还没有进行数学规律的运算 也就是还没有涉及到当前行) l.append(0) # 将上一行 最末 补 0 l =[l[i]+l[i-1] for i in range(len(l))] # 此处对当前行进行数学规律运算 循环得到 当前行 每一列的值 l[-1] 取到 最后 一个元素 l 是 L 的小写 # 以上方法完毕 # 下面利用 n 来控制动态 generator 生成器 生成多少行 n=0 for element in triangel(): print(element,'\t') # 循环打印 generator 中动态生成的 每一行数据 n = n+1 if(n==10): # 如果打印 了 10 行 就停止打印 break ##-----------------=============我是华丽的分割线=============-----------------## # 之前的注释 如下 # 杨辉三角 # 1 # 1 1 #1 2 1 # 使用 yield 来制造 generator 动态的扩展 def triangel(): # 定义第一行 L=[1] # 1 第一行的元素 while True: # 死循环来动态生成 yield L # 每次循环都用 yield 来保存 每行 List 到 generator L.append(0) # 在上一行 List 里补上一个元素 0 用来能够恰好错位相加得到 当前行的值 L=[L[i-1]+L[i] for i in range(len(L))] #制造 当前行,这是一个 循环的 过程那么根据什么来循环比较好呢,当然 是根据 上一行补 0 的长度来计算当前行每个元素的值 #而规律我们是知道的,当前行的某一个元素等于上一行的特定的两个元素相加(你懂的) #可以写一个公式,当前行的第n个元素 L(currentRow)[n]刚好等于 上一行第 n 列加上 上一行 第 n-1 列的值 L[currentRow-1](n) + L[currentRow-1](n-1) t=[] n=0 for element in triangel(): print(element) n=n+1 if(n==10): break t.append(element) print() for e in t: print(e)
# -*- coding: utf-8 -*- def triangles(): l=[1] while True: yield l l.append(0) l= [ l[i-1]+l[i] for i in range(0,len(l))] # return 'finally finshied!' # 期待输出: # [1] # [1, 1] # [1, 2, 1] # [1, 3, 3, 1] # [1, 4, 6, 4, 1] # [1, 5, 10, 10, 5, 1] # [1, 6, 15, 20, 15, 6, 1] # [1, 7, 21, 35, 35, 21, 7, 1] # [1, 8, 28, 56, 70, 56, 28, 8, 1] # [1, 9, 36, 84, 126, 126, 84, 36, 9, 1] n = 0 results = [] for t in triangles(): print(t) results.append(t) n = n + 1 if n == 10: break #print(results) for i,e in enumerate(results): if i!=len(results)-1 : del e[-1] print(results) if results == [ [1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15, 20, 15, 6, 1], [1, 7, 21, 35, 35, 21, 7, 1], [1, 8, 28, 56, 70, 56, 28, 8, 1], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1] ]: print('测试通过!') else: print('测试失败!')
这一波 666 , 双击吧 老铁! def triangle(max): l=[1] n=0 while True: yield l l.append(0) l=[l[i-1]+l[i] for i in range(len(l))] n=n+1 if(n==max): return "done" g=triangle(10) count=1 while 1: try: x=next(g) print("第 %d 行的值为 %s"%(count,x)) count=count+1 except StopIteration as e: print("generator value: ",e.value) break
# 斐波拉契 # 1,1,2,3,5,8..... def fib(max): n=0 a=0 b=1 while n<=max: a,b = b,a+b n = n+1 return b for i in range(10): print(fib(i))
# 斐波拉契 生成器写法 # 1,1,2,3,5,8..... def fib(max): n=0 a=0 b=1 while n<=max: yield b a,b = b,a+b n = n+1 for i in (fib(10)): print(i)
# 第一种写法使用函数式编程 def power(x): return x*x l=[i for i in range(10)] for e in list(map(power,l)): print(e) print('') # 第二种写法 使用列表生成式 l=[x*x for x in range(10)] for e in l: print(e)
def trim(s): if bool([x for x in s if x is not ' ']) is not True: return '' #TypeError while s[0] is ' ': s = s[1:] while s[-1] is ' ': s = s[:-1] return s # 测试: if trim('hello ') != 'hello': print('测试失败!') elif trim(' hello') != 'hello': print('测试失败!') elif trim(' hello ') != 'hello': print('测试失败!') elif trim(' hello world ') != 'hello world': print('测试失败!') elif trim('') != '': print('测试失败!') elif trim(' ') != '': print('测试失败!') else: print('测试成功!')
from collections import Iterable def printIterator(itera): if isinstance(itera,Iterable): print(type(itera)) for e in itera: print(e) else: raise ValueError l=list(range(10)) printIterator(l) print('') dict={'0':0,'1':1,'2':2} printIterator(dict) printIterator("a,b,c,d")
# -*- coding: utf-8 -*- from functools import reduce DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} # 分析 整数位 与 小数位 分别 对待 就可以 def str2float(s): wholeNum = s.split('.',1) intDigt = wholeNum[0] decimalDigt = wholeNum[1] # 整数部分处理 def intDigtFunc(x,y): return x * 10 + y def intDigitStr2Decimal(intDigt): return reduce(intDigtFunc,map(lookUpValue,intDigt)) # 小数部分处理 def power(x,y): n=1 mul=1 while n<=y: mul=mul*x n=n+1 return mul def lookUpValue(ch): return DIGITS[ch] # 做两次 相加 def parseDecimalDigt(s): return map(lookUpValue,s) def decimalDigitStr2Decimal(decimalDigt): sum=0.0 for i, value in enumerate(parseDecimalDigt(decimalDigt)): # print(i,'--> ',value) # print(power(10,i+1)) sum = sum + value*1.0/(power(10,i+1)) return sum # 将处理后的 整数, 小数部分 加起来 finalResult=intDigitStr2Decimal(intDigt)+decimalDigitStr2Decimal(decimalDigt) print(finalResult) return finalResult str2float('123.456')
# -*- coding: utf-8 -*- def _mt3odd_seq_generator(): n = 1 while True: n = n+2 yield n def fn(n): return lambda itValue: itValue % n > 0 # 获取素数生成器 def primes(): yield 2 # 2 作为一个特殊的素数需要被缓存 it = _mt3odd_seq_generator() # 初始化大于3的序列 #开始疯狂筛选 while True: #将筛选后的序列的第一个数 缓存 n = next(it) # 3,5,7..... yield n # 开始循环过滤 n 的倍数的 那些数字,并且筛掉后构造一个新的序列返回给 it it = filter(fn(n),it) for e in primes(): if e >= 30: break else: print('e: ',e)
# -*- coding: utf-8 -*- def is_palindrome(s): return s==int(str(s)[::-1]) # 测试: output = filter(is_palindrome, range(1, 1000)) print('1~1000:', list(output)) if list(filter(is_palindrome, range(1, 200))) == [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]: print('测试成功!') else: print('测试失败!')
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os def replaceStrInFile(file_name,old_str,new_str,extension_name): print('file name: ',file_name) paths = os.path.split(file_name) file_name_new = paths[0]+'\\'+ paths[1][:paths[1].rindex(extension_name)]+'_new'+extension_name print('file new name: ',file_name_new) try: with open(file_name,'r') as fsR: line = fsR.readline() with open(file_name_new,'a') as fsW: while line: # len(line) != 0 print(line.replace(old_str,new_str)) line = fsR.readline() print('line: '+line) fsW.write(line.replace(old_str,new_str)+'\n') except IOError: print('IO Error!') def modify_specified_directory(dir_path,old_str,new_str,extension_name): for file_name in [x for x in os.listdir(dir_path) if os.path.isfile(dir_path+'\\'+x) and os.path.splitext(x)[1]==extension_name]: print('absolute path: '+dir_path+'\\'+file_name) replaceStrInFile(dir_path+'\\'+file_name,old_str,new_str,extension_name) modify_specified_directory('C:\\Users\xxx\\Desktop\\test','th>','td>','.txt')
package com.yli.utils; import java.io.*; class FileUtils { public static void main(String[] args){ System.out.println("start to convert file encoding..."); String srcPath="C:\\Users\\行行行\\Desktop\\天津样例数据\\rest"; String tarPath="C:\\Users\\xxx\\Desktop\\天津样例数据\\rest\\in"; File file=new File(srcPath); if(file.exists()){ //如果传进来的参数是文件夹 if(file.isDirectory()){ File[] fileList=file.listFiles(); for(File f:fileList){ System.out.println("start to convert file "+f.getName()+" from other encoding to UTF-8"); replaceStrInFile("th>",f,"td>",tarPath); } } else{ //传进来的是个文件名 System.out.println("start to convert file "+file.getName()+" from other encoding to UTF-8"); System.out.println(file.getAbsoluteFile()); replaceStrInFile("th>",file,"td>",tarPath); } } else throw new RuntimeException("The file or file folder doesn't exist!!! please check!!!"); } public static void replaceStrInFile(String oldStr, File file, String newStr, String tarPath) { // if(!(Charset.isSupported(srcCharset))) throw new UnsupportedCharsetException(srcCharset); BufferedReader fileBufRead=null; BufferedWriter fileBufWrite=null; String line=null; String realFileName=file.getName(); try{ fileBufRead=new BufferedReader(new FileReader(file)); fileBufWrite=new BufferedWriter(new FileWriter(tarPath+"\\"+realFileName)); System.out.println("abs file path: "+file.getAbsoluteFile()); while((line=fileBufRead.readLine())!=null){ if(line.indexOf("th>")!=-1){ line=line.replace(oldStr,newStr); } fileBufWrite.write(line,0,line.length()); fileBufWrite.flush(); fileBufWrite.newLine(); //System.out.println(line); } } catch(IOException ioe){ ioe.getCause(); } finally{ if(fileBufRead!=null) try{ fileBufRead.close(); } catch(IOException ioe){ ioe.printStackTrace();} } } // todo }