首页 > 其他分享 >四舍五入的死磕

四舍五入的死磕

时间:2023-10-10 20:32:33浏览次数:30  
标签:turtle 四舍五入 15 text tk pos2 pos1

num = 34564999
pos ='万'
UserPos=['个', '十', '百', '千', '万', '十万', '百万', '千万', '亿', '十亿', '百亿', '千亿']

MyStr=str(num)
if int(MyStr[len(MyStr)-UserPos.index(pos)])<5:
    lym=int(MyStr[0:len(MyStr)-UserPos.index(pos)])*int(str(1)+str(0)*UserPos.index(pos))
    print('{}精确到{}位是{}'.format(num,pos,lym))
else:
    lym=str(num+int(str(1)+str(0)*UserPos.index(pos)))[0:len(MyStr)-UserPos.index(pos)]+str(0)*UserPos.index(pos)
    print(lym)


# 时钟
# coding=utf-8

import turtle
from datetime import *


def Skip(step):
    turtle.penup()
    turtle.forward(step)
    turtle.pendown()


def mkHand(name, length):
    # 注册Turtle形状,建立表针Turtle
    turtle.reset()
    Skip(-length * 0.1)
    # 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。
    turtle.begin_poly()
    turtle.forward(length * 1.1)
    # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。
    turtle.end_poly()
    # 返回最后记录的多边形。
    handForm = turtle.get_poly()
    turtle.register_shape(name, handForm)


def Init():
    global secHand, minHand, hurHand, printer
    # 重置Turtle指向北
    turtle.mode("logo")
    # 建立三个表针Turtle并初始化
    mkHand("secHand", 135)
    mkHand("minHand", 125)
    mkHand("hurHand", 90)
    secHand = turtle.Turtle()
    secHand.shape("secHand")
    minHand = turtle.Turtle()
    minHand.shape("minHand")
    hurHand = turtle.Turtle()
    hurHand.shape("hurHand")

    for hand in secHand, minHand, hurHand:
        hand.shapesize(1, 1, 3)
        hand.speed(0)

    # 建立输出文字Turtle
    printer = turtle.Turtle()
    # 隐藏画笔的turtle形状
    printer.hideturtle()
    printer.penup()


def SetupClock(radius):
    # 建立表的外框
    turtle.reset()
    turtle.pensize(7)
    for i in range(60):
        Skip(radius)
        if i % 5 == 0:
            turtle.forward(20)
            Skip(-radius - 20)

            Skip(radius + 20)
            if i == 0:
                turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
            elif i == 30:
                Skip(25)
                turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
                Skip(-25)
            elif (i == 25 or i == 35):
                Skip(20)
                turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
                Skip(-20)
            else:
                turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
            Skip(-radius - 20)
        else:
            turtle.dot(5)
            Skip(-radius)
        turtle.right(6)


def Week(t):
    week = ["星期一", "星期二", "星期三",
            "星期四", "星期五", "李", "星期日"]
    return week[t.weekday()]


def Date(t):
    y = t.year
    m = t.month
    d = t.day
    return "%s %d%d" % (y, m, d)


def Tick():
    # 绘制表针的动态显示
    t = datetime.today()
    second = t.second + t.microsecond * 0.000001
    minute = t.minute + second / 60.0
    hour = t.hour + minute / 60.0
    secHand.setheading(6 * second)
    minHand.setheading(6 * minute)
    hurHand.setheading(30 * hour)

    turtle.tracer(False)
    printer.forward(65)
    printer.write(Week(t), align="center",
                  font=("Courier", 14, "bold"))
    printer.back(130)
    printer.write(Date(t), align="center",
                  font=("Courier", 14, "bold"))
    printer.home()
    turtle.tracer(True)

    # 100ms后继续调用tick
    turtle.ontimer(Tick, 100)


def main():
    # 打开/关闭龟动画,并为更新图纸设置延迟。
    turtle.tracer(False)
    Init()
    SetupClock(160)
    turtle.tracer(True)
    Tick()
    turtle.mainloop()


if __name__ == "__main__":
    main()

写英语文章模板

import time
ti = time.strftime('%Y-%m-%d-(%H%M)', time.localtime(time.time()))
i = 1
article=[]
evolutin=['o(Evolution)o\n','        '+ti+' ','Guangzhou\n','【Goal】\n\n',
          '【Problem】\n\n','【Diagnosis】\n\n','【Desin】\n\n','【Fulfilment】\n\n']
while i<=38:
    print(str(i)+'.'+'\n【 】')
    article.append(str(i)+'.'+'\n【 】\n')
    i+=1
print(article)

file=open('E:/'+str(ti)+'.txt','w')
for x in evolutin:
    file.write(x)


五子棋

