首页
关于
友链
留言
Search
1
安装Docker Desktop报错WSL 2 installation is incomplete
76 阅读
2
震惊!杭州应届生工作免费领2w元
31 阅读
3
我的世界紫禁之巅纯净生存服务器
25 阅读
4
python3网络爬虫开发实战pdf
23 阅读
5
火车头采集问题:Void Proc(System.Net.HttpWebRequest)
20 阅读
技术分享
日常学习
我的世界
Search
标签搜索
python
博客
javascript
web
ce
织梦
html
按键精灵
php
游戏
css
typescript
jquery
日常
数据库
vue
ubuntu
Datehoer
累计撰写
180
篇文章
累计收到
10
条评论
首页
栏目
技术分享
日常学习
我的世界
页面
关于
友链
留言
搜索到
45
篇与
python
的结果
2020-11-12
python 外星人入侵 完整版
差不多用了三天的空闲时间,把这个案例看完了一遍,并且实际操作了一下,其实难度确实不高,很适合我们这样的新人去操作。不过其实遇到了许多的问题,但大多都是我的问题,做的我是心态崩了。今天最后做play按钮的时候,怎么也不出效果,把game_active 改为False就显示黑屏,而换成True显示内容但是没啥卵用,因为不是静态的。当时是真的不想做了,因为确实没有啥错误,出去吃了个饭,再仔细一看发现我是真的蠢! while True: # 监视鼠标和键盘事件 gf.check_events(ai_settings, screen, stats, board, play_button, ship, aliens, bullets) if stats.game_active: ship.update() bullets.update() gf.update_bullets(ai_settings, screen, stats, board, ship, aliens, bullets) gf.update_aliens(ai_settings, screen, stats, board, ship, aliens, bullets) gf.update_screen(ai_settings, screen, stats, board, ship, aliens, bullets, play_button) 这一段,最后的gf.update_screen,应该是再if外的,因为他是做出那个静态效果的,但是我当时把他放到了if里,所以改成false时,显示黑屏,我当时真的找了半天,因为他这个如果你没改false的话是没有任何问题出现的,最后随便一看,发现了这个错误,把我气的。还有一些非常蠢的错误,基本上全是自己的失误吧,哎,说多了都是泪。其实很重要的一个模块就是pygame.sprites毕竟你要修改游戏要进行交互等等吧,很重要。---->《python sprites介绍》不得不说,细节决定成败,这句话非常有道理!我就把外星人,计分板和按钮的py文件发一下源代码,其余的还是改成附件上传吧,毕竟有点小多。计分板的,scoreboard.py import pygame.font from pygame.sprite import Group from ship import Ship class Scoreboard(): """显示得分信息的类""" def __init__(self, ai_settings, screen, stats): self.screen =screen self.screen_rect = screen.get_rect() self.ai_settings = ai_settings self.stats = stats self.text_color = (50, 50, 50) self.font = pygame.font.SysFont(None, 48) # 初始化得分图像 self.prep_score() self.prep_high_score() self.prep_level() self.prep_ships() def prep_ships(self): self.ships = Group() for ship_number in range(self.stats.ships_left): ship = Ship(self.ai_settings, self.screen) ship.rect.x = 10 + ship_number * ship.rect.width ship.rect.y = 10 self.ships.add(ship) def prep_high_score(self): high_score = int(round(self.stats.high_score, -1)) high_score_str = "{:,}".format(high_score) self.high_score_image = self.font.render(high_score_str, True, self.text_color, self.ai_settings.bg_color) # 将最高得分放在屏幕顶部中央 self.high_score_rect = self.high_score_image.get_rect() self.high_score_rect.centerx = self.screen_rect.centerx self.high_score_rect.top = self.score_rect.top def prep_level(self): self.level_image = self.font.render(str(self.stats.level), True, self.text_color, self.ai_settings.bg_color) self.level_rect = self.level_image.get_rect() self.level_rect.right = self.score_rect.right self.level_rect.top = self.score_rect.bottom + 10 def prep_score(self): """将得分转化为图像""" rounded_score = int(round(self.stats.score, -1)) score_str = "{:,}".format(rounded_score) self.score_image = self.font.render(score_str, True, self.text_color, self.ai_settings.bg_color) # 将得分放到右上角 self.score_rect = self.score_image.get_rect() self.score_rect.right =self.screen_rect.right -20 self.score_rect.top = 20 def show_score(self): """在屏幕上显示得分""" self.screen.blit(self.score_image, self.score_rect) self.screen.blit(self.high_score_image, self.high_score_rect) self.screen.blit(self.level_image, self.level_rect) # 绘制飞船 self.ships.draw(self.screen) 外星人的,alien.py import pygame from pygame.sprite import Sprite class Alien(Sprite): def __init__(self, ai_settings, screen): """初始化外星人起始位置""" super(Alien, self).__init__() self.ai_settings = ai_settings self.screen = screen # 加载外星人图像,并设置其rect属性 self.image = pygame.image.load("images/alien.bmp") self.rect = self.image.get_rect() # self.screen_rect = screen.get_rect() # 每个外星人都要在屏幕的上面出现 self.rect.x = self.rect.width self.rect.y = self.rect.height # 储存每个外星人的位置 self.x = float(self.rect.x) def blitme(self): self.screen.blit(self.image, self.rect) def check_edges(self): """如果外星人位于屏幕边缘,就返回true""" screen_rect = self.screen.get_rect() if self.rect.right >= screen_rect.right: return True elif self.rect.left <= 0: return True def update(self): """向右移动外星人""" self.x += self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction self.rect.x = self.x 按钮,button.py import pygame.font class Button(): def __init__(self, ai_settings, screen, msg): self.screen = screen self.screen_rect = screen.get_rect() self.width, self.height = 200, 50 self.button_color = (0, 255, 0) self.text_color = (255, 255, 255) self.font = pygame.font.SysFont(None, 48) self.rect = pygame.Rect(0, 0, self.width, self.height) self.rect.center = self.screen_rect.center self.prep_msg(msg) def prep_msg(self, msg): self.msg_image = self.font.render(msg, True, self.text_color, self.button_color) self.msg_image_rect = self.msg_image.get_rect() self.msg_image_rect.center = self.rect.center def draw_button(self): self.screen.fill(self.button_color, self.rect) self.screen.blit(self.msg_image, self.msg_image_rect) 其余的下载链接--》 天翼云有什么问题可以在下面的评论区发送,我看到后会在第一时间解答!
2020年11月12日
3 阅读
0 评论
0 点赞
2020-11-11
python sprites介绍
虽然在《python从入门到实践》项目实战中,运用到了pygame.sprites但是并没有介绍这个是什么东西,只是简单的引用外加调用。相信有许多人像我一样,并不知道这个到底是啥意思,有啥作用。下面让我来介绍一下这个在pygame中挺重要的角色。 “sprite”,中文翻译“精灵”,一般是指游戏动画中独立移动的一个画面元素,在pygame中可以是一个带有图像(Surface)和大小位置(Rect)的对象。精灵特别适合在Python语言中使用。1、角色可直接拖动(compound造型不支持)。2、提供像Scratch中的三种旋转模式。精灵对象的_rotatemode属性值为0,代表可360度旋转,为1时代表可左右翻转,为2时角色不会旋转。3、rotatemode:返回或设置旋转模式。4、addx:x坐标增加。5、addy:y坐标增加。6、scale:缩放,只有一个参数。7、gotorandom:到随机位置。8、heading:重定义了这个方法,不带参数能获取当前朝向。带参数参让角色朝向某对象或坐标。9、show:显示对象,带参数时让角色显示一定的时间后又会隐藏,异步执行。10、hide:隐藏对象,带参数时让角色隐藏一定的时间后又显示,异步执行。11、mouse_pos:获取鼠标指针坐标。12、move:移动水平dx距离和垂直dy距离。13、collide:和另一个角色或图章的碰撞方法,采用的是矩形碰撞,可以有scale参数,表示缩放绑定盒子,如scale=0.5时,绑定盒宽高各缩一半。14、collidemouse:碰到鼠标指针。15、collide_edge:碰到边缘检测。16、bounce_on_edge:碰到边缘就反弹,适合于用fd命令让角色前进后再使用。17、bbox:获取角色绑定盒,也可获取图章的绑定盒。18、randomcolor:随机颜色,较鲜艳。19、randomheading:随机方向。20、remove:移除方法,把自己从屏幕的_turtles列表中删除,并根据item号删除自己在画布上的形状,清除说话泡泡对象。21、stamp:重定义了Turtle类的图章方法,新增的参数可以让图章在一定时间后自动被清除,异步执行。22、stampmove:根据图章编号水平和垂直移动图章。23、stampgoto:移动图章编号到指定坐标,暂不支持复合图形的图章,它们的图章编号是一个元组。24、play:播放方法,目前只支持播放无损压缩的wav音频文件,支持显示歌词。25、setalpha:设置透明度方法。参数为从0到255的数值。0代表完全透明,255代表不透明,128代表半透明。对于polygon和compound造型来说,0代表透明,非0代表不透明。对于image来说,设置角色的透明度从0到255的值就会产生从透明到不透明的渐变效果。26、getalpha:得到透明度,从0到255的整数。27、set_tag:设置角色的标签。它是一个字符串,用于分组。28、get_tag:获取角色的标签。29、say:说话方法,会显示气泡。默认时间为2秒,默认阻塞进程。30、saycolor:返回或设置说话的字的颜色。31、saybordercolor:返回或设置说话泡泡的边框颜色。32、write:重定义写方法,增加angle参数,可以写斜字,默认为黑体,12号。33、reborn:“重生”方法,让角色隐藏后在另一坐标重新显示。复用角色之用,可加delay参数,意为在一定的时间后才显示,异步执行。34、nextcostume:下一个造型,别名是nextshape。35、previouscostume:上一个造型,别名是previousshape。36、costumeindex:指定造型编号,别名是shapeindex。37、update:重绘角色。具体的功能就是上面这37个列出的功能了。 具体使用的话,看看下面的这个例子:def check_fleet_edges(ai_settings, aliens): """有外星人到达边缘时采取相应的措施""" for alien in aliens.sprites(): if alien.check_edges(): change_fleet_direction(ai_settings, aliens) break def change_fleet_direction(ai_settings, aliens): """将整群外星人下移,并改变它们的方向""" for alien in aliens.sprites(): alien.rect.y += ai_settings.fleet_drop_speed ai_settings.fleet_direction *= -1 def update_aliens(ai_settings, aliens): """检查是否有外星人位于屏幕边缘,并更新整群外星人的位置""" check_fleet_edges(ai_settings, aliens) aliens.update()这个例子呢,就是外星人大战飞船的进阶版,生成外星人,然后根据外星人的移动来进行改变他们的方向。在check_fleet_edges()中,我们遍历外星人群,并对其中的每个外星人调用check_edges()。如果check_edges()返回True,我们就知道相应的外星人位于屏幕边缘,需要改变外星人群的方向,因此我们调用change_fleet_direction()并退出循环。在change_fleet_direction()中,我们遍历所有外星人,将每个外星人下移fleet_drop_speed设置的值;然后,将fleet_direction的值修改为其当前值与-1的乘积。其实sprite相当于一个便捷的类让我们的图像来与其他的进行交互,不过其实具体的使用方法还是要看官方文档的,官方文档入口。具体有什么问题可以发送到评论区,有什么难题我们可以一起讨论。
2020年11月11日
5 阅读
0 评论
0 点赞
2020-11-08
python 外星人入侵小游戏之飞船
本来其实这篇文章我已经有思路了,并且其实已经写了一些了,但是因为有一些事情要去做,然后忘记这边还写得文章了,没保存直接关闭了。所以现在是我重新写的了!最近我是在看《python从入门到实践》,看的比较快,已经到项目部分了,开始做飞船大战外星人这个基本上入门必学的案例了,但是还是遇到了许多的问题,不过幸好基本上全部解决了了。其实对编程最大的挑战,就是仔细。这个东西确实,有的时候感觉就是控制不住自己,不是多敲了就是少敲了,下面先分析一下会出现什么样的问题。首先呢其实就是英文大小写问题,还有加不加s,有的时候你前面定义的是有s的,但是后来下面调用的时候忘记了,或者前面没有s,后面加了。再有就是符号问题,我发现我写python很爱写;搞得我很难受,用pycharm一直有波浪线出现。然后再就是其实真的,一些简单的小程序写上一个文档就好了,文档太多调用很麻烦的!不过说实在的,分的多了,找起来修改很容易,并且其实未来进行编程的时候,大多都不是小程序,还是需要重构一下代码的。不过其实,可以先把想要重构的先写出来,然后再找到合适的地方把它放进去,不是创建一个.py就是创建一个def,反正就是要把它放起来,让主文件空空荡荡最好!我一般就是错名字,错参数!很难受的,有的找起来非常费劲! super(Bullet,self).__init__() 比如说这一段,给继承的参数,容易出错。再比如说一些位置,不要理所应当,我今天把左右移动调成上下移动,一开始是我确实以为是up和down,没想到实际上却是top和bottom,虽然有的时候pycharm没有提示,但是大多数没提示都是错误的。下面上一下代码,把所有文件放在同一目录下即可,当然图片记得放好或者修改一下。主文件:import pygame from setting import Settings from ship import Ship import game_functions as gf from pygame.sprite import Group def run_game(): #初始化游戏并且创建一个屏幕对象 pygame.init() #初始化背景属性 ai_settings = Settings() #使类s etting里的内容直接被调用 screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("aa") #窗口名字 #创建飞船 ship = Ship(ai_settings, screen) #创建储存子弹的编组 bullets = Group() #开始游戏的主循环 while True: #监视鼠标和键盘事件 gf.check_events(ai_settings, screen, ship, bullets) ship.update() bullets.update() gf.update_bullets(bullets) gf.update_screen(ai_settings, screen, ship, bullets) run_game()game_functions.pyimport sys import pygame from bullet import Bullet def check_keydown_events(event, ai_settings, screen, ship, bullets): """相应按下""" if event.key == pygame.K_RIGHT: ship.moving_right = True elif event.key == pygame.K_LEFT: ship.moving_left = True elif event.key == pygame.K_SPACE: fire_bullet(ai_settings, screen, ship, bullets) def fire_bullet(ai_settings, screen, ship, bullets): # 创建一个子弹并将它加入编组bullets if len(bullets) < ai_settings.bullet_allowed: # 判断现存子弹数量是否小于设定值 new_bullet = Bullet(ai_settings, screen, ship) bullets.add(new_bullet) def check_keyup_events(event, ship): """相应松开""" if event.key == pygame.K_RIGHT: ship.moving_right = False elif event.key == pygame.K_LEFT: ship.moving_left = False def check_events(ai_settings, screen, ship, bullets): """响应按键和鼠标事件""" for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: check_keydown_events(event, ai_settings, screen, ship, bullets) #先定义再调用 elif event.type == pygame.KEYUP: check_keyup_events(event, ship) def update_screen(ai_settings, screen, ship, bullets): """更新数据""" screen.fill(ai_settings.bg_color) #绘制所有子弹 for bullets in bullets.sprites(): bullets.draw_bullet() ship.blitme() # 让最近绘制的屏幕可见 pygame.display.flip() def update_bullets(bullets): """更新子弹位置,删除消失的子弹""" #更新子弹位置 bullets.update() #删除消失的子弹 for bullet in bullets.copy(): if bullet.rect.bottom <0: bullets.remove(bullet) # print(len(bullets)) #检测子弹是否消失ship.pyimport pygame class Ship(): def __init__(self, ai_settings, screen): """初始化飞船位置""" self.screen = screen self.ai_settings = ai_settings #加载飞船图像并获取其外接矩形 self.image =pygame.image.load("images/ship.bmp") self.rect = self.image.get_rect() self.screen_rect = screen.get_rect() #将每艘新飞船放在屏幕底部中央 self.rect.centerx = self.screen_rect.centerx self.rect.bottom = self.screen_rect.bottom #在飞船的属性center中储存小数值 self.center = float(self.rect.centerx) #移动标志 self.moving_right = False self.moving_left = False def update(self): """根据移动标志调整位置""" # 更新飞船的center值,而不是rect if self.moving_right and self.rect.right < self.screen_rect.right: self.center += self.ai_settings.ship_speed_factor if self.moving_left and self.rect.left > 0: self.center -= self.ai_settings.ship_speed_factor # 根据self.center更新rect对象 self.rect.centerx = self.center def blitme(self): """在指定位置绘制飞船""" self.screen.blit(self.image, self.rect)bullet.pyimport pygame from pygame.sprite import Sprite class Bullet(Sprite): """一个对飞船发射的子弹进行管理的类""" def __init__(self, ai_settings, screen, ship): """在飞船所处位置创建一个子弹""" super(Bullet,self).__init__() # super().__init__() 3 self.screen = screen # 在(0,0)处创建一个表示子弹的矩形,再将位置进行转移(设置成改在的位置) self.rect = pygame.Rect(0, 0, ai_settings.bullet_width, ai_settings.bullet_height) self.rect.centerx = ship.rect.centerx self.rect.top = ship.rect.top # 储存用小数表示的子弹位置 self.y = float(self.rect.y) self.color = ai_settings.bullet_color self.speed_factor = ai_settings.bullet_speed_factor def update(self): """向上移动子弹""" #更新子弹位置的小数值 self.y -= self.speed_factor #更新子弹的位置 self.rect.y = self.y def draw_bullet(self): """在屏幕上绘制子弹""" pygame.draw.rect(self.screen, self.color, self.rect)setting.pyclass Settings(): """储存外星人大战的所有设置""" def __init__(self): """初始化游戏的设置""" # 屏幕设置 self.screen_width = 1200 self.screen_height = 800 self.bg_color = (230, 230, 230) #飞船的设置 self.ship_speed_factor = 1.5 # 子弹设置 self.bullet_speed_factor = 1 self.bullet_width = 3 self.bullet_height = 15 self.bullet_color = 60, 60, 60 self.bullet_allowed = 3效果图我就不放了,反正还可以吧,就这样!
2020年11月08日
2 阅读
0 评论
0 点赞
2020-11-07
python 外星人大战,飞船不移动怎么办
今天遇到的小问题!便对着书边敲代码,发现出现错误。python 外星人大战,飞船不移动。这个问题我首先是发去了吾爱,不过后期我自己解决了。如题,边看书边敲的代码,发现飞船不移动。求大佬帮忙看一下!主文件import pygame from setting import Settings from ship import Ship import game_functions as gf def run_game(): #初始化游戏并且创建一个屏幕对象 pygame.init() #初始化背景属性 ai_settings = Settings() #使类setting里的内容直接被调用 screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") #窗口名字 #创建飞船 ship = Ship(screen) #开始游戏的主循环 while True: #监视鼠标和键盘事件 gf.check_events(ship) gf.update_screen(ai_settings, screen, ship) run_game()game_functions.pyimport sys import pygame def check_events(ship): """响应按键和鼠标事件""" for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: if event.type == pygame.K_RIGHT: #向右移动飞船 ship.rect.centerx += 1 elif event.type == pygame.K_LEFT: ship.rect.centerx -= 1 def update_screen(ai_settings, screen, ship): """更新数据""" screen.fill(ai_settings.bg_color) ship.blitme() # 让最近绘制的屏幕可见 pygame.display.flip()ship.pyimport pygame class Ship(): def __init__(self, screen): """初始化飞船位置""" self.screen = screen #加载飞船图像并获取其外接矩形 self.image =pygame.image.load("images/ship.bmp") self.rect = self.image.get_rect() self.screen_rect = screen.get_rect() #将每艘新飞船放在屏幕底部中央 self.rect.centerx = self.screen_rect.centerx self.rect.bottom = self.screen_rect.bottom def blitme(self): """在指定位置绘制飞船""" self.screen.blit(self.image, self.rect)setting.pyclass Settings(): """储存外星人大战的所有设置""" def __init__(self): """初始化游戏的设置""" # 屏幕设置 self.screen_width = 1200; self.screen_height = 800; self.bg_color = (230, 230, 230)本来发现问题的时候是很慌的,我一开始是以为可能跟书上的内容不太一样,但是后来下了源代码发现确实应该那样。最后还是把书上的内容都复制下来,然后挨个比对,发现错误是game_functions.py文件内第9行if event.type == pygame.K_RIGHT:应该把event.type改为event.key!!敲代码还是要看仔细,仔细很重要,细节决定成败!!
2020年11月07日
4 阅读
0 评论
0 点赞
2020-11-05
python argument 1 must be 2-item sequence, not int
在继续python学习的时候,发现报错了!出现错误argument 1 must be 2-item sequence, not int,明明我是照着书打的,为什么会出现错误呢。import pygameimport sys from setting import Settings def run_game(): #初始化游戏并且创建一个屏幕对象 pygame.init() #初始化背景属性 ai_settings = Settings() #使类setting里的内容直接被调用 # screen = pygame.display.set_mode((1200, 800)) #定义窗口大小 screen = pygame.display.set_mode(ai_settings.screen_width, ai_settings.screen_height) pygame.display.set_caption("Alien Invasion") #窗口名字 # 设置背景颜色 # bg_color = (230, 230, 230) #开始游戏的主循环 while True: #监视鼠标和键盘事件 for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() screen.fill(ai_settings.bg_color) #将颜色填充进去 #让最近绘制的屏幕可见 pygame.display.flip() run_game()查看代码,发现最上面的引用类出现红色波浪线,但是原因应该不是这个,因为他并没有报出错误。继续查看Traceback (most recent call last): File "D:/Python-work/pythonrumen/2020/11/newtravel.py", line 22, in <module> run_game() File "D:/Python-work/pythonrumen/2020/11/newtravel.py", line 9, in run_game screen = pygame.display.set_mode(ai_settings.screen_width, ai_settings.screen_height)问题出现在第9和22行,第22行是启动游戏,无所谓,那么问题就在第9行了,screen = pygame.display.set_mode(ai_settings.screen_width, ai_settings.screen_height)仔细对比发现,我的数据少了一个圆括号,通过百度查询,得知报错为参数为元组不是int类型,所以给参数添加一个圆括号即可。import pygame import sys from setting import Settings def run_game(): #初始化游戏并且创建一个屏幕对象 pygame.init() #初始化背景属性 ai_settings = Settings() #使类setting里的内容直接被调用 # screen = pygame.display.set_mode((1200, 800)) #定义窗口大小 screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") #窗口名字 # 设置背景颜色 # bg_color = (230, 230, 230) #开始游戏的主循环 while True: #监视鼠标和键盘事件 for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() screen.fill(ai_settings.bg_color) #将颜色填充进去 #让最近绘制的屏幕可见 pygame.display.flip() run_game()运行成功。通过以上问题得知,原来有许多的报错其实是因为自己的不仔细,不是漏符号了,就是中英文错误,需要养成一个良好的编写习惯!
2020年11月05日
8 阅读
0 评论
0 点赞
2020-11-02
python 列表循环后输出结果有个none
class Restaurant(): def __init__(self, restaurant_name, cuisine_type): self.restaurant_name = restaurant_name self.cuisine_type = cuisine_type def describe_restaurant(self): return self.restaurant_name+"is a good restaurant.Its cuisine is"+self.cuisine_type def open_restaurant(self): return self.restaurant_name+"now is work" class IceCreamStand(Restaurant): def __init__(self, restaurant_name, cuisine_type,*flavors): super().__init__(restaurant_name,cuisine_type) self.flavors = flavors def icelist(self): for sweet in self.flavors: print(self.restaurant_name+sweet) return '' ice = IceCreamStand("sweeet","冰淇凌",'aa','bb') print(ice.icelist()) 在做python练习题的时候,遍历列表后发现输出结果带个none,非常烦躁。查了许多方法,发现是因为有return返回值,如果不设置的话就会返回none,最直接的办法就是像上面一样,设置为空的字符串。但是感觉很难受,所以我把for循环去掉,然后把return修改了一下 return self.restaurant_name+str(self.flavors) 改成直接返回值了,而不是先遍历出数据再返回值,不过感觉还是非常不舒服,但是目前来说没有找到更好的方法了,等想到更好的方法回来修改一下!差不多10分钟,我就又回来了,首先呢,self.flavors是一个元组,我之前一直以为是列表的。说下方法,就是把元组给遍历出来,然后把他的值储存起来就可以了。b = "" for i in range(0,len(self.flavors)): c = self.flavors[i] b = b + c if i != len(self.flavors) -1: b = b+"," return b #修改return为self.restaurant_name+b即可元组的读取还是一样的都是xxx[?]进行读取,然后取一个变量等于这个值不断向上增加即可,后面的那个if是判断增加逗号的,显得更好看,为什么要加if是因为如果不加的话,那最后一个值也会加上,sweetaa,bb,输出这样的结果,非常难看,而如果加上判断sweetaa,bb输出这样的结果,还可以接受的,哈哈。有简单的方法可以在底下评论指出!
2020年11月02日
4 阅读
0 评论
0 点赞
2020-11-01
python 函数
在看完《我的python世界-玩我的世界学python》后,开始阅读《python从入门到实践》,为什么要看这本书呢,因为我当时通过百度进行查询:python书籍推荐的时候,许多的人都推荐了这本书,所以我就拿来看一下,目前看到了第八章-函数部分,感觉这本书讲的非常的细,并且绝大部分的章节都配上了例子,并且后面跟上“动手一试”感觉挺不错的,很适合初学者入门。然后切入正题,函数这个东西相信都不陌生,但是为什么要有函数这个东西呢?我认为有以下三点:快捷!易于操作!方便!其实我觉得函数就是为了给程序员提供方便的,假如说没有了函数,那么我们写一些本来只需要调用函数的代码时,还要把本来定义该函数的那些给抄过来然后再使用,而你有了函数,那么直接使用别人定义好的就行了。下面说个例子: 需要打印的设计存储在一个列表中,打印后移到另一个列表中。下面是在不使用函数的情况下模拟这个过程的代码:# 首先创建一个列表,其中包含一些要打印的设计unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron'] completed_models = [] # 模拟打印每个设计,直到没有未打印的设计为止 # 打印每个设计后,都将其移到列表completed_models中 while unprinted_designs: current_design = unprinted_designs.pop() #模拟根据设计制作3D打印模型的过程 print("Printing model: " + current_design) completed_models.append(current_design) # 显示打印好的所有模型 print(" The following models have been printed:") for completed_model in completed_models: print(completed_model)这个程序首先创建一个需要打印的设计列表,还创建一个名为completed_models的空列表,每个设计打印都将移到这个列表中。只要列表unprinted_designs中还有设计,while循环就模拟打印设计的过程:从该列表末尾删除一个设计,将其存储到变量current_design中,并显示一条消息,指出正在打印当前的设计,再将该设计加入到列表completed_models中。看起来非常麻烦,那么我们重新设计一下代码,给他改成函数看一下:def print_models(unprinted_designs, completed_models): """模拟打印每个设计,直到没有未打印的设计为止打印每个设计后,都将其移到列表completed_models中""" while unprinted_designs: current_design = unprinted_designs.pop() # 模拟根据设计制作3D打印模型的过程 print("Printing model: " + current_design) completed_models.append(current_design) def show_completed_models(completed_models): """显示打印好的所有模型""" print(" The following models have been printed:") for completed_model in completed_models: print(completed_model) unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron'] completed_models = [] print_models(unprinted_designs, completed_models) show_completed_models(completed_models)这个程序的输出与未使用函数的版本相同,但组织更为有序。完成大部分工作的代码都移到了两个函数中,让主程序更容易理解。只要看看主程序,你就知道这个程序的功能容易看清得多:unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron'] completed_models = [] print_models(unprinted_designs, completed_models) show_completed_models(completed_models)我们创建了一个未打印的设计列表,还创建了一个空列表,用于存储打印好的模型。接下来,由于我们已经定义了两个函数,因此只需调用它们并传入正确的实参即可。我们调用print_models()并向它传递两个列表;像预期的一样,print_models()模拟打印设计的过程。接下来,我们调用show_completed_models(),并将打印好的模型列表传递给它,让其能够指出打印了哪些模型。描述性的函数名让别人阅读这些代码时也能明白,虽然其中没有任何注释。相比于没有使用函数的版本,这个程序更容易扩展和维护。如果以后需要打印其他设计,只需再次调用print_models()即可。如果我们发现需要对打印代码进行修改,只需修改这些代码一次,就能影响所有调用该函数的地方;与必须分别修改程序的多个地方相比,这种修改的效率更高。这个程序还演示了这样一种理念,即每个函数都应只负责一项具体的工作。第一个函数打印每个设计,而第二个显示打印好的模型;这优于使用一个函数来完成两项工作。编写函数时,如果你发现它执行的任务太多,请尝试将这些代码划分到两个函数中。别忘了,总是可以在一个函数中调用另一个函数,这有助于将复杂的任务划分成一系列的步骤。是吧,虽然可能在定义的时候麻烦了一些,但是说你以后还需要进行此操作的时候,直接调用该函数就行了,而不是把之前的代码复制一遍,然后修改里面的内容。函数就是用来偷懒的!程序员的目标之一是,编写简单的代码来完成任务,而函数有助于你实现这样的目标。它们让你编写好代码块并确定其能够正确运行后,就可置之不理。确定函数能够正确地完成其工作后,你就可以接着投身于下一个编码任务。函数让你编写代码一次后,想重用它们多少次就重用多少次。需要运行函数中的代码时,只需编写一行函数调用代码,就可让函数完成其工作。需要修改函数的行为时,只需修改一个代码块,而所做的修改将影响调用这个函数的每个地方。使用函数让程序更容易阅读,而良好的函数名概述了程序各个部分的作用。相对于阅读一系列的代码块,阅读一系列函数调用让你能够更快地明白程序的作用。函数还让代码更容易测试和调试。如果程序使用一系列的函数来完成其任务,而其中的每个函数都完成一项具体的工作,测试和维护起来将容易得多:你可编写分别调用每个函数的程序,并测试每个函数是否在它可能遇到的各种情形下都能正确地运行。经过这样的测试后你就能信心满满,深信你每次调用这些函数时,它们都将正确地运行。
2020年11月01日
3 阅读
0 评论
0 点赞
2020-10-30
我的python世界-玩我的世界学python读后心得
python语言貌似从大数据就开始一路向前,从 2018 年开始,Python 的关注度就在快速攀升,而 Java 相对来说有些下滑,此消彼长,Python 在本月(2000/11)首次超越 Java。Python是一种解释型、面向对象、动态数据类型的gao级程序设计语言,它具有丰富和强大的库,能够把用其他语言(尤其是C/C++)制作的各种模块很轻松地联结在一起。这两年随着人们对人工智能的关注越来越多,大家学习Python的热情也越来越高涨。Python在IEEE发布的2017年编程语言排行榜中高居shou位。 本书介绍了Python编程的基础知识,并以游戏《Minecraft(我的世界)》为载体,通过Python编程来与游戏中的玩家或方块互动,先后实现了“剑球”游戏、五子棋游戏以及像素图像扫描仪这几个项目,很后还实现了通过游戏控制Arduino等外部设备的功能。希望大家能够在游戏的过程中轻松地进入Python的世界,很终跨越软硬件的鸿沟,初步尝试自动化控制。 本书提供边玩游戏边学编程的全新体验,适合对Python编程感兴趣的读者阅读。最近这几天抽空把以前很感兴趣的一本书《我的python世界--玩Minecraft我的世界 学python编程》看完了,略有所得吧,下面分享给大家。首先最大的感触其实就是这本书不是很厚,内容相对较少,可能是因为这些内容比较简单的原因,不过其实究其根本还是因为python入门确实非常容易,而本书根据python和我的世界进行结合,生动的演示了一些面对对象的编程例子,不过其实虽然看完了,但是收获不是很大。虽然略有所得,但是感觉抵不过花费的时间。原因如下: 例子重点需要和树莓派,我的世界有关,但是却并没有提供相应的教程来教读者如何安装这些东西。 网络上的相关内容较少,如果有不会的地方确实查不到。 其实我的世界完全可以通过java来实现 树莓派和我的世界相结合确实不是很容易,试了许多方法都没有办成 不过其实例子还是很不错的,但是因为并没有进行相对应的实践,所以收获不是很多,不过前面的基础知识还算可以,查漏补缺吧。并且其实如果安装上配套的树莓派我的世界,做出的效果还是非常不错的,不过有关我的世界的插件,还是推荐使用java来进行编程。比如说猜单词小游戏,还算可以,有一定的收获,不过相对简单了一点。相对来说,这本书还是很适合初学者来看的,不过假如有一定的基础的话,就没有看的必要了。下载地址 提取码:date好吧,其实看这些基础书还是很有用的,起码看别的书基本上前面基础部分随便看一下就好了,不过其实我还是一个小萌新,虽然我看了许多书的基础部分了,不过学无止尽!
2020年10月30日
3 阅读
0 评论
0 点赞
2020-10-29
python 猜单词小游戏
import random words = ['chicken', 'dog', 'cat', 'mouse', 'frog'] guessTimes = 14 guessedLetters = "" def pickWord(): return random.choice(words) def play(): word = pickWord() while True: guess = getGuess(word) if processGuess(guess, word): print('You Win') break if guessTimes == 0: print("You lose") break def getGuess(word): printWordWithBlanks(word) print('剩余' + str(guessTimes)) guess = input("请输入一个字母:") return guess def processGuess(guess,word): global guessTimes global guessedLetters guessTimes = guessTimes - 1 guessedLetters = guessedLetters + guess for letter in word: if guessedLetters.find(letter) == -1: return False return True def printWordWithBlanks(word): displayWord = '' for letter in word: if guessedLetters.find(letter) > -1: displayWord = displayWord + letter else: displayWord = displayWord + '-' print(displayWord) play()原理非常简单,一看就会,其实这串代码是我好早以前写的了,最近会运用了一些新的知识,下面讲解一下:具体就是读取文件,然后替换掉哪个words,这样的话只需要修改words.txt就行,而不是每次修改都要修改代码wenjian = open("words.txt", "r") words = wenjian.read().splitlines() wenjian.close()open是读取这个文件(记得把他放到同一级目录下),r是只读模式然后read是获取数据,splitlines是改为列表close是关闭文件,如果一个文件只打开不关闭的话可能会出现不必要的问题。try: wenjian = open("words.txt", "r") words = wenjian.read().splitlines() wenjian.close() except IOError: print("文件words.txt并没有找到") exit()进阶版:进行抓取错误,毕竟说不定哪天就会把words文件当作垃圾文件删除掉了,所以要抓取一下错误。
2020年10月29日
5 阅读
0 评论
0 点赞
1
...
3
4