我正在编写一个程序,该程序将为纽约摄影师提供摄影创意。现在它的工作方式非常简单,代码利用random.choice函数从列表中随机提取项目,然后代码以最终形成英语句子的方式打印出来。
我的问题是我需要为此添加一些逻辑,因为某些结果对于摄影师来说是没有意义的(至少在我看来)。在此示例中,我试图从technique_list中删除“ Bracketed(HDR)”,如果python选择主题项时随机选择了“ Portrait”,则为“ Portrait”。
我觉得我在条件if语句中误用了.remove函数。有一个更好的方法吗?我已附上代码的相关部分进行检查。
我尝试了technique_list.remove('Bracketed(HDR)')以及
del technique_list [0],都作为if语句的响应部分。
import random
print ("You should try taking a...")
#pool of items that the program will randomly choose..
theme_list = ['Cityscape','Peoplescape','Port-Scape', 'Portrait']
technique_list = ['Bracketed (HDR)','Wide Angle', 'Zoom','Long
Exposure','Fast Shutter','Daytime Long Expo','Timelapse']
#what we need here are conditional IF statements, that manipulate items
from various lists
#this bit of code determines the theme of a photo idea
theme_var = random.choice(theme_list)
for theme in theme_var:
if theme == 'Portrait':
technique_list.remove('Bracketed (HDR)')
print("",theme_var)
#this bit of code determines the technique of a photo idea
technique_var = random.choice(technique_list)
print("", technique_var)
print("picture, from")
#this line of code determines the location of a photo idea
location_var = random.choice(location_list)
print("", location_var)
这仍然是代码的可能结果之一:
You should try taking a...
Portrait
Bracketed (HDR)
picture, from
34th Street
during
Sunrise
and then give it a
Black & White
edit in Lightroom!
[Finished in 0.2
正如我之前说的,肖像和包围曝光(HDR)永远不应成为同一结果的一部分,对于这种情况没有意义。
答案 0 :(得分:1)
问题(我认为)是因为您要遍历随机选择的结果而不是列表本身,所以不需要for循环。
theme_var = random.choice(theme_list)
if theme_var == 'Portrait':
technique_list.remove('Bracketed (HDR)')
print("",theme_var)
#this bit of code determines the technique of a photo idea
technique_var = random.choice(technique_list)
print("", technique_var)
print("picture, from")
#rest of the code
应该这样做
答案 1 :(得分:0)
我会使用一本不适当的技术字典,一个列表理解方法,并以f字符串开头:
import random
#pool of items that the program will randomly choose..
theme_list = ['Cityscape','Peoplescape','Port-Scape', 'Portrait']
technique_list = ['Bracketed (HDR)','Wide Angle', 'Zoom','Long Exposure','Fast
Shutter','Daytime Long Expo','Timelapse']
location_list = ['34th Street']
# dictionary of inappropriate techniques for given theme
d_inappropes = {'Cityscape': [],
'Port-Scape': [],
'Portrait': ['Bracketed (HDR)'],
'Peoplescape': ['Long Exposure', 'Timelapse', 'Daytime Long Expo']}
#this bit of code determines the theme of a photo idea
theme_var = random.choice(theme_list)
#this bit of code determines the technique of a photo idea
# list comprehension generates a new list with the inappropriate techniques removed,
# without affecting the original list
technique_var = random.choice([ti for ti in technique_list if ti not in d_inappropes[theme_var]])
#this line of code determines the location of a photo idea
location_var = random.choice(location_list)
# use f-stirngs to put the whole output in a single line to keep it managable
print(f"You should try taking a \n {theme_var} {technique_var} picture, \n from
{location_var}.")
答案 2 :(得分:0)
如果我可以添加答案并给出更多解释
如果选择了potrait,则要删除“括号(HDR)”。不要使用.remove,因为它将永久删除“括号(HDR)”并阻止其他主题使用该技术。您可以使用Kingfischer建议的不适当技术词典
random.choice从列表中输出了一个值。您不应该使用for循环,因为for循环会在random.choice
如果我可以提供反馈,那么您的代码片段中的缩进非常混乱。有些行应该有缩进,没有缩进。我不知道..也许是意料之外的,并且问题出在我的浏览器上。如果是这样,对不起!