python-小白入门

学材料的我卓突然想学一门编程语言,肯定推荐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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值