跳转到内容

亚当·库里洛的 Python

来自维基教科书,开放世界中的开放书籍

Python

Python 是一种编程语言,可能是最容易学习的一种。

有用网站

Python

Python 编程/获取 Python

[1]

制作独特的数字列表

import random

random_numbers = [random.randint(0,9),random.randint(0,9),random.randint(0,9),random.randint(0,9)]

random_numbers = list(set(random_numbers))

while len(random_numbers) < 4:
    random_numbers = [random.randint(0,9),random.randint(0,9),random.randint(0,9),random.randint(0,9)]
    random_numbers = list(set(random_numbers))

print(random_numbers)



Tkinter

我认为 tkinter 是一个很棒的 Python 功能,它允许您创建很棒的用户界面,并以示例中所示的绝妙方式显示信息。

使用 Tkinter 为测验创建用户界面

from tkinter import *
import tkinter as tk

def tkinter_quiz():

 q = 0
 s = -1
 count = 0
 correct = 0
 incorrect = 0

 question = ["Give 1 Value A Boolean Can Be","Write the first integer","What is 5 in binary","What is 101 in normal numbers"]

 answer = ["true","1","101","5"]
 answer2 = ["false","0","101","5"]

 root = Tk()

 name = tk.Label(root,text = "Programming Quiz")
 name.pack()

 label = tk.Label(root,text = question[0])
 label.pack()

 entry = tk.Entry(root)
 entry.pack()



 def out():
    global q,correct,incorrect,s,count
    count = count + 1
    ans = entry.get()
    if count < 4:
          if answer[q] == ans or answer2[q] == ans :
              q = q + 1
              entry.delete(0, END)
              correct = correct + 1
              label.config(text = question[q])
          else:
              q = q + 1
              entry.delete(0, END)
              incorrect = incorrect + 1
              label.config(text = question[q])
    else:
        entry.delete(0, END)
        label.config(text = "Correct: "+str(correct) + " Incorrect:   "+str(incorrect))


 def stop():
    global q,correct,incorrect
    q = 0
    correct = 0
    incorrect = 0
    entry.delete(0, END)
    label.config(text = question[0])

 button = tk.Button(root,text = "Submit",command = out)
 button.pack()

 button_two = tk.Button(root,text = "Restart",command = stop)
 button_two.pack()


 
 root.mainloop()

在 Tkinter 中,您可以使用鼠标的不同部分来调用不同的函数,但您可能很难通过函数添加参数。以下是如何做到这一点

b1.bind("<Button-1>",lambda event: b1p1(event,other_parameter))
b1.bind("<Button-3>",lambda event: b1p2(event,another_parameter))

'<Button-1>' 和 '<Button-3>' 代表左键单击和右键单击,'<Button-2>' 代表滚动滚轮的按下操作。这意味着如果他们在悬停在按钮上时执行该操作,它将执行您告诉它执行的函数。您调用的函数必须有一个名为 event 的参数,然后是您尝试添加的其他参数。

Pygame

Python 的另一个很棒的部分是 pygame。Pygame 允许您执行从游戏到图形甚至声音的几乎所有操作。您需要从 www.pygame.org 下载 Pygame。以下是一个使用 pygame 创建柱状图的示例。

import pygame
import time
import random


pygame.init()

display_width = 800
display_height = 600

gameDisplay = pygame.display.set_mode((display_width,display_height))

pygame.display.set_caption('Bar Charts')

##icon = pygame.image.load("chart.png")       
##pygame.display.set_icon(icon)

white = (255,255,255)
black = (0,0,0)

red = (150,0,0)
light_red = (255,0,0)

yellow = (150,150,0)
light_yellow =(255,255,0)

green = (34,177,76)
light_green = (0,255,0)

clock = pygame.time.Clock()

bars = 1

Y_Units = 1

Unit_Size = 0

Bar_Size = Unit_Size


