我试图创建的代码是根据输入的波长值打印无线电波或微波等波长。
userInput = input("Enter wavelength (m) value: ")
waveValue= float(userInput)
if waveValue > 10**-1 :
print("Radio Waves")
elif waveValue < 10**-3 :
print("Microwaves")
elif waveValue < 7*10**-7 :
print("Infared")
elif waveValue <4-10**-7 :
print(" Visible light")
elif waveValue <10**-8 :
print( "Ultraviolet")
elif waveValue <10**-11 :
print( "X-rays")
elif waveValue >10**-11 :
print("Gamma rays")
else :
print()
关于如何使第二个if语句起作用的任何提示。我输入的每个输入都只输出无线电波,因为我的参数不能正常工作。
还有5个输入我必须使用elif命令。
答案 0 :(得分:4)
你是否想在这里使用10的力量?因为例如“10到-1”的约定是1.0e-1。您在代码中拥有的内容转换为“10次-1”或-10,我认为您并不打算这样做。
我会改写为:
if waveValue > 1.0e-1:
print("Radio Waves")
elif (waveValue > 1.0e-3) and (waveValue < 1.0e-1):
print("Micro Waves")
作为先前的答案指出,订购答案也更有效,因此不需要比较的一方(这些价值已经通过早期的测试得到了解决)。
例如:
if waveValue < 1.0e-3:
<not in current code>
elif waveValue < 1.0e-1:
print("Micro Waves")
else:
print("Radio Waves")
答案 1 :(得分:0)
对于少数“中断值”,您的方法没有错。对于大量的“中断值”,最好创建一个包含中断值和相应操作的表。
即,在您的情况下,一张波长和分类的表格。第一行包含10e-1和“无线电波”,第二行包含10e-3和“微波炉”
在代码中,只需循环直到找到waveValue的正确行。
这在税表中很常见。作为奖励,您可以将税表存储在外部数据库中,而不是对程序中的值进行硬编码。
答案 2 :(得分:0)
我认为你的第二个陈述是错误的。
它表示waveValue> 10 * -1 <10 * -3,我认为&gt; -10&lt; -30如果我说的是正确的话,那么大于-10的数字不能小于-30
答案 3 :(得分:0)
元组列表在这里可以很好地工作:
wave_categories = []
# Load up your data of definitions
wave_categories.append((1e-3, 'Microwaves'))
wave_categories.append((1e-2, 'Somewaves'))
wave_categories.append((1e-1, 'Radiowaves'))
wave_categories.append((1, 'Ultrawaves'))
然后你的检测成为一个循环:
def find_wave(wavelength):
for category_wavelength, name in wave_categories:
if wavelength < category_wavelength:
return name
raise Exception('Wavelength {} not detected in list'.format(wavelength))
要使其适用于众多类别,只需向wave_categories
添加更多数据。
答案 4 :(得分:0)
您可以使用bisect
模块:
from bisect import bisect
freqs = [10**-11, 10**-8, 4*10**-7, 7*10**-7, 10**-3, 10**-1]
names = ['Gamma rays', 'X-rays', 'Ultraviolet', 'Visible light',
'Infared', 'Microwaves', 'Radio Waves']
>>> names[bisect(freqs, 10**-2)]
'Radio Waves'
>>> names[bisect(freqs, 10**-4)]
'Microwaves'