猫史档案馆


小小小嘟嘟

小小小嘟嘟

Lv.1

所有的程序员都是导演,所有的计算机都是烂演员。它们只会按照你编的程序严格执行,而不是按照你想的做……

获赞:1613收藏:1081浏览:38770作品收藏:1162
回复帖子评论
上一页2 页 / 共 2下一页

【Python作品分享】m【作品秀】 中回复

哦吼

 

2022-08-01T13:15:11 点赞:1

【Python作品分享】m【作品秀】 中回复

看我的喵o.cn/community/475077

2022-08-01T13:15:41 点赞:1

【Python作品分享】m【作品秀】 中回复

这不就是我以前想做的芒德布罗集吗

 

2022-08-01T13:19:01 点赞:1

【Python作品分享】m【作品秀】 中回复

我建议你学一下numpy库,这里面定义了一个数据类型很喵,就是ndarray,相当于多层嵌套的列表,但用它来运算速度比列表快个几十倍(甚至100倍)。里面还有一些方法很方便编程。

2022-08-01T14:26:28 点赞:1

【python病毒篇】小心慎用!!病毒源码喵病毒 中回复

这是什么?真的是病毒吗?怎么做到的?

2022-08-05T16:42:20 点赞:1

我和某某的交流区 中回复

我这就把我的一些(适合你的)作品传上来。

注意,你要发代码要选择工具栏的最右边按钮

2022-08-15T15:36:21 点赞:1

我和某某的交流区 中回复

找零

import math
import turtle
import time


target = float(input('找零(元):'))
M = [喵, 0.5, 0.1]
N = [0, 0, 0, 0, 0, 0, 0, 0]

for i in range(8):
    N[i] = math.floor(target / M[i])
    target = (target % M[i])
    print(M[i], '元纸币', N[i], '张')

t = turtle.Pen()
time.sleep(1)

t.hideturtle()
t.speed(0)
t.pensize(5)

C = ['red', 'orange', 'yellow', 'green', 'blue', 'purple', 'gray', 'black']
n = 0
for i in range(8):
    n = (n + N[i])

t.penup()
t.goto((-100), 0)
t.pendown()
for i in range(8):
    t.color(C[i])
    t.forward(((200 * N[i]) / n))

time.sleep(1)

不过我发现很多我觉得太无聊的作品我都删了……

2022-08-15T15:45:27 点赞:1

我和某某的交流区 中回复

----------------教程开始----------------

2022-08-15T16:03:42 点赞:1

我和某某的交流区 中回复

P1.0 关于注释

# 首先,像这样在行首或某行代码后加“#”的,在“#”之后直至行末的所有内容均为注释,不会被运行
# 注释可以方便自己和他人浏览代码,了解某部分代码是在做什么
# 如果一个作品很久不看,且没有注释,那么可能作者自己都会蒙(亲测)
# 要养成写注释的习惯(重要部分才写,但是为了教学,我会加上更多注释)
# 注释一般是在某几行代码前的一行上写,表示此块代码的作用;或是在某一行的后面写,说明本行代码的作用

 

2022-08-15T16:04:53 点赞:1

我和某某的交流区 中回复

P1.1 交互(输入/输出函数)

print()  # print译为打印,会将括号里的内容输出给你看,每次print会自动转行
         # 在海龟编辑器里就是在最下面深蓝色区域(终端区)显示print的内容
input()  # input译为输入,会在终端区出现光标,你可以在上面输入一些东西,并按回车结束输入
         # input的括号里可以写上提示并显示在终端区(相当于用一次print)

 

2022-08-15T16:14:22 点赞:1

我和某某的交流区 中回复

P1.2.1 数据类型(上,单个的数据类型)

# python里定义了很多数据类型,比如最简单的整数int、浮点数(一定位数精度的小数)float、字符串str。
# 想要看输出结果,还是要用到print:

# int类型 整数
print(1)
print(-10)

# float类型 浮点数
print(-0.1)
print(3.141592653589793238462643383279502884197169399375105820974944) # 超过15位小数部分会被忽略,这叫舍入误差

# 科学计数法:“e”相当于“乘10的……次方”
print(1e9, -1414.213562373095e-3) # print支持同时输出多个结果,用逗号隔开

# str类型 字符串:一般用英文状态下的单引号或双引号框住,内容可以是任意的英文字母、数字、符号(部分符号如转行等特殊的符号后面会讲)
print('abc123xyz890')
print('1.732050808') # 注意这不是float类型,是一个str!是不能进行计算的。
print("Amy's book") # 如果字符串中出现英文的单引号,则需用双引号
# 双引号会优先于单引号,即计算机若识别到双引号,则里面不管多少个单引号也是看作字符串的一部分
# 小练习:试着运行 print('\'),出现报错?上网查“转义字符”了解一下

