如何解决当用户输入其他未提示的内容时,如何防止错误?
我正在制作一个过滤器/像素操作程序。基本上我已经完成了这一切,唯一的错误是当用户输入其他未提示的内容时,如“x”而不是“a”等。我尝试了“try:”和“except ValueError:”语句但我猜那是错的。 这是重要的代码代码:
# Variables for image selection *for assigning string color only*
print("What image would you like to utilize? City Image: 'A',Dog Image: 'B',or Statue of Liberty: 'C'")
# Image selection input
img_input = input('Choose Image: ').casefold()
# Assign image choice char
img_choices = ['a','b','c']
# If Statements for opening image of choice
if img_input == img_choices[0]:
img = Image.open('subjectIMG.jpg')
elif img_input == img_choices[1]:
img = Image.open('subjectIMG0.jpg')
elif img_input == img_choices[2]:
img = Image.open('subjectIMG2.jpg')
# For visuals only
time.sleep(0.8),print('\nChoosing your image....\n')
time.sleep(0.8),print('Image choosen!\n'),time.sleep(0.8)
# Rescales image to preferred size
width,height = img.width,img.height
xwidth,yheight = width // 1000,height // 1000
if xwidth > yheight:
scale = xwidth
else:
scale = yheight
if scale != 0:
img = img.resize( (width // scale,height // scale) )
# Filter One
def invert_distort(display_algorithm,image_filter_inverted):
# Get pixel data (every pixel) and make new list
pixels_get = img.getdata()
pixel_list = []
# Go through every pixel in image and append every pixel to list
for p in pixels_get:
pixel_list.append(p)
# Pixel location and row
pixel_location = 0
pixel_row = 0
# Begin while loop at index 0 in order to loop through every pixel
while pixel_location < len(pixel_list):
p = pixel_list[pixel_location]
# Prints current row and pixel color values
if display_algorithm == 'y':
print(f'Current row: {pixel_row}: {p}')
pixel_row += 1
if display_algorithm == 'n':
pass
# Pixel Manipulation
# If user enters accordingly,Colors Red,Green,Blue set into variables
xr,xg,xb = 0,0
if image_filter_inverted in image_filter_inverted_choices[0]:
xr,1,2
elif image_filter_inverted in image_filter_inverted_choices[1]:
xr,xb = 2,2,2
# Red,Blue sorted into pixel list
r,g,b = p[xr],p[xg],p[xb]
# RGB values assigned to r,b
absr,absg,absb = 255,255,255
# Absolute value of pixels from red,green blue taken.
# RBG values assigned,stored into variables below.
update_r,update_g,update_b = abs(r-absr),abs(g-absg),abs(b-absb)
# New values assigned at specific pixel location
pixel_list[pixel_location] = (update_r,update_b)
pixel_location = pixel_location + 1
# New image created using same size and RGB format
final_image = Image.new("RGB",img.size)
final_image.putdata(pixel_list)
# Filter from PIL applied to new image
filter_applied = final_image.filter(ImageFilter.SHARPEN)
return filter_applied
# Filter Two
def drawing_filter(display_algorithm,image_filter_drawing):
# Get pixel data (every pixel) and make new list
pixels_get = img.getdata()
pixel_list = []
# Go through every pixel in image and append every pixel to list
for p in pixels_get:
pixel_list.append(p)
# Pixel location and row
pixel_location = 0
pixel_row = 0
# Begin while loop at index 0 in order to loop through every pixel
while pixel_location < len(pixel_list):
p = pixel_list[pixel_location]
# Prints current row and pixel color values
if display_algorithm == 'y':
print(f'Current row: {pixel_row}: {p}')
pixel_row += 1
if display_algorithm == 'n':
pass
# Pixel Manipulation
# Colors Red,2
# Red,update_b)
pixel_location = pixel_location + 1
# New image created using same size and RGB format
final_image = Image.new("RGB",img.size)
final_image.putdata(pixel_list)
# If statement applies,filter added to new image
# Filter from PIL applied to new image
if image_filter_drawing in image_filter_drawing_choices[0]:
filter_applied = final_image.filter(ImageFilter.CONTOUR)
return filter_applied
elif image_filter_drawing in image_filter_drawing_choices[1]:
filter_applied = final_image.filter(ImageFilter.EMBOSS)
return filter_applied
# Filter Three
def constant_filter(display_algorithm):
# Get pixel data (every pixel) and make new list
pixels_get = img.getdata()
pixel_list = []
# Go through every pixel in image and append every pixel to list
for p in pixels_get:
pixel_list.append(p)
# Pixel location and row
pixel_location = 0
pixel_row = 0
# Begin while loop at index 0 in order to loop through every pixel
while pixel_location < len(pixel_list):
p = pixel_list[pixel_location]
# Prints current row and pixel color values
if display_algorithm == 'y':
print(f'Current row: {pixel_row}: {p}')
pixel_row += 1
if display_algorithm == 'n':
pass
# Pixel Manipulation
# Colors Red,p[xb]
# RBG values assigned,update_b = r,b
# New values assigned at specific pixel location
pixel_list[pixel_location] = (update_r,img.size)
final_image.putdata(pixel_list)
# First Enhance Applied
applyOne = ImageEnhance.Contrast(final_image)
# Second Enhance Applied
applyTwo = applyOne.enhance(0.5)
# Final form stored into new variable
filter_applied = applyTwo
return filter_applied
# Permit user to choose to see algorithm visuals
display_algorithm = input("Would you like to see the back-end (algorithm) process? Enter 'Y' or 'N': ").casefold()
# Takes user input on main filter decision
image_filter_main = input("\nChoose a filter: Inverted: 'A',Drawing: 'B',or Contrast: 'C': ").casefold()
# Main Filter choices
image_filter_main_choices = ['a','c']
# If statments based off user input
# Functions called: invert_distort(),drawing_filter(),constant_filter()
# Function invert_distort() if statment
if image_filter_main in image_filter_main_choices[0]:
# Choose type of filter based off invert filter
image_filter_inverted = input("\nChoose: Negative: 'A' or Monochrome: 'B': ").casefold()
image_filter_inverted_choices = ['a','b']
# Begin code duration time
initiate = datetime.now()
# Call function
invert_distort(display_algorithm,image_filter_inverted)
# Store function in a new variable
imageInvert = invert_distort(display_algorithm,image_filter_inverted)
print("\nFinishing your image...")
# Save Image (create new image)
imageInvert.save("InvertIMG.jpg")
# Function drawing_filter() if statement
if image_filter_main in image_filter_main_choices[1]:
# Choose type of filter based off drawing filter
image_filter_drawing = input("\nChoose: Sketch: 'A' or Engraving: 'B': ").casefold()
image_filter_drawing_choices = ['a','b']
# Begin code duration time
initiate = datetime.now()
# Call function
drawing_filter(display_algorithm,image_filter_drawing)
# Store function in a new variable
imageDrawing = drawing_filter(display_algorithm,image_filter_drawing)
print("\nFinishing your image...")
# Save Image (create new image)
imageDrawing.save("DrawingIMG.jpg")
# Function constant_filter() if statement
if image_filter_main in image_filter_main_choices[2]:
# Begin code duration time
initiate = datetime.now()
# Call function
constant_filter(display_algorithm)
# Store function in a new variable
imageFirm = constant_filter(display_algorithm)
print("\nFinishing your image...")
# Save Image (create new image)
imageFirm.save("ConstantIMG.jpg")
# End code duration time
# Print total duration of code
terminate = datetime.now()
print('\nDuration to execute code: {}'.format(colored((terminate - initiate),'blue')))
对不起,这个片段太大了,它只是从顶部链接到底部代码的一个输入。如果有人可以帮助我,我将不胜感激。不知道要包含哪些具体部分,所以我包含了最重要的部分。
解决方法
您可以使用退出选项使其成为无限 while 循环。您可以采用多种方法。但这对您的代码改动最少。
EXIT_TOKEN = "Q"
img_choices = ['a','b','c']
# If Statements for opening image of choice
while (img_input:= input('Choose Image: ').casefold()):
if img_input == img_choices[0]:
img = Image.open('subjectIMG.jpg')
elif img_input == img_choices[1]:
img = Image.open('subjectIMG0.jpg')
elif img_input == img_choices[2]:
img = Image.open('subjectIMG2.jpg')
elif img_input == EXIT_TOKEN:
sys.exit()
else:
print(f"Unexpected input: {img_input}")
continue
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。