pyhon语法学习笔记

说明

以下是我学习python基础语法所完成的操作样例
代码位置:https://github.com/duganlx/fopnp

两个数相加

def add(a, b):
    return a + b


m, n = input('请输入两个数,用空格隔开:').split(' ')

print('{0} + {1} = {2}'.format(float(m), float(n), add(float(m), float(n))))

运行效果:

请输入两个数,用空格隔开:1 2
1.0 + 2.0 = 3.0

三数比大小

def sort(a, b):
    return (a, b) if (a > b) else (b, a)


n1, n2, n3 = input('请输入三个数,以空格隔开:').split(' ')
n1 = int(n1)
n2 = int(n2)
n3 = int(n3)

(n1, n2) = sort(n1, n2)
(n1, n3) = sort(n1, n3)
(n2, n3) = sort(n2, n3)

print("{}>{}>{}".format(n1, n2, n3))

运行效果:

请输入三个数,以空格隔开:2 3 5
5>3>2

算平方根

def sqrt(num):
    return num ** 0.5


num = float(input('输入一个数:'))
print('%0.3f 的平方根为 %0.3f' % (num, sqrt(num)))

运行效果:

输入一个数:9
9.000 的平方根为 3.000

计算三角形面积

def getTriangleArea(a, b, c):
    return (a + b + c) / 2


a = float(input('请输入第一条边:'))
b = float(input('请输入第二条边:'))
c = float(input('请输入第三条边:'))

print('面积为:', getTriangleArea(a, b, c))

运行效果:

请输入第一条边:3
请输入第二条边:4
请输入第三条边:5
面积为: 6.0

解二次方程式

import cmath


def getRes(a, b, c):
    d = (b ** 2) - (4 * a * c)
    sol1 = (-b - cmath.sqrt(d)) / (2 * a)
    sol2 = (-b + cmath.sqrt(d)) / (2 * a)
    return sol1, sol2


a = float(input('输入二次项系数:'))
b = float(input('输入一次项系数:'))
c = float(input('输入常数项系数:'))

print('该方程结果为:', getRes(a, b, c))

运行效果:

输入二次项系数:1
输入一次项系数:2
输入常数项系数:1
该方程结果为: ((-1+0j), (-1+0j))

交换两个变量

def swop(a, b):
    return b, a


x = input("输入x的值:")
y = input("输入y的值:")

x, y = swop(x, y)

print('The value of x after swapping: {}'.format(x))
print('The value of y after swapping: {}'.format(y))

运行效果:

输入x的值:5
输入y的值:10
The value of x after swapping: 10
The value of y after swapping: 5

产生随机数

import random

i = 1
for i in range(0, 10):
    print(random.randint(0, 9), end=' ')

运行效果:

1 3 1 5 9 7 9 7 2 5

将公里数转换为英里数

def km2mi(num):
    conv_fac = 0.621371
    return num * conv_fac


kilometers = float(input('请输入一个公里数:'))
print('%0.3f kilometers is equal to %0.3f miles' % (kilometers, km2mi(kilometers)))

运行效果:

请输入一个公里数:10
10.000 kilometers is equal to 6.214 miles

将摄氏温度转换为华氏温度

def tdc2ftt(celsius):
    return (celsius * 1.8) + 32


celsius = float(input('请输入一个摄氏度值:'))
print('%0.1f degree Celsius is equal to %0.1f degree Fahrenheit' % (celsius, tdc2ftt(celsius)))

运行效果:

请输入一个摄氏度值:10
10.0 degree Celsius is equal to 50.0 degree Fahrenheit

检查数字是正数,负数还是零

n = float(input('请输入一个数:'))

if n > 0:
    print('这是一个正数')
elif n < 0:
    print('这是一个负数')
else:
    print('零')

运行效果:

请输入一个数:0
零

检查数字是奇数还是偶数

number = int(input('输入一个整数'))

if number % 2 == 0:
    print('偶数')
else:
    print('奇数')

运行效果:

输入一个整数5
奇数

检查是否闰年

def isLeapYear(year):
    if year % 100 == 0:
        return True if (year % 400 == 0) else False
    else:
        return True if (year % 4 == 0) else False


year = int(input('请输入一个年份:'))

if isLeapYear(year):
    print('闰年')
else:
    print('不是闰年')

运行效果:

请输入一个年份:2019
不是闰年

找到三个数字中的最大数

def max(a, b):
    return a if (a > b) else b


