我对python真的很陌生。 我试着写一个if语句,但从我看到的方式来看,看起来我必须编写很多if语句。我怎样才能缩短它?
这就是我写的:
user = input("Enter a note: ")
user_scale = scales[user]
if user_scale == Cscale:
print (user_scale, '\n', "Relative scale: ", Amin_scale)
现在不是编写另一个if语句,而是希望C和Amin标度位于一个if语句中。因此,当用户输入" C"或" Amin"它显示在同一个if语句中。不确定我说的是否合理?
if user_scale == Amin_scale:
print (user_scale, '\n', "Relative scale: ", Cscale)
有没有办法以更短的方式写这个,以便我不会有很多if语句?
此外,我想将用户输入作为while循环,以便在我决定退出之前不断询问,但是当我将其设置为while循环时,它只执行user_scale。
这就是我的尝试:
var = 1
while var == 1:
user = input("what scale? ")
user_scale = scales[user]
print (user_scale)
更新: 我正在尝试编写一个显示用户输入比例和相对比例的程序。示例:如果用户键入" C"然后该程序将显示 ' C D E F G A B'和C的相对尺度,即Amin" A B C D E F G"。
答案 0 :(得分:4)
如果不完全了解您的申请,很难说。据我所知,你的尺度与它们的相对比例相匹配。然后你可以使用不同的词组:
user = input("Enter a note: ")
user_scale = scales[user]
relative_scale = relative_scales[user]
print (user_scale, '\n', "Relative scale: ", relative_scale)
relative_scales
将包含来自scales
的相同密钥,但具有相应的相对比例。
更新:您可以使用Willem Van Onsem建议使用元组并仅定义一个包含成对比例的dict
user_scale, relative_scale = scales[user] # (Cscale, Amin_scale)
答案 1 :(得分:1)
您可以构建一个元组列表(或者如果元素是 hashable 一个字典),它存储每个比例,它的相对比例。例如:
scales = [(Cscale, Amin_scale), (Amin_scale, Cscale)]
接下来我们可以迭代它并检查user_scale
是否是元组的左元素,在这种情况下,我们打印元组的右元素:
for left, right in scales:
if user_scale == left:
print (user_scale, '\n', "Relative scale: ", right)
如果元素是可清除的,我们可以构造一个字典并使用.get()
进行查询:
scales = {Cscale: Amin_scale, Amin_scale: Cscale}
right = scales.get(user_scale)
if right is not None:
print (user_scale, '\n', "Relative scale: ", right)