2017-09-01 88 views
0

我真的很新来python。 我想写一个if语句,但从我的看法来看,它看起来像我必须写很多if语句。我怎样才能缩短这个时间?如何使我的if语句在Python中更短?

这是我写:

user = input("Enter a note: ") 
user_scale = scales[user] 

if user_scale == Cscale: 
    print (user_scale, '\n', "Relative scale: ", Amin_scale) 

现在不是写另一if语句,我想if语句C和阿明的规模是在一个。因此,当用户输入“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”。

+1

如果用户比例是“Cscale”,为什么要打印'Admin_scale'?反之亦然? –

+0

你是要求一个'switch'语句吗? – gionni

+1

非常*英语*'或'怎么样? –

回答

1

元素的字典没有哈希的

你可以构造一个元组列表(或者,如果元素是可水洗的一本字典),它存储每个尺度的相对尺度。对于实例:

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) 
+0

我喜欢你在这里使用元组,但是我会将缩放比例作为字典而不是列表,以便快速访问元素。 – VMRuiz

+0

@VMRuiz:这就是答案所讨论的内容:如果元素是* hashable *(没有保证,因为我们不知道它们是什么),我们可以使用字典(这是第二种方法)。 –

+0

键似乎是字符串,但我喜欢你的方法。有我的upvote – VMRuiz

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但其相对应的相对比例相同的密钥。

更新:您可以使用威廉·Onsem建议使用元组和只定义一个包含对秤

user_scale, relative_scale = scales[user] # (Cscale, Amin_scale)