python 基础学习随笔

(一)print 字符串的拼接,与range 函数的简单使用

打印一个边长为n 的正方形:( str(), int() 字符串与数字的转换 )

a = int(input('>>>'))
for i in range(a):
    print('#'*a)
#?请打印一个空心正方形
a = 5
print('*'*a)
for i in range(a-2):
    print('*'+' '*(a-2)+'*')
print('*'*5)
#简单实现,是否可以引用for 循环来实现
a = 5
for i in range(a):
    if i == 0 or i == (a-1):
        print('*'*a)
    else:
        print('*'+' '*(a-2)+'*')
# range 函数前包后不包,注意边界问题
a = int(input('>>>'))
n = a//2
for i in range(-n,n):
    if i == -n or i == n-1:
        print('#'*a)
    else:
         print('#' + ' '*(a-2) + '#')
 # 对称负索引的使用,但是打出来是边长相等的吗,后边界对于奇数而言 n = n-a ,会不足奇数项

一百以内的奇数相加:(print 的在打印变量的时候不要添加引号)

a = 0
sum = 0
for i in range(1,100,2):
    a = a + i
    sum = sum + i   
print(sum)
sum = 0
for i in range(1,100,2):
    sum += i
print(sum)
#  += 的巧妙使用
sum = 0
for i in range(1,100):
    if i%2 != 0:
         sum = sum + i
print(sum)
# 用取模作为奇数的判断条件

(二)if 条件判断的使用

成绩判断问题 :(二分法对于大数据量处理是一个不错的选择)

score = int(input('please input your score>>>'))
if score > 70:
    if score > 90:
        print('A')
    elif score > 80:
        print('B')
    else:
        print('C')     
else:
    if score > 60:
        print('D')
    else:
        print('E')

#注意边界,注意区间的取值范围

成绩问题求1 到5 阶乘的和:

n = 1
sum = 0
for i in range(1,6):
    n *= i
    sum += n
print(sum)
sum = 0
for i in range(1,6):
    tmp = 1
    for j in range(1,i+1):
        tmp *= j
    sum += tmp
print(sum)
#循环的嵌套使用,和l临时变量的使用

(三)for 循环的简单实现

求素数:

num = int(input('please input your number>>>'))
for i in range(2,num):
    if num % i == 0:
        print('No')
        break
else:
    print('Yes')
#contnue 和 break 不是跳出语句块,所以if cond;break 不是跳出if,而是终止if 外的break所在的循环
#else  如果循环正常的执行结束,就执行else子句;(谜之else)
#如果使用break终止,else子句不会执行
num = int(input('please input your number>>>'))
flag = False
for i in range(2,num):
    if num % i == 0:
        flag = True
        break
if flag:
    print('No')
else:
    print('Yes')

#引入一个标记,作为条件的判断

真值表:

  1. " " 假
  2. "string" 真
  3. 0 假
  4. >=1 真
  5. <=-1 真
  6. ()空元组 假
  7. []空列表 假
  8. {}空字典 假
  9. None 假

请输入若干个整数,打印出最大值:

a = int(input('>>>'))
while True:
    b = int(input('>>>'))
    if b:
        int(b)
        if a > b:
            print(a)
        else:
            a = b
            print(a)
    else:
        break
#以前的固有思维,对于if 条件的使用
m = int(input('>>>'))
while True:
    c = input('>>>')
    if c:
        n = int(c)
        if n > m:
            m = n
        print(m)
    else:
        break
#作为python 语法条件的使用
#相同类型则可以比较大小
#不同类型可以比较是否相等

三目运算:

if 条件判断的简便写法:(判断俩个数的最大值)

a = int(input('>>>'))
b = int(input('>>>'))
print(a) if a>b else print(b)

升级版,输入若干整数,打印最大值:

max = int(input('>>>'))
flag = True
while flag:
    n = input('>>>')
    if n == 'quit':
        flag = False
    else:
        c = int(n)
        if c > max:
            max = c
        print(max)
#引号引起来为字符串

输入若干个值,每次输入后算出平均数:

sum = 0
count = 1
num1 = int(input('>>>'))
while True:
    num2 = input('>>>')
    if num2 == 'quit':
        break
    else:
        num2 = int(num2)
        count += 1
        sum = num1 + num2
        avg = sum/count
        print(avg)
