我正在学习麻省理工学院的开放式课件课程Introduction to Computer Science and Programming in Python,我花了很长一段时间试图把我的头围绕在教科书上的“手指练习”上:
编写一个程序,检查三个变量-x、y和z-并打印其中最大的奇数。如果它们都不奇怪,它应该打印一条消息来说明这一点。
我写了几个不太有效的解决方案,如果有更大的偶数,就会遗漏奇数。我最终认输了,在这里寻找解决方案,这是其他在这门课上工作的人所要求的。对我来说,This solution from AFDev似乎是最简单的(考虑到练习的目的和解决方案的简洁性)。我将其与我的用户输入相结合,以获得以下内容:
x=int(input('Enter your first number:'))
y=int(input('Enter your second number:'))
z=int(input('Enter your third number:'))
largest = None
if x%2:
largest = x
if y%2:
if y > largest:
largest = y
if z%2:
if z > largest:
largest = z
if largest:
print ('The largest odd number is', largest)
else:
print ('There are no odd numbers.')
只要x是奇数,这就很有效。如果x是零或偶数,我会得到以下错误:
TypeError: '>' not supported between instances of 'int' and 'NoneType'
我在谷歌上做的一些工作表明,Python2在NoneType
和整数之间的比较上更加自由。我更改了这一行以初始化largest = 0
,但随后意识到,如果用户输入负数,这将产生无效的结果。
我将代码调整为以下代码:
x=int(input('Enter your first number:'))
y=int(input('Enter your second number:'))
z=int(input('Enter your third number:'))
largest = None
if x%2:
largest = x
if y%2:
if largest == None:
largest = y
if y > largest:
largest = y
if z%2:
if largest == None:
largest = z
if z > largest:
largest = z
if largest:
print ('The largest odd number is', largest)
else:
print ('There are no odd numbers.')
有没有更好的方法来初始化“最大的”(因为没有更好的术语),以便我可以将它与整数进行比较,或者我做得足够好了吗?
我知道有更好的方法来比较这些数字以找到最大的(我在谷歌搜索时发现了max
)。我正试着一步一步地解决这个问题。
发布于 2018-08-06 02:19:40
如果你打算这样做,None
看起来没问题。(我想说的是,它比使用大的负数更安全。)你可以用None
来避免代码重复,例如
if largest is None or y > largest:
largest = y
有几件事,与使用is
的None
进行比较。其次,如果or
的第一部分为真,则不会执行第二部分(称为短路),因此尝试使用>
比较None
时不会出现错误。
发布于 2018-08-06 02:38:16
或者根本不要初始化它-只需要保留一个布尔值来跟踪是否找到了奇数。
still_looking = True
if x % 2:
largest, still_looking = x, False
if y % 2 and (still_looking or y > largest):
largest, still_looking = y, False
if z % 2 and (still_looking or z > largest):
largest, still_looking = z, False
if still_looking:
print('There are no odd numbers.')
else:
print('The largest odd number is', largest)
然后,开头的重复代码尖叫着要替换为一个统一的循环:
still_looking = True
for val in x, y, z:
if val % 2 and (still_looking or val > largest):
largest, still_looking = val, False
发布于 2018-08-06 02:32:34
我想使用一个非常大的负数,以确保你是好的。做一些类似的事情:
largest = -float('inf')
最后检查这个:
if largest == -float('inf'):
print("There are no odd numbers")
else:
print(largest)
https://stackoverflow.com/questions/51697030
复制相似问题