python - 出于某种原因,我的代码在读取文件时没有前进
问题描述
基本上我试图让程序读取文件并获取值来绘制一些简单的形状。代码没有推进,它将形状分配为第一行,不会做任何其他事情。
这是我要阅读的文件:
SQUARE
r
b
200#200
40
RECTANGLE
b
g
100#100
10
SQUARE
r
b
500#355
40
SQUARE
g
b
600#60
15
END
我试过在这个地方移动 readline() ,但它似乎并没有解决问题,就像在 whileloop 之前一样。
import pygame
pygame.init()
screen = pygame.display.set_mode((640,640))
R = (255,0,0)
B = (0,0,255)
G = (0,255,0)
shapefile = open("read_file.txt","r")
donereadingfile = True
line = shapefile.readline()
while donereadingfile:
if (line == "END\n") or (line == "END"):
donereadingfile = False
elif(line == "RECTANGLE\n"):
RECTANGLE = line
RECTANGLE = RECTANGLE.rstrip("\n")
line = shapefile.readline()
circle_colour = line
circle_colour = circle_colour.rstrip("\n")
if circle_colour == ("r"):
circle_colour = R
elif circle_colour == ("b"):
circle_colour = B
elif circle_colour == ("g"):
circle_colour = G
line = shapefile.readline()
border_colour = line
border_colour = border_colour.rstrip("\n")
if border_colour == ("r"):
border_colour = R
elif border_colour == ("b"):
border_colour = B
elif border_colour == ("g"):
border_colour = G
line = shapefile.readline()
coordinate = line
coordinate = coordinate.rstrip("\n")
coordinate = coordinate.split("#")
x = int(coordinate[0])
y= int(coordinate[1])
line = shapefile.readline()
diameter = line
diameter = diameter.rstrip("\n")
diameter = int(diameter)
pygame.draw.rect(screen,border_colour,(int(x),int(y),3*diameter,diameter),3)
pygame.draw.circle(screen,circle_colour,x,y,(diameter/2))
pygame.display.update()
elif (line == "SQUARE\n"):
SQUARE = line
SQUARE = SQUARE.rstrip("\n")
line = shapefile.readline()
circle_colour = line
circle_colour = circle_colour.rstrip("\n")
if circle_colour == ("r"):
circle_colour = R
elif circle_colour == ("b"):
circle_colour = B
elif circle_colour == ("g"):
circle_colour = G
line = shapefile.readline()
border_colour = line
border_colour = border_colour.rstrip("\n")
if border_colour == ("r"):
border_colour = R
elif border_colour == ("b"):
border_colour = B
elif border_colour == ("g"):
border_colour = G
line = shapefile.readline()
coordinate = line
coordinate = coordinate.rstrip("\n")
coordinate = coordinate.split("#")
x = int(coordinate[0])
y= int(coordinate[1])
line = shapefile.readline()
diameter = line
diameter = diameter.rstrip("\n")
diameter = int(diameter)
pygame.draw.rect(screen,border_colour,(x,y,diameter,diameter),3)
pygame.draw.circle(screen,(circle_colour,x,y,(diameter/2))
pygame.display.update()
shapefile.close()
它说“ x = int(coordinate[0]) ValueError: invalid literal for int() with base 10: 'SQUARE'
我不明白为什么,但它应该打印出假设的形状。
解决方案
您可以改用 for 循环:
with open( 'file', 'r') as f:
for line in f:
print(line)
这样您就不必使用停止条件,并且更容易调试。
推荐阅读
- python - 如何检查嵌套python字典中是否存在值
- angular - Angular 11 ng build 时,Lazy chunk 文件中只有 1 个库
- python - 在单词列表中查找单词索引
- c# - XML 中的 C# 元素未绑定到类
- python - 正则表达式从文本中提取一个或两个值
- android - Android MediaRouteButton 已禁用
- reporting-services - 如何在 Microsoft Report Builder 中计算每个日期
- java - Spring Boot 确保 TaskScheduler 的单例实例
- apache-flink - Flink表异常:窗口聚合只能定义在一个时间属性列上,但遇到TIMESTAMP(6)
- regex - terraform 列表中的正则表达式