#注意变量的重复赋值的迷惑性,break  跳出循环的巧妙使用,相比于打标签

九九乘法表的打印:(循环嵌套的使用)

for i in range(1,10):
    for j in range(1,i+1):
        line = str(i) + '*' + str(j) + '=' + str(i*j)
        print(line,end=' ')
    print()   
#print  为另起一行打印
for i in range(1,10):
    for j in range(1,i+1):
        print(('{}*{}={:2}'.format(j,i,j*i)),end=' ')
    print()
# 利用format 函数格式化输出
for i in range(1,10):
    line = ' '
    for j in range(1,i+1):
        line += '{}*{}={:2}    '.format(j,i,i*j)
    print(line)
#format  函数单引号里面的格式代表的输出格式
for i in range(1,10):
    line = ' '
    for j in range(1,i+1):
        line += '{1}*{0}={2:2}    '.format(j,i,i*j)
    print(line)
#format 函数默认索引为0,1,2.索引可以指定后面变量的使用 
for i in range(1,10):
    for j in range(1,10):
        if j <= i:
            print(str(j) + '*' + str(i) + '=' + str(i*j),end=' ')
    print()
# j  的取值范围巧妙做出判断

右上角乘法口诀表的打印:

for i in range(1,10):
    line = ''
    for j in range(1,10):
        if j >= i:
            line += str(i) + '*' + str(j) + '=' + str(i*j) + ' '
    print('{:>70}'.format(line))
#format  函数,<表示向左移动,> 表示向右移动
for i in range(1,10):
    line = ' '
    for j in range(1,10):
        if j >= i:
            line += '{}*{}={:{}} '.format(j,i,j*i,2)
    print('{:>66}'.format(line))
#format  函数的嵌套赋值
for i in range(1,10):
    line = ' '
    for j in range(1,10):
        if j >= i:
            line += '{}*{}={:<{}}'.format(j,i,j*i,2 if j < 4 else 3)
    print('{:>66}'.format(line))
#三目运算的回顾使用

打印菱形:

num = int(input('>>>'))
a = num//2
for i in range(-3,4):
    if i < 0:
        space = -i
    else:
        space = i
    print(' '* space + '*'*(num-space*2))
#对称性的使用
a = int(input('>>>'))
n =  a//2
for i in range(-n,a-n+1):
    if i < 0:
        i = -i
    print(' '*i + '*'*(a-i*2))
#python 语法实现

打印对顶三角形:

num = int(input('>>>'))
e = num//2
for i in range(-e,n-e):
    if i < 0:
        prspace = -i
    else:
        prspace = i
    print(' '*(e-prspace) + '*'*(2*prspace+1))

打印⚡:

for i in range(-3,4):
    if i < 0:
        print (' '*(-i) + '*'*(4+i))
    elif i > 0:
        print(' '*3 + '*'*(4-i))
    else:
        print('*'*7)
num = int(input('>>>'))
e = num//2
for i in range(-e,e+1):
    if i < 0:
        print (' '*(-i) + '*'*(e+1+i))
    elif i > 0:
        print(' '*3 + '*'*(e+1-i))
    else:
        print('*'*num)
#注意变量的关系,和之间的替换

100以内,斐波那契数列

num1 = 0
num2 = 1
print(num1,num2,sep='\n')
while True:
    num3 = num1 + num2
    num1 = num2
    num2 = num3
    print(num3)
    if num3 > 100:
        break
num1=0
num2=1
while True:
    num1,num2 = num2,num1+num2
    print(num2)
    if num2 > 100:
        break
#简单写法

斐波那契数列第101项:

num1=0
num2=1
count = 2
while True:
    num1,num2 = num2,num1+num2
    count +=1
    if count == 101:
        print(num2)
        break
#注意 是0 开始还是1 开始
num1=0
num2=1
count = 2
while True:
    num1,num2 = num2,num1+num2
    count +=1
    if count == 101:
        print('{},{}'.format(count,num2))
        break
#format 函数的回顾使用
a = 1
b = 1
print(a)
print(b)
while True:
    a,b = b,a+b
    if b > 100: 
        break
    print(b)
#不同的写法注意边界问题

求10万以内的素数:(性能要求)

import datetime
start = datetime.datetime.now()
for i in range(3,100000,2):
    for j in range(3,int(i**0.5)+1,2):
        if i%j == 0:
            break
    else:
        print(i)