print() # 可以通过打印“什么都没有”来实现空行,因为每一次print()都会默认转行,这些应该能自己想到

# 文本字符串:用三对单引号或双引号框住,内容可以有换行
a = '''# 注意⚠️在文本字符串中注释会看成文本的一部分!

数*****了:"这些你会吗?"
我**学:"我能说不会吗?"
数*****了:"……"

这时出现反斜杠\就不会报错了
''' # 这里是把这个文本字符串赋值给a,之后会讲到变量赋值
# 在文本字符串内任何字符都会直接保存原来的样子,不会出现任何报错
print(a)

# complex类型 复数(不是英语课上的复数):虚数单位“i”要用“j”或大写“J”替换,且j前一定要带上数字(整数或浮点数)
print(1048576j, (-0.7071067811865476+0.7071067811865476J)) # 一个complex包含实部 real part 和虚部 imaginary part,且用小括号括起来表示一个整体,用+或-连接
# 如果不用括号括起来则会视为一个浮点数和一个实部为0的复数相加(减),不过结果都一样

# 试着运行 print(j) 和 print(1-j),报错?那是因为j前一定要带数字,否则无法识别为虚数单位,这里要改为1j

2022-08-15T18:22:11 点赞:1

我和某某的交流区 中回复

P1.2.1 输出参考:

1
-10
-0.1
3.喵9793
1000000000.0 -1.414213562373095
abc123xyz890
1.732050808
Amy's book

# 注意⚠️在文本字符串中注释会看成文本的一部分!

数*****了:"这些你会吗?"
我**学:"我能说不会吗?"
数*****了:"……"

这时出现反斜杠\就不会报错了

1048576j (-0.7071067811865476+0.7071067811865476j)

 

2022-08-15T20:27:56 点赞:1

我和某某的交流区 中回复

P1.3 变量赋值(不得不提前讲的一节课)

# 都怪我,没有调好课程顺序,我发现要继续讲下去必须先讲赋值

# 首先讲一下变量
# 变量就是一个可以存储一个数据的容器
# 可以将有用的数据存储起来方便后续使用,也可以参与运算

# 变量的命名规则:
# 1. 变量名的字符只能由26个英文字母、数字0~9、下划线“_”组成
# 2. 变量名首个字符不能为数字(可以是下划线)
# 3. 变量名的英文字母区分大小写,如变量a和A是不同的两个变量
# 4. 推荐起名字的时候变量名要具体一点,最好能说明表示什么,而且长一点便于区分,不要遇到什么就取a, b, c, n, x, y, z等基本无信息量的名字,不要嫌麻烦(本人亲测)

# 变量的赋值
# 在python语法里要命名一个变量并对其赋值的结构:变量名 = 数据
# 一个等号就表示将等号右边的数据赋值给左边的变量
# 如:
n1, n2 = 0, 1 # 一般数字用来编号;可以用逗号隔开分别赋值
a_complex_number = 1-2J # 一般下划线在变量里充当空格的意思,若一个变量要用几个单词才能表达,就可以用下划线

# 那么在这两行代码之后就可以直接打出变量名使用这些变量了:
print(n2, n1)
print(a_complex_number)

# 变量可以再赋值以修改:
a_complex_number = -1+2J
print(a_complex_number) # 然后这个变量就变成新的值了
n1 = '0' # 还可以改变数据类型。本来n1是整型的,改为字符串不会报错(很多语言是不支持这么做的,直接报错)
print(n1)
# 想要交换两个变量的值怎么办?
# 正常想到的方法就是:
tamp = n1
n1 = n2
n2 = temp
# 其实用之前逗号隔开分别赋值的方法可以实现
n1, n2 = n2, n1 # 其实内部运行的原理,就是python运行时等号右边会先被视为一个元组,即(n2, n1),再将其对应元素分别赋值给n1和n2

# 最后聊一聊,比较一下python和其他语言的不同之一:
# python的变量赋值是其一大亮点
# 以前的很多编程语言(如C、C++、Java)都是静态类型的语言,
# 即里面的一个变量在定义时就要告诉计算机它的数据类型是什么,在定义后不能改变其数据类型,要改变只能定义一个不同数据类型的新变量
# 而python里面的变量是动态的,即可以随时改变
# 便捷是便捷,但这样做也会有损失,python既然是动态的,那每次运行变量都要检测数据类型,运算速度自然就比静态类型语言慢了

 

2022-08-16T17:29:51 点赞:1

【Python作品分享】Newton's Fractal_牛顿分形【作品秀】 中回复

这个是修改后的,其中在 get_index 中有一部分注释提供了另一种上色的算法,没注释的是默认算法,改成另一种算法同时要改动后面的少许内容,不懂的不建议改,想尝试的可以试着理解代码,然后自己改。