num1 = float(input('输入第一个数:'))
num2 = float(input('输入第二个数:'))
num3 = float(input('输入第三个数:'))

res = max(num1, max(num2, num3))

print('最大的数是:', res)

运行效果:

输入第一个数:5
输入第二个数:23
输入第三个数:10
最大的数是: 23.0

检查是否质数

def isPrimeNum(num):
    for i in range(2, num - 1):
        if num % i == 0:
            return False
    return True


num = int(input('请输入一个整数:'))

if isPrimeNum(num):
    print('质数')
else:
    print('合数')

运行效果:

请输入一个整数:29
质数

以间隔打印出所有质数

def isPrimeNum(num):
    if num == 1 or num == 2:
        return True
    for i in range(2, num - 1):
        if num % i == 0:
            return False
    return True


maxNum = int(input('请输入一个最大数:'))

for n in range(1, maxNum):
    if isPrimeNum(n):
        print(n, end=' ')

运行效果:

请输入一个最大数:100
1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

找数字的因子

def getFactor(num):
    arr = []
    for i in range(1, num):
        if num % i == 0:
            arr.append(i)
    return arr


num = int(input('请输入一个数:'))

print('因子为', getFactor(num))

运行效果:

请输入一个数:20
因子为 [1, 2, 4, 5, 10]

显示乘法表

def multiplicationtable():
    for i in range(1, 10):
        for j in range(1, i + 1):
            print("%d * %d = %d " % (j, i, j * i), end=' ')
        print(' ')


multiplicationtable()

运行效果:

1 * 1 = 1
1 * 2 = 2  2 * 2 = 4
1 * 3 = 3  2 * 3 = 6  3 * 3 = 9
1 * 4 = 4  2 * 4 = 8  3 * 4 = 12  4 * 4 = 16
1 * 5 = 5  2 * 5 = 10  3 * 5 = 15  4 * 5 = 20  5 * 5 = 25
1 * 6 = 6  2 * 6 = 12  3 * 6 = 18  4 * 6 = 24  5 * 6 = 30  6 * 6 = 36
1 * 7 = 7  2 * 7 = 14  3 * 7 = 21  4 * 7 = 28  5 * 7 = 35  6 * 7 = 42  7 * 7 = 49
1 * 8 = 8  2 * 8 = 16  3 * 8 = 24  4 * 8 = 32  5 * 8 = 40  6 * 8 = 48  7 * 8 = 56  8 * 8 = 64
1 * 9 = 9  2 * 9 = 18  3 * 9 = 27  4 * 9 = 36  5 * 9 = 45  6 * 9 = 54  7 * 9 = 63  8 * 9 = 72  9 * 9 = 81

打印 Fibonacci 数列

def getFibonacci(num):
    if num == 1:
        return [1]
    arr = [1, 1]
    for i in range(2, num):
        arr.append(arr[i - 1] + arr[i - 2])
    return arr


num = int(input('请输入打印到Fibonacci第几项:'))
print('结果为', getFibonacci(num))

运行效果:

请输入打印到Fibonacci第几项:10
结果为 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

检查 Armstrong 数

import math


def isArmstrong(num):
    sum = int(0)
    n = int(num)
    while n != 0:
        temp = int(n % 10)
        n = int(n / 10)
        sum += math.pow(temp, 3)
    if sum == num:
        return True
    else:
        return False


num = int(input('请输入一个三位数整数:'))

if isArmstrong(num):
    print(num, '是水仙花数')
else:
    print(num, '不是水仙花数')

运行效果:

请输入一个三位数整数:123
123 不是水仙花数

在间隔中查找 Armstrong 数

import math


def isArmstrong(num):
    sum = int(0)
    n = int(num)
    while n != 0:
        temp = int(n % 10)
        n = int(n / 10)
        sum += math.pow(temp, 3)
    if sum == num:
        return True
    else:
        return False


num = int(input('请输入范围最大值:'))

for i in range(100, num):
    if isArmstrong(i):
        print(i, end=' ')

运行效果:

请输入范围最大值:1000
153 370 371 407

算自然数之和

def sum(num1, num2):
    return num1 + num2


n1 = float(input('请输入一个自然数:'))
n2 = float(input('请输入另一个自然数:'))

print('求和结果为:', sum(n1, n2))

运行效果:

请输入一个自然数:10
请输入另一个自然数:30
求和结果为: 40.0

用函数显示2的次方

import math


def showPower(n):
    return math.pow(2, n)


