学材料的我卓突然想学一门编程语言,肯定推荐python啊,可是自己也是半路出家,只好现学现卖,想一些简单的例子保持她的兴趣,也是给自己一个动力,一起学比自己学动力大多了,还能得到认可,多好……
1.hello world
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print("xxx jiayou!")
这里,我平时用Linux环境,#!/usr/bin/python 这个是指定python解释器的位置,对于windows环境来说,配置好环境变量后,python会忽略这句指定。
2.输入输出
# -*- coding:UTF-8 -*-
names = ['xxx','yyy']
str = input("请输入一个名字:")
if str in names:
print(str+"是个好孩子")
else:
print("我不知道")
print("Bye~")
3.if-else语句和比较运算
# -*- coding: UTF-8 -*- #这里是指定编码格式如果中文显示为乱码,可能是编解码格式不对
#可以参考http://www.runoob.com/python/python-chinese-encoding.html
print("欢迎进入睡眠监督程序,请输入24小时制整数")
sleep_length = 0
sleep_time = int(input("几点睡的?")) #这里把输入的数字记录下来,int()把类型转换为整数
wake_time = int(input("几点醒的?"))
if sleep_time < wake_time: #转换为数值类型的变量才能比较大小
sleep_length = wake_time - sleep_time
else:
sleep_length = 24 - sleep_time + wake_time
print("昨晚的睡眠时长为",sleep_length)
if sleep_length < 7:
print("睡眠时间太短@_@")
elif sleep_length > 11:
print("睡这么久?#_#")
else:
print("睡眠时间合格")
4.for语句和格式输出(九九乘法表)
# -*- coding:utf-8 -*-
print("**********九九乘法表**********")
for i in range(1,10,1): #range()是一个函数,(1,10,1)表示从1到10,步长为1
for j in range(1,i+1,1):
print('%d * %d = %d'%(i,j,i*j),end='\t') #%d表示整数的占位,python会把后面的i,j,i*j这三个数依次放进三个%d的位置
#'\t'是制表符,跟空格差不多的意思
print('\n') #'\n'是换行符,表示一个换行
5. while循环和随机数生成
# -*- coding:utf-8 -*-
import random #引入random 模块
print("告别选择困难症之今天想吃什么&_&")
breakfast = ['包子+粥','油条+豆浆','鸡蛋+豆腐脑','馅饼+酸奶','面包+牛奶','煎饼+果汁','蒸饺+豆奶']
lunch = ['盖饭','汤面','炒面','炒饭','土豆粉','米线','麻辣烫','黄焖鸡','汉堡','麻辣香锅','鸡公煲','卤肉饭','排骨饭','炸鸡','石锅拌饭','牛肉粉','小面','水饺','咖喱饭']
dinner = ['盖饭','汤面','炒面','炒饭','土豆粉','米线','麻辣烫','黄焖鸡','汉堡','鸡公煲','卤肉饭','排骨饭','石锅拌饭','牛肉粉','小面','水饺','咖喱饭','馄炖']
fruit = ['香蕉','草莓','苹果','橘子','菠萝','西瓜','芒果','火龙果','小番茄','柚子','橙子','哈密瓜']
choice = int(input("就餐类型:1.早餐 2.午餐 3.晚餐 4.水果 请输入编号: >>"))
flag = 'no' #while循环的判断标志
while flag != 'ok':
if 1 == choice:
print(breakfast[random.randint(0,len(breakfast)-1)]) #使用random 模块的randint()函数来生成随机数
elif 2 == choice:
print(lunch[random.randint(0,len(lunch)-1)])
elif 3 == choice:
print(dinner[random.randint(0,len(dinner)-1)])
elif 4 == choice:
print(fruit[random.randint(0,len(fruit)-1)])
else:
print("请输入正确类型选项编号")
choice = int(input("就餐类型:1.早餐 2.午餐 3.晚餐 4.水果 请输入编号: >>"))
continue #continue 语句跳出本次循环,继续执行下次循环
flag = input("吃这个可以吗?输入ok 或者no >>")
print("今天又是好好吃饭的一天,棒!Enjoy food")
6. 双层循环和字符连接
# -*- coding:UTF-8 -*-
2 print("******程序员之-my heart Will Go On******")
3 print('\n')
4 char = 'secret'
5 allChar = [] #这个列表用来存放所有字符
6 for y in range(12, -12, -1): #y的范围,即高度
7 lst = [] #这个变量用来存放每行的字符串
8 lst_con = '' #这个变量用来存放当前行字符串
9 for x in range(-30, 30): #x的范围,即宽度
10 formula = ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 #心形曲线公式(x^2+y^2-1)^3-x^2*y^3=0
11 if formula <= 0:
12 lst_con += char[(x) % len(char)] #心形内部放字符
13 else:
14 lst_con += ' ' #心形外部放空格
15 lst.append(lst_con) #放入当前行
16 allChar += lst #加入到所有字符列表中
17 print('\n'.join(allChar)) #join()函数连接列表中所有字符串,输出
7. 斐波那契数列,循环和格式输出
# -*- coding:UTF-8 -*-
print("斐波那契数列") #F0 = 0 (n=0)
#F1 = 1 (n=1)
#Fn = F[n-1]+ F[n-2](n=>2)
n = int(input("你想看数列前几项?"))
one = 0
two = 1
if 1 <= n: #第一项
print('第1项是:%d' % (one))
if 2 <= n: #第二项
print('第2项是:%d' %(two))
for i in range(3,n+1): #之后的每一项都等于前两项相加
result = one + two
print('第%d项是:%d' % (i,result))
tmp = two
two = one + two
one = tmp
8. 回文之翻转字符串的两种方法,参考:http://baijiahao.baidu.com/s?id=1579943450505225770&wfr=spider&for=pc
# -*- coding:UTF-8 -*-
print("----------回文----------")
print("*《四时四首 春》 伯山*")
a = ['锦如花色春残饮','楼上正人愁','晏天横阵雁','思远寄情词']
for i in range(0,len(a)):
print(a[i]+","+''.join(reversed(a[i]))+"。") #resersed()函数翻转序列,并不改变序列本身,join()连接翻转后字符
#reverse()可以原地反转列表中元素,元组和字符串都是不可变对象,所以都不能用
print("*************************")
str = input("请输入一句话:")
while not str:
str = intput("不能为空,重新输入:")
print(str+"<=>"+str[::-1]) #切片[<start>:<end>:<step>],start默认值是0,end默认值是len(seq),step默认值是1。步长为-1代表反向切片(从右向左每次前进1步)
9. 递归函数与汉诺塔,参考:https://www.cnblogs.com/zhouzhishuai/p/8470607.html
# -*- coding:UTF-8 -*
print("学习汉诺塔") #汉诺塔是什么:https://baike.baidu.com/item/%E6%B1%89%E8%AF%BA%E5%A1%94/3468295?fr=aladdin
#如果有n个盘子,需要挪动的次数为2^n-1
n = int(input("请输入汉诺塔层数:"))
i = 0 #i定义为全局变量,用来计数
def move(n,a,b,c): #这是一个函数,将a塔的盘子经由b塔挪到c塔
global i #声明这里的i是刚才定义的那个全局变量i
if(n==1): #只有一个盘子,直接挪
i += 1
print('第',i,'次移动',a,'-->',c)
else:
move(n-1,a,c,b) #先把a塔上的n-1个盘子经由c塔挪到b塔
move(1,a,b,c) #再把a塔上剩下的1个盘子挪到c塔
move(n-1,b,a,c) #把b塔上的n-1个盘子挪到c塔
move(n,'A','B','C') #调用刚才写的move()函数
10. 逻辑判断与流程控制
# -*- coding:UTF-8 -*-
from random import randint #引入random模块的randint生成随机数
print("欢迎进入猜拳游戏,输入0,1,2分别代表剪刀石头布同电脑猜拳,三局两胜")
user_win=0 #记录玩家的局数
computer_win=0 #记录电脑赢的局数
deuce=0 #记录对局的局数
for index,value in enumerate(range(3)):
print('第{}局开始'.format(index+1))
user_num = int(input('请输入数字')) #玩家出拳
computer_num=randint(0,2) #电脑随机出拳
if user_num-computer_num==-1 or user_num-computer_num==2:
print('{} VS {} => 第{}局XX胜'.format(user_num,computer_num,index+1))
user_win+=1
elif user_num-computer_num==0:
print('{} VS {} => 第{}局平局'.format(user_num,computer_num,index+1))
deuce+=1
else:
print('{} VS {} => 第{}局电脑胜'.format(user_num,computer_num,index+1))
computer_win+=1
print('***********第{}局结束***********'.format(index+1))
if computer_win==2: #两负
print('最终结果 => 电脑胜')
break
elif user_win==2:
print('最终结果 => XX胜') #两胜
break
else:
if deuce == 1 and computer_win-user_win==0 and index==2: #一平一胜一负
print('最终结果 => 平局')
elif deuce == 3: #三平
print('最终结果 => 平局')
elif deuce == 2 and index ==2:
if computer_win-user_win==1: #两负一胜
print('最终结果 => 电脑胜')
else: #两胜一负
print('最终结果 => XX胜')
11. 图片转换为字符画,文件读写,命令行参数。
python day_11.py smile.jpg
vim output.txt
参考:
1. https://www.smslit.top/2018/09/14/image2charspic/
2. https://blog.csdn.net/yaoyefengchen/article/details/79287776
# -*- coding: utf-8 -*-
import argparse
from PIL import Image #PIL是一个Python图像处理的库
parser = argparse.ArgumentParser(description='此工具可以将图片转换为字符画。')
parser.add_argument('file', help='待转换的图片路径')
args = parser.parse_args()
IMG = args.file
WIDTH = 80 #字符画的长宽默认值
HEIGHT = 80
ascii_chars = list('''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. ''') #字符列表,与图片像素对应,用不同的字符代表不同的灰度值
ascii_table = [c * 2 for c in ascii_chars]
TABLE_LENGTH = len(ascii_table)
def getChars(gray): #由像素的灰度值计算对应的字符
if gray == 255:
return ' '
else:
return ascii_table[int(gray / 256 * TABLE_LENGTH)]
if __name__ == '__main__':
im = Image.open(IMG) #打开图片并转换为灰度图
im = im.resize((WIDTH, HEIGHT), Image.NEAREST)
im = im.convert('L')
txt = ''
for y in range(HEIGHT): #遍历图片中的每个像素
for x in range(WIDTH):
gray = int(im.getpixel((x, y)))
txt += getChars(gray)
txt += '\n'
with open('output.txt', 'w') as f: #结果写入txt文件
f.write(txt)