# 调用pygame库
import pygame
import sys
# 调用常用关键字常量
from pygame.locals import QUIT, KEYDOWN
import numpy as np

# 初始化pygame
pygame.init()
# 获取对显示系统的访问,并创建一个窗口screen
# 窗口大小为670x670
screen = pygame.display.set_mode((670, 670))
screen_color = [99, 237, 204]  # 设置画布颜色,[238,154,73]对应为棕黄色
line_color = [255, 255, 255]  # 设置线条颜色,[0,0,0]对应黑色


def check_win(over_pos):  # 判断五子连心
    mp = np.zeros([15, 15], dtype=int)
    for val in over_pos:
        x = int((val[0][0] - 27) / 44)
        y = int((val[0][1] - 27) / 44)
        if val[1] == white_color:
            mp[x][y] = 2  # 表示白子
        else:
            mp[x][y] = 1  # 表示黑子
    for i in range(15):
        pos1 = []
        pos2 = []
        for j in range(15):
            if mp[i][j] == 1:
                pos1.append([i, j])
            else:
                pos1 = []
            if mp[i][j] == 2:
                pos2.append([i, j])
            else:
                pos2 = []
            if len(pos1) >= 5:  # 五子连心
                return [1, pos1]
            if len(pos2) >= 5:
                return [2, pos2]
    for j in range(15):
        pos1 = []
        pos2 = []
        for i in range(15):
            if mp[i][j] == 1:
                pos1.append([i, j])
            else:
                pos1 = []
            if mp[i][j] == 2:
                pos2.append([i, j])
            else:
                pos2 = []
            if len(pos1) >= 5:
                return [1, pos1]
            if len(pos2) >= 5:
                return [2, pos2]
    for i in range(15):
        for j in range(15):
            pos1 = []
            pos2 = []
            for k in range(15):
                if i + k >= 15 or j + k >= 15:
                    break
                if mp[i + k][j + k] == 1:
                    pos1.append([i + k, j + k])
                else:
                    pos1 = []
                if mp[i + k][j + k] == 2:
                    pos2.append([i + k, j + k])
                else:
                    pos2 = []
                if len(pos1) >= 5:
                    return [1, pos1]
                if len(pos2) >= 5:
                    return [2, pos2]
    for i in range(15):
        for j in range(15):
            pos1 = []
            pos2 = []
            for k in range(15):
                if i + k >= 15 or j - k < 0:
                    break
                if mp[i + k][j - k] == 1:
                    pos1.append([i + k, j - k])
                else:
                    pos1 = []
                if mp[i + k][j - k] == 2:
                    pos2.append([i + k, j - k])
                else:
                    pos2 = []
                if len(pos1) >= 5:
                    return [1, pos1]
                if len(pos2) >= 5:
                    return [2, pos2]
    return [0, []]


def find_pos(x, y):  # 找到显示的可以落子的位置
    for i in range(27, 670, 44):
        for j in range(27, 670, 44):
            L1 = i - 22
            L2 = i + 22
            R1 = j - 22
            R2 = j + 22
            if x >= L1 and x <= L2 and y >= R1 and y <= R2:
                return i, j
    return x, y


def check_over_pos(x, y, over_pos):  # 检查当前的位置是否已经落子
    for val in over_pos:
        if val[0][0] == x and val[0][1] == y:
            return False
    return True  # 表示没有落子


flag = False
tim = 0

over_pos = []  # 表示已经落子的位置
white_color = [0, 0, 255]  # 白棋颜色
black_color = [255, 0, 0]  # 黑棋颜色