num = int(input('请输入想查看2的几次方:'))
print('结果为', showPower(num))

运行效果:

请输入想查看2的几次方:6
结果为 64.0

计算可被另一个数字整除的数字

def getFactor(num):
    arr = []
    for i in range(1, num):
        if num % i == 0:
            arr.append(i)
    return arr


num = int(input('请输入一个数:'))

print('它可以被', getFactor(num), '整除')

运行效果:

请输入一个数:30
它可以被 [1, 2, 3, 5, 6, 10, 15] 整除

十进制转换为二进制,八进制和十六进制

num = int(input('请输入一个数字:'))

print('二进制结果为:', bin(num))
print('八进制结果为:', oct(num))
print('十六进制结果为:', hex(num))

运行效果:

请输入一个数字:10
二进制结果为: 0b1010
八进制结果为: 0o12
十六进制结果为: 0xa

找字符的 ASCII 值

def findAscii(n):
    return ord(n)


print('该字符的ASCII值为:', findAscii(input('请输入一个字符:')))

运行效果:

请输入一个字符:a
该字符的ASCII值为: 97

计算 HCF 或 GCD(最大公约数)

def gcd(a, b):
    if a % b == 0:
        return b
    else:
        return gcd(b, a % b)


n, m = input('请输入两个数').split(' ')

print(gcd(int(n), int(m)))

运行效果:

请输入两个数10 30
10

计算 LCM(最小公倍数)

def gcd(a, b):
    if a % b == 0:
        return b
    else:
        return gcd(b, a % b)


def lcm(a, b):
    return a * b / gcd(a, b)


n, m = input('请输入两个数').split(' ')

print(lcm(int(n), int(m)))

运行效果:

请输入两个数10 30
30.0

找数字的因子

def getFactor(num):
    arr = []
    for i in range(1, num):
        if num % i == 0:
            arr.append(i)
    return arr


num = int(input('请输入一个数:'))

print('因子为', getFactor(num))

运行效果:

请输入一个数:40
因子为 [1, 2, 4, 5, 8, 10, 20]

制作简单计算器

import re


def add(a, b):
    return a + b


def sub(a, b):
    return a - b


def mul(a, b):
    return a * b


def div(a, b):
    return a / b


def cal(flag, a, b):
    if re.match('add', flag):
        return add(a, b)
    elif re.match('sub', flag):
        return sub(a, b)
    elif re.match('mul', flag):
        return mul(a, b)
    elif re.match('div', flag):
        return div(a, b)
    else:
        return 'err'


operation = input('请输入操作码(add, sub, mul, div):')
n, m = input('请输入两个数').split(' ')
print('计算结果为:', cal(operation, int(n), int(m)))

运行效果:

请输入操作码(add, sub, mul, div):sub
请输入两个数10 30
计算结果为: -20

发牌程序

import random
import operator


def getPokers():
    pokers = []
    poker = []
    for i in ['♥', '♠', '♦', '♣']:
        for j in ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']:
            poker.append(i)
            poker.append(j)
            pokers.append(poker)
            poker = []
    return pokers


pokers = getPokers()
random.shuffle(pokers)  # 将序列的所有元素随机排序
li = {}
for player in ['player1', 'player2', 'player3', 'player4']:
    b = random.sample(pokers, 13)
    for s in b:
        pokers.remove(s)
    li.setdefault(player, b)

print('player1:', sorted(li['player1'], key=operator.itemgetter(0, 1)))  # operator.itemgetter(0, 1)根据花色和数字来排序
print('player2:', sorted(li['player2'], key=operator.itemgetter(0, 1)))
print('player3:', sorted(li['player3'], key=operator.itemgetter(0, 1)))
print('player4:', sorted(li['player4'], key=operator.itemgetter(0, 1)))

运行效果:

player1: [['♠', '10'], ['♠', '3'], ['♠', '5'], ['♠', 'J'], ['♣', '2'], ['♣', '4'], ['♣', '7'], ['♣', '8'], ['♣', 'A'], ['♣', 'Q'], ['♥', '2'], ['♥', '4'], ['♦', '3']]
player2: [['♠', '2'], ['♠', '7'], ['♣', '5'], ['♣', '9'], ['♣', 'J'], ['♥', '3'], ['♥', '5'], ['♥', '6'], ['♥', 'J'], ['♥', 'K'], ['♦', '10'], ['♦', '8'], ['♦', 'K']]
player3: [['♠', '4'], ['♠', '6'], ['♠', '8'], ['♠', 'Q'], ['♣', '10'], ['♣', 'K'], ['♥', '7'], ['♥', '8'], ['♥', 'A'], ['♥', 'Q'], ['♦', '5'], ['♦', '9'], ['♦', 'J']]
player4: [['♠', '9'], ['♠', 'A'], ['♠', 'K'], ['♣', '3'], ['♣', '6'], ['♥', '10'], ['♥', '9'], ['♦', '2'], ['♦', '4'], ['♦', '6'], ['♦', '7'], ['♦', 'A'], ['♦', 'Q']]