delta = (datetime.datetime.now()-start).total_seconds()
print(delta)
import datetime
start = datetime.datetime.now()
for i in range(3,100000):
    if i%2 == 0 or i%5 == 0:
        continue
    else:
        for j in range(3,int(i**0.5)+1,2):
            if i%j == 0:
                break
        else:
            print(i)
delta = (datetime.datetime.now()-start).total_seconds()
print(delta)

#datetime 函数的引入
#continue  的使用
#注意二层循环引用一层循环的变量,减少程序的空运行
list = [2]
for i in range(3,10,2):    
    for j in list:      
        if i%j == 0:
            break
    else:
        print(i)
        list.append(i)
        print(list)
#列表的引入
#算法的引入:一个合数一定可以分为几个素数的成绩。

猴子吃桃的问题:

每天吃一半并多吃一个,第十天发现只有一个桃子,求第一天一共有多少个桃子:

peach = 1
for i in range(9):
    peach = 2*(peach+1)
print(peach)
# 简单的数学问题代码实现

杨辉三角打印:

triangle = [[1],[1,1]]
n = 9
for i in range(2,n):
    newline = [1]
    pre = triangle[i-1]
    for j in range(i-1):
        val = pre[j] + pre[j+1]
        newline.append(val)
    newline.append(1)
    triangle.append(newline)
print(triangle)
n = 9
print([1])
pre = [1,1]
print(pre)
for i in range(2,n):
    newline = [1]
    for j in range(i-1):
        val = pre[j] + pre[j+1]
        newline.append(val)
    newline.append(1)
    print(newline)
    pre = newline
n = 9
for i in range(n):
    newline = [1]
    if i == 0:
        print(newline)
        continue
    for j in range(i-1):
        val = pre[j] + pre[j+1]
        newline.append(val)
    newline.append(1)
    print(newline)
    pre = newline
n = 9
pre = [1]
print(pre)
pre.insert(0,0)
pre.append(0)
for i in range(1,n):
    newline = []
    for j in range(i+1):
        val = pre[j] + pre[j+1]
        newline.append(val)
    print(newline)
    pre = newline
    pre.insert(0,0)
    pre.append(0)
n = 9
pre = [1]
print(pre)
pre.append(0)
for i in range(1,n):
    newline = []
    for j in range(i+1):
        val = pre[j-1] + pre[j]
        newline.append(val)
    print(newline)
    pre = newline
    pre.append(0)

转置矩阵:

1  2  3                    1  4  7
4  5  6   -------->        2  5  8
7  8  9                    3  6  9
matrix = [[1,2,3],[4,5,6],[7,8,9]]
for i,row in enumerate(matrix):
    for j,col in enumerate(row):
        if i < j:
            matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j]
print(matrix)
matrix = [[1,2,3],[4,5,6],[7,8,9]]
length = len(matrix)
for i in range(length):
    for j in range(i):
        matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j]
print(matrix)
1 2 3                   1 4
             ------->   2 5
4 5 6                   3 6
matrix = [[1,2,3],[4,5,6]]
tm = []
for row in matrix:
    for i,col in enumerate(row):
        if len(tm) < i + 1:
            tm.append([])
        tm[i].append(col)
print(matrix)
print(tm)

用户输入数字打印每个数字重复的次数:

num = input('>>>')
d = {}
for c in num:
    if not d.get(c):
        d[c] = 1
        continue
    d[c] += 1
print(d)
num = input('>>>')
d = {}
for c in num:
    if c not in d.keys():
        d[c] = 1
    else:
        d[c] += 1
print(d)

随机产生100个整数,数字范围[-100,100],升序输出其重复的数字:

import random
n = 100
nums = [0] * n
for i in range(n):
    nums[i] = random.randint(-1000,10000)
print(nums)
t = nums.copy()
t.sort()
print(t)

d = {}
for x in nums:
    if x not in d.keys():
        d[x] = 1
    else:
        d[x] += 1
print(d)
d1 = sorted(d.items())
print(d1)

字符串重复统计:

import random
alphabet = 'abcdefghijklmnopqrstuvwxyz'
words = []
for _ in range(100):
    words.append(''.join(random.choice(alphabet) for _ in range(2)))
d = {}
for x in words:
    d[x] = d.get(x,0) + 1
print(d)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券