smallfont = pygame.font.SysFont("comicsansms", 25)
medfont = pygame.font.SysFont("comicsansms", 50)
largefont = pygame.font.SysFont("comicsansms", 85)

BarList = []

def text_objects(text, color,size = "small"):

    if size == "small":
        textSurface = smallfont.render(text, True, color)
    if size == "medium":
        textSurface = medfont.render(text, True, color)
    if size == "large":
        textSurface = largefont.render(text, True, color)

    return textSurface, textSurface.get_rect()

def text_to_button(msg, color, buttonx, buttony, buttonwidth, buttonheight, size = "small"):
    textSurf, textRect = text_objects(msg,color,size)
    textRect.center = ((buttonx+(buttonwidth/2)), buttony+(buttonheight/2))
    gameDisplay.blit(textSurf, textRect)
   
def message_to_screen(msg,color, y_displace = 0, size = "small"):
    textSurf, textRect = text_objects(msg,color,size)
    textRect.center = (int(display_width / 2), int(display_height / 2)+y_displace)
    gameDisplay.blit(textSurf, textRect)

def button(text, x, y, width, height, inactive_color, active_color, action = None):
    global bars
    global Y_Units
    global Unit_Size
    global Bar_Size
    global BarList
    cur = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()
    

    if x + width > cur[0] > x and y + height > cur[1] > y:
        pygame.draw.rect(gameDisplay, active_color, (x,y,width,height))
        if click[0] == 1 and action != None:
            if action == "quit":
                pygame.quit()
                quit()

            if action == "start":
                draw_grid()
                

            if action == "controls":
                information()

            if action == "play":
                start_app()

            if action == "bars+":
                if bars != 10:
                    bars += 1
                    print (bars)

            if action == "bars-":
                if bars != 1:
                    bars -= 1
                    print (bars)

            if action == "Y Units+":
                if Y_Units != 10:
                    Y_Units += 1
                    print (Y_Units)

            if action == "Y Units-":
                if Y_Units != 1:
                    Y_Units -= 1
                    print (Y_Units)

            if action == "Unit_Size+":
                    Bar_Size= 0
                    Unit_Size += 1
                    print (Unit_Size)

            if action == "Unit_Size-":
                    Unit_Size -= 1
                    print (Unit_Size)

            if action == "Bar_Size+":
                if Bar_Size <= ((Y_Units * Unit_Size)-1):
                    Bar_Size += Unit_Size
                    print (Bar_Size)

            if action == "Bar_Size-":
                if Bar_Size > 1:
                    Bar_Size -= Unit_Size
                    print (Bar_Size)

            if action == "enter":
                if len(BarList)!= bars:
                    BarList.append(Bar_Size)
                    print(BarList)
                

            
            
    else:
        pygame.draw.rect(gameDisplay, inactive_color, (x,y,width,height))

    text_to_button(text,black,x,y,width,height)