显示日历

import calendar
# 设置第一天是星期天
calendar.setfirstweekday(firstweekday=6)

n = int(input('请输入所查看日历的级别 1(输出全年),2(输出某月):'))

if n == 1:
    yy = int(input("输入年份: "))
    cal = calendar.TextCalendar()
    cal.pryear(yy)

if n == 2:
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
    print(calendar.month(yy, mm))

运行效果:

请输入所查看日历的级别 1(输出全年),2(输出某月):2
输入年份: 2019
输入月份: 5
      May 2019
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

用递归显示 Fibonacci 数列

def Fibonacci(n):
    if n <= 2:
        return 1
    else:
        return Fibonacci(n - 1) + Fibonacci(n - 2)


n = int(input("输入一个正整数n,n为输出项数:"))
for i in range(1, n + 1):
    print(Fibonacci(i), end=' ')

运行效果:

输入一个正整数n,n为输出项数:5
1 1 2 3 5

用递归找整数之和

def sum(n):
    if n == 1:
        return 1
    else:
        return sum(n - 1) + n


i = int(input('输入一个整数:'))
print('其整数之和为:', (sum(i)))

运行效果:

输入一个整数:10
其整数之和为: 55

用递归算阶层

def Factorial(n):
    if n == 0:
        return 1
    else:
        return n * Factorial(n - 1)


i = int(input('输入一个整数:'))
print(i, '的阶乘为', Factorial(i))

运行效果:

输入一个整数:10
10 的阶乘为 3628800

用递归将十进制转换为二进制