import numpy as np
import pygame
import sys


iter = 20  # iterations
roots = np.array([1.0+0.0j, -0.5+0.8660254037844386j, -0.5-0.8660254037844386j], dtype='c16')
# roots = np.array([1.5+0.0j, -0.75+0.5j, -0.75-0.5j], dtype = 'c16')


def f(x):
    a, b, c = x-roots[0], x-roots[1], x-roots[2]
    return x-a*b*c/(a*b+b*c+c*a)
def get_z(x):
    for i in range(iter):
        x = f(x)
    return x

def get_index():
    x0 = np.resize(np.linspace(-focus, focus, pl, dtype='c16'), (pl, pl))
    x0 = x0+x0.T*1j+middle  # initial values
    z = get_z(x0)  # calculate limities
    # calculate colors (Here are two methods)
    # zc = np.zeros(shape=(pl, pl, 3), dtype='u1')
    # npsum = np.sum
    # for i in range(pl):
    #     for j in range(pl):
    #         w = 1/(abs(roots-z[i][j])+1e-3)
    #         zc[i][j] = w/npsum(w)
    C = ((1, 0, 0), (0, 1, 0), (0, 0, 1))
    zc = np.zeros(shape=(pl, pl, 3), dtype='u1')
    for i in range(pl):
        for j in range(pl):
            dt = [abs(root-z[i][j]) for root in roots]
            c = 0
            for k in range(1, 3):
                if dt[c] > dt[k]:
                    c = k
            zc[i][j] = C[c]
    return zc

pygame.init()

rslt = 200  # resolution
middle = 0.0+0.0j
focus = 2
pl = 2*rslt+1  # real and imaginary part len
size = 200
d = size/rslt

screen = pygame.display.set_mode((2*size, 2*size))
pygame.display.set_caption("Newton's Fractal")

def render(zc):
    for j in range(pl):
        for i in range(pl):
            pygame.draw.rect(screen, 255*zc[i][j], (j*d, 2*size-i*d, d, d), 0)
    pygame.display.update()

button_size = 7
def draw_button(touched_index=-1):
    i = 0
    for pos in (roots_cpos):
        pygame.draw.circle(screen, (255, 255, 255),
                           (pos.real, pos.imag), button_size, 2)
        i += 1
    pygame.display.update()
    char = 'roots = {}, focus = {}, middle = {}'.format(roots, focus, middle)
    print(char+' '*(171-len(char)), end='\r')

def roots_trans(cpos):
    return (cpos/size-(1+1j)).conjugate()*focus+middle
def roots_invtrans(cpos):
    return size*(((cpos-middle)/focus).conjugate()+(1+1j))

roots_cpos = roots_invtrans(roots)
def check_pos(cpos):
    is_touch_buttons = (abs(roots_cpos-cpos) <= 2*button_size)
    for i in range(3):
        if is_touch_buttons[i]:
            return i
    return -1

def set_rslt(val):
    global rslt, pl, d
    rslt = val
    pl = 2*rslt+1
    d = size/rslt

render(get_index())
draw_button()

down = 0
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                iter += 1
            elif event.key == pygame.K_DOWN:
                if iter > 0:
                    iter -= 1
            elif event.key == pygame.K_LEFT:
                focus *= np.sqrt(2)
                roots_cpos = roots_invtrans(roots)
            elif event.key == pygame.K_RIGHT:
                focus /= np.sqrt(2)
                roots_cpos = roots_invtrans(roots)
            elif event.key == pygame.K_f:
                middle += (cpos.conjugate()/size-1+1j)*focus
                roots_cpos = roots_invtrans(roots)
            elif event.key == pygame.K_h:
                focus, middle = 2, 0.0+0.0j
                roots_cpos = roots_invtrans(roots)
            elif event.key == pygame.K_g:
                middle = np.mean(roots)
                focus = np.max(abs(roots-middle))
                roots_cpos = roots_invtrans(roots)
            elif event.key == pygame.K_RETURN:
                set_rslt(200)
            elif event.key == pygame.K_SPACE:
                set_rslt(50)
            render(get_index())
            draw_button()
        elif event.type == pygame.MOUSEBUTTONUP:
            down = 0
            set_rslt(200)
            render(get_index())
            draw_button()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            down = 1
            set_rslt(50)
            break
    x, y = pygame.mouse.get_pos()
    cpos = complex(x, y)
    if down == 0:
        index = check_pos(cpos)
    else:
        if index != -1:
            roots_cpos[index] = cpos
            roots[index] = roots_trans(cpos)

            render(get_index())
            draw_button()

# https://www.bilibili.com/video/BV1HQ4y1q78v?spm_id_from=333.337.search-card.all.click
# https://www.3blue1brown.com/lessons/newtons-fractal

2023-01-08T17:06:28 点赞:0