def information():
    global bars
    global BarList
    info = True
    while info:
        for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()

        
        
        gameDisplay.fill(white)
        text = smallfont.render("Number of Bars Assigned: "+str(len(BarList)), True, red)
        gameDisplay.blit(text, [50,500])
        pygame.draw.rect(gameDisplay,black,(55,105,130,50))
        button("Plus Bar", 50,100,130,50, green, light_green, action = "bars+")
        pygame.draw.rect(gameDisplay,black,(205,105,130,50))
        button("Minus Bar", 200,100,130,50, red, light_red, action = "bars-")
        text = smallfont.render("Bars: "+str(bars), True, black)
        gameDisplay.blit(text, [350,100])
        
        pygame.draw.rect(gameDisplay,black,(55,205,130,50))
        button("+ Y Units", 50,200,130,50, green, light_green, action = "Y Units+")
        pygame.draw.rect(gameDisplay,black,(205,205,130,50))
        button("- Y Units", 200,200,130,50, red, light_red, action = "Y Units-")
        text = smallfont.render("Y Units: "+str(Y_Units), True, black)
        gameDisplay.blit(text, [350,200])

        pygame.draw.rect(gameDisplay,black,(55,305,130,50))
        button("+ Unit Size", 50,300,130,50, green, light_green, action = "Unit_Size+")
        pygame.draw.rect(gameDisplay,black,(205,305,130,50))
        button("- Unit Size", 200,300,130,50, red, light_red, action = "Unit_Size-")
        text = smallfont.render("Unit Size: "+str(Unit_Size), True, black)
        gameDisplay.blit(text, [350,300])

        pygame.draw.rect(gameDisplay,black,(55,405,130,50))
        button("+ Bar Size", 50,400,130,50, green, light_green, action = "Bar_Size+")
        pygame.draw.rect(gameDisplay,black,(205,405,130,50))
        button("- Bar Size", 200,400,130,50, red, light_red, action = "Bar_Size-")
        text = smallfont.render("Bar Size: "+str(Bar_Size), True, black)
        gameDisplay.blit(text, [500,400])

        pygame.draw.rect(gameDisplay,black,(355,405,130,50))
        button("Enter", 350,400,130,50, green, light_green, action = "enter")

        pygame.draw.rect(gameDisplay,black,(455,55,130,50))
        button("Back", 450,50,130,50, green, light_green, action = "play")
        


##        number_of_bars = Entry(root)
##        number_of_y_units = Entry(root)
##        bar_size = Entry(root)


        pygame.display.update()

        clock.tick(15)


def draw_grid():
    global bars
    global Y_Units
    global Unit_Size
    global Bar_Size
    global BarList
    gameDisplay.fill(white)
    grid = True

    while grid:
        for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()
    
#things(thingx, thingy, thingw, thingh)
        
            
        pygame.draw.line(gameDisplay,black,(50,98), (50, 500))
        pygame.draw.line(gameDisplay,black,(50, 500), (750, 500))

        for b in range(0,bars):
            pygame.draw.line(gameDisplay,black,(50,478 - ((40 * (BarList[b]/Unit_Size)))+20),(750,(478 - ((40 * (BarList[b]/Unit_Size)))+20)))
            text = smallfont.render("0-", True, black)
            gameDisplay.blit(text, [0,478])

        for x in range(0,Y_Units + 1):

            text = smallfont.render(str(Unit_Size * x)+'-', True, black)
            gameDisplay.blit(text, [0,(478 - (40 * x))])

        for a in range(0,bars):

            pygame.draw.rect(gameDisplay,red,((a + 1)*60,(478 - ((40 * (BarList[a]/Unit_Size)))+20),50,(40*(BarList[a]/Unit_Size))))

        for c in range(0,bars):

            text = smallfont.render('Bar'+str(c+1), True, black)
            gameDisplay.blit(text, [(c + 1)*60,500])

        pygame.display.update()



    

    
    

def start_app():
    global start

    start = True

    while start:
        for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    quit()

                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_c:
                        start = False
                    elif event.key == pygame.K_q:
                        
                        pygame.quit()
                        quit()

        gameDisplay.fill(white)
        message_to_screen("Bar Chart Creation",green,-100,size="large")
        message_to_screen("This application makes bar charts for you",black,-30)
        message_to_screen("Firstly go to 'Enter Info' and enter your info",black,10)
        message_to_screen("Then press 'Back' and then press'Start'",black,50)
        #message_to_screen("Press C to play, P to pause or Q to quit",black,180)

        pygame.draw.rect(gameDisplay,black,(155,505,100,50))
        pygame.draw.rect(gameDisplay,black,(355,505,130,50))
        pygame.draw.rect(gameDisplay,black,(555,505,100,50))



        button("Start", 150,500,100,50, green, light_green, action = "start")
        button("Enter Info", 350,500,130,50, yellow, light_yellow, action = "controls")
        button("Quit", 550,500,100,50, red, light_red, action = "quit")


        
        pygame.display.update()

        clock.tick(15)

start_app()
华夏公益教科书