def dec2bin(n):
    result = "0"
    if n == 0:
        return result
    else:
        result = dec2bin(n // 2)
        return result + str(n % 2)


n = int(input("请输入一个十进制的数字:"))
print(dec2bin(n))

运行效果:

请输入一个十进制的数字:10
01010

说明:
语句result = dec2bin(n // 2)中的//代表整数除法,若时/则表示浮点数除法

添加两个矩阵

import numpy

A = numpy.mat('1,2;3,4')
B = numpy.array([[3, 2], [3, 4], [9, 6]])
print(A)
print('')
print(B)

运行效果:

[[1 2]
 [3 4]]

[[3 2]
 [3 4]
 [9 6]]

转置矩阵

import numpy

A = numpy.array([[3, 2], [3, 4], [9, 6]])
print(A)
print('')
print(A.T)

运行效果:

[[3 2]
 [3 4]
 [9 6]]

[[3 3 9]
 [2 4 6]]

两个矩阵相乘

import numpy

A = numpy.array([[3, 2], [3, 4], [9, 6]])
B = numpy.array([[3, 1, 2], [3, 6, 4]])
C = numpy.dot(A, B)
print("A:\n", A)
print("B:\n", B)
print("A×B:\n", C)

运行效果:

A:
 [[3 2]
 [3 4]
 [9 6]]
B:
 [[3 1 2]
 [3 6 4]]
A×B:
 [[15 15 14]
 [21 27 22]
 [45 45 42]]

检查字符串是否为回文

s = input("输入一个字符串:")
d = ''.join(reversed(s))
print(d)
if s == d:
    print("字符串是回文")
else:
    print("字符串不是回文")

运行效果:

输入一个字符串:abcba
abcba
字符串是回文

说明:
str.join(sequence):通过指定字符str来连接sequence中元素生成新的字符串
示例:

str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq );

# 输出
a-b-c

从字符串中删除标点符号

import string

i = input("输入一条带标点的字符串(英文标点):")
print("".join(i.split('.')))

运行效果:

adfjkdffgdkfjk

按字母顺序排序的单词

list = ["delphi", "java", "python", "python", "c++", "c", "golang"]

list.sort(reverse=False)  # 按降序排列

print(list)

运行效果:

['c', 'c++', 'delphi', 'golang', 'java', 'python', 'python']

不同集合的操作

set1 = set([1, 2, 3, 4, 5])
set2 = set([0, 2, 3, 6, 7])

print('交集', set1 & set2)
print('并集', set1 | set2)
print('差集', set1 - set2)

运行效果:

交集 {2, 3}
并集 {0, 1, 2, 3, 4, 5, 6, 7}
差集 {1, 4, 5}

来计算每个元音的数量

str = input('请输入一个字符串')

strList = list(str)
a = 0
e = 0
i = 0
o = 0
u = 0

for n in range(0, len(strList)):
    if strList[n] == 'a':
        a = a + 1
    elif strList[n] == 'e':
        e = e + 1
    elif strList[n] == 'i':
        i = i + 1
    elif strList[n] == 'o':
        o = o + 1
    elif strList[n] == 'u':
        u = u + 1

print('a:', a, 'e:', e, 'i:', i, 'o:', o, 'u:', u)

运行效果:

a: 1 e: 1 i: 0 o: 0 u: 0

用于邮件的合并

from mailmerge import MailMerge

doc = MailMerge("./Ex44_file/test.docx")
doc.merge(
    username="ddu",
    clazz="17计算机科学与技术"
)

doc.write("./Ex44_file/res.docx")

运行效果:

# test.docx内容
我叫 «username»
我的班级是 «clazz»

# res.docx内容
我叫 ddu
我的班级是 17计算机科学与技术

找图像大小分辨率

from PIL import Image

fileName = "./Ex45_file/tuxiang.jpg"
img = Image.open(fileName)

imgSize = img.size

print(imgSize)

运行效果:

(471, 472)

文件的杂凑搜寻(哈希表)

# 实现hashtable,指定在key位置存入data
class HashTable:
    def __init__(self):
        self.size = 11
        self.slots = [None] * self.size
        self.data = [None] * self.size

    def put(self, key, value):
        hashvalue = self.hashfunction(key, len(self.slots))
        if self.slots[hashvalue] is None:  # 如果slot内是空值,则存进去
            self.slots[hashvalue] = key
            self.data[hashvalue] = value
        else:  # slot内已有key
            if self.slots[hashvalue] == key:  # 如果已有值等于key,更新data
                self.data[hashvalue] = value
            else:  # 如果slot不等于key,找下一个为None的地方
                nextslot = self.rehash(hashvalue, len(self.slots))
                while self.slots[nextslot] is not None and self.slots[nextslot] != key:
                    nextslot = self.rehash(nextslot, len(self.slots))

                if self.slots[nextslot] is None:
                    self.slots[nextslot] = key
                    self.data[nextslot] = value
                else:
                    self.data[nextslot] = value

    def rehash(self, oldhash, size):
        return (oldhash + 1) % size

    # 散列函数
    def hashfunction(self, key, size):
        return key % size

    def get(self, key):
        startslot = self.hashfunction(key, len(self.slots))
        data = None
        found = False
        stop = False
        pos = startslot
        while pos is not None and not found and not stop:
            if self.slots[pos] == key:
                found = True
                data = self.data[pos]
            else:
                pos = self.rehash(pos, len(self.slots))
                # 回到了原点,表示找遍了没有找到
                if pos == startslot:
                    stop = True
        return data

    # 重载载 __getitem__ 和 __setitem__ 方法以允许使用 [] 访问
    def __getitem__(self, key):
        return self.get(key)

    def __setitem__(self, key, value):
        return self.put(key, value)


if __name__ == '__main__':
    H = HashTable()
    H[54] = "cat"
    H[26] = "dog"
    H[93] = "lion"
    H[17] = "tiger"
    H[77] = "bird"
    H[31] = "cow"
    H[44] = "goat"
    H[55] = "pig"
    H[20] = "chicken"

    print(H.slots)  # [77, 44, 55, 20, 26, 93, 17, None, None, 31, 54]
    print(H.data)  # ['bird', 'goat', 'pig', 'chicken', 'dog', 'lion', 'tiger', None, None, 'cow', 'cat']
    print(H[20])  # 'chicken'
    H[20] = 'duck'
    print(H[20])  # duck
    print(H[99])  # None

运行效果:

[77, 44, 55, 20, 26, 93, 17, None, None, 31, 54]
['bird', 'goat', 'pig', 'chicken', 'dog', 'lion', 'tiger', None, None, 'cow', 'cat']
chicken
duck
None
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章