while True:  # 不断训练刷新画布

    for event in pygame.event.get():  # 获取事件,如果鼠标点击右上角关闭按钮,关闭
        if event.type in (QUIT, KEYDOWN):
            sys.exit()

    screen.fill(screen_color)  # 清屏
    for i in range(27, 670, 44):
        # 先画竖线
        if i == 27 or i == 670 - 27:  # 边缘线稍微粗一些
            pygame.draw.line(screen, line_color, [i, 27], [i, 670 - 27], 4)
        else:
            pygame.draw.line(screen, line_color, [i, 27], [i, 670 - 27], 2)
        # 再画横线
        if i == 27 or i == 670 - 27:  # 边缘线稍微粗一些
            pygame.draw.line(screen, line_color, [27, i], [670 - 27, i], 4)
        else:
            pygame.draw.line(screen, line_color, [27, i], [670 - 27, i], 2)

    # 在棋盘中心画个小圆表示正中心位置
    pygame.draw.circle(screen, line_color, [27 + 44 * 7, 27 + 44 * 7], 8, 0)

    for val in over_pos:  # 显示所有落下的棋子
        pygame.draw.circle(screen, val[1], val[0], 20, 0)

    # 判断是否存在五子连心
    res = check_win(over_pos)
    if res[0] != 0:
        for pos in res[1]:
            pygame.draw.rect(screen, [238, 48, 167], [pos[0] * 44 + 27 - 22, pos[1] * 44 + 27 - 22, 44, 44], 2, 1)
        pygame.display.update()  # 刷新显示
        continue  # 游戏结束,停止下面的操作
    # 获取鼠标坐标信息
    x, y = pygame.mouse.get_pos()

    x, y = find_pos(x, y)
    if check_over_pos(x, y, over_pos):  # 判断是否可以落子,再显示
        pygame.draw.rect(screen, [0, 229, 238], [x - 22, y - 22, 44, 44], 2, 1)

    keys_pressed = pygame.mouse.get_pressed()  # 获取鼠标按键信息
    # 鼠标左键表示落子,tim用来延时的,因为每次循环时间间隔很断,容易导致明明只按了一次左键,却被多次获取,认为我按了多次
    if keys_pressed[0] and tim == 0:
        flag = True
        if check_over_pos(x, y, over_pos):  # 判断是否可以落子,再落子
            if len(over_pos) % 2 == 0:  # 黑子
                over_pos.append([[x, y], black_color])
            else:
                over_pos.append([[x, y], white_color])

    # 鼠标左键延时作用
    if flag:
        tim += 1
    if tim % 50 == 0:  # 延时200ms
        flag = False
        tim = 0

    pygame.display.update()  #

计算器

# 创建一个名为tkinter的别名
import tkinter as tk


# 定义一个函数,用于在文本框中添加数字
def button_click(number):
    # 获取当前文本框中的内容
    current = entry.get()
    # 清空文本框
    entry.delete(0, tk.END)
    # 在文本框中插入新的内容
    entry.insert(tk.END, current + str(number))


# 定义一个函数,用于清空文本框
def button_clear():
    # 清空文本框
    entry.delete(0, tk.END)


# 定义一个函数,用于计算表达式并在输出框中显示结果
def button_equal():
    # 获取文本框中的表达式
    expression = entry.get()
    try:
        # 计算表达式的结果
        result = eval(expression)
        # 清空输出框
        output_text.delete("1.0", tk.END)
        # 在输出框中插入结果
        output_text.insert(tk.END, "结果: " + str(result))
    except Exception as e:
        # 清空输出框
        output_text.delete("1.0", tk.END)
        # 在输出框中插入错误信息
        output_text.insert(tk.END, "错误: " + str(e))


# 创建一个名为root的窗口
root = tk.Tk()
root.title("计算器")

# 创建一个名为entry_frame的框架,并将其放置在窗口的第一行
entry_frame = tk.Frame(root)
entry_frame.grid(row=0, column=0, columnspan=5, padx=10, pady=10)

# 创建一个名为output_frame的框架,并将其放置在窗口的第二行
output_frame = tk.Frame(root)
output_frame.grid(row=1, column=0, columnspan=5, padx=10, pady=5)

# 创建一个名为entry的文本框,并将其放置在entry_frame中
entry = tk.Entry(entry_frame, width=35, borderwidth=5)
entry.pack()

# 创建一个名为output_text的文本框,并将其放置在output_frame中
output_text = tk.Text(output_frame, height=1, width=30)
output_text.pack()

# 创建一个包含所有按钮的列表
buttons = [
    ("7", 1, 2), ("8", 2, 2), ("9", 3, 2), ("/", 4, 2),  # 数字键和除号
    ("4", 1, 3), ("5", 2, 3), ("6", 3, 3), ("*", 4, 3),  # 数字键和乘号
    ("1", 1, 4), ("2", 2, 4), ("3", 3, 4), ("-", 4, 4),  # 数字键和减号
    ("0", 1, 5), ("C", 2, 5), ("=", 3, 5), ("+", 4, 5)  # 数字键、清空键和加号
]

# 遍历按钮列表,并创建每个按钮
for button in buttons:
    text, column, row = button
    if text == "=":
        # 创建一个计算结果的按钮
        btn = tk.Button(root, text=text, padx=40, pady=20, command=button_equal)
    else:
        # 创建一个数字按钮
        btn = tk.Button(root, text=text, padx=40, pady=20, command=lambda text=text: button_click(text))
    # 将按钮放置在窗口中
    btn.grid(row=row, column=column, padx=5, pady=5)

# 创建一个名为btn_clear的按钮,并将其放置在窗口的第七行
btn_clear = tk.Button(root, text="Clear", padx=150, pady=20, command=button_clear)
btn_clear.grid(row=6, column=0, columnspan=5, padx=10, pady=5)

# 进入主事件循环
root.mainloop()

格式转换

import time
import datetime

AnyDay=[2023,3,21]   #input a date such as 2023/3/21
AnyDBDay=19437      #input a data such as 19437
DBToday=round(time.time()/86400)
Day2DB=round(time.mktime(datetime.datetime(AnyDay[0],AnyDay[1],AnyDay[2],).timetuple())/86400)
DB2Day=time.ctime(AnyDBDay*86400)[4:].replace('08:00:00 ','').replace(' ','/')
print('The date of database today is '+str(DBToday))
print('The common date '+str(AnyDay).replace(', ','/').strip('[] ',)+' equals database date '+str(Day2DB))
print('The database date '+str(AnyDBDay)+' equals common date '+str(DB2Day))

标签:turtle,四舍五入,15,text,tk,pos2,pos1
From: https://blog.51cto.com/dcboy/7799088

相关文章

  • 四舍五入为什么"不科学"
    先来介绍一下常见的四舍五入,四舍五入其实是把[0,10)这个区间分成了[0,5)和[5,10)两个区间,这两个区间长度相同,所以如果随机取一个数,落在这两个区间上的概率是相等的,所以这其实是一种非常公平的舍入规则,并不存在不科学的情况,但在实际情况下,四舍五入其实是会把数值估计大的,而四舍六入......
  • js 四舍五入toFixe和Math.round(
    toFixed四舍五入偶尔不正确的问题原因:因为toFixed是一个四舍六入五成双的方法四舍六入好理解,那什么叫五成双呢"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)(0.5251).toFixed(2)=>0.53......
  • C#中Math.Round(指定四舍五入)、Math.Ceiling和Math.Floor的用法
    1.Math.Round:四舍六入五取偶Math.Round(17.475728155339805,2,MidpointRounding.AwayFromZero)=17.48Math.Round(0.0)//0Math.Round(0.1)//0Math.Round(0.2)//0Math.Round(0.3)//0Math.Round(0.4)//0Math.Round(0.5)//0Math.Round(0.6)//1Math.Round(0.7)//1Math.Roun......
  • MySQL对小数进行四舍五入等操作
    数学函数是MySQL中常用的一类函数。其主要用于处理数字,包括整型和浮点数等等。MySQL常用的四舍五入函数:函数说明FLOOR(X)返回不大于X的最大整数。CEIL(X)、CEILING(X) 返回不小于X的最小整数。ROUND(X) 返回离X最近的整数,截断时要进行四舍五入。ROUND(X,D) 保留X小数点后D位......
  • C#中四舍五入的正确写法是什么?
    概述:就在今天,测试提一个BUG,是什么呢?就是在计算商品采购价时,需要保留2位小数,当时是使用【Math.Round(采购价,2)】这种方法进行四舍五入的,但是这样写会有问题,至于什么问题呢,来看看这篇文章就对了!四舍五入是一种精确度的计数保留法。在取小数近似数的时候,如果尾数的最高位数字是4或者......
  • C#中四舍五入的正确写法是什么?
    概述:就在今天,测试提一个BUG,是什么呢?就是在计算商品采购价时,需要保留2位小数,当时是使用【Math.Round(采购价,2)】这种方法进行四舍五入的,但是这样写会有问题,至于什么问题呢,来看看这篇文章就对了!四舍五入是一种精确度的计数保留法。在取小数近似数的时候,如果尾数的最高位数字是4......
  • DecimalFormat 四舍五入问题
    DecimalFormat函数默认的四舍五入的方法是银行家算法(RoundingMode.HALF_EVEN),跟一般的四舍五入的方法不同可以用String.format("%.6f",d)来代替也可以指定 df.setRoundingMode(RoundingMode.HALF_UP)为正常四舍五入;ps银行家算法:四舍六入五考虑,五后非零就进一,五后为零看奇偶,......
  • 浮点型计算、四舍五入问题
    点击查看代码packagecom.bh.bugs;importjava.math.BigDecimal;importjava.math.RoundingMode;publicclassTest1{publicstaticvoidmain(String[]args){System.out.println("start==========");//java中,double在计算的时候,精度丢失问题......
  • 增加千分号,整数自动补零,小数保留两位且不四舍五入
    functionsemicolon_Add(num){num=num.replace(/,/g,"");if(num!=""){varre=/^\d+(\.\d+)?$/;if(re.test(num)){varparts=num.toString().split(".&......
  • mysql四舍五入函数取两位小数
    MySQL四舍五入函数ROUND(x)ROUND(x)函数返回最接近于参数x的整数,对x值进行四舍五入。实例:使用ROUND(x)函数对操作数进行四舍五入操作。SQL语句如下:mysql>SELECTROUND(-2.34),ROUND(-4.56),ROUND(2.34),ROUND(4.56);ROUND(x)函数的执行结果如下图所示:上图中代码执行的结果显示,进行......