Python 初始化用于比较的整数变量
我正在努力完成麻省理工学院的开放式课件课程,我花了很多令人尴尬的时间试图把我的头绕在课本上的“手指练习”上: 编写一个程序,检查三个变量——x、y和z——和 打印其中最大的奇数。如果没有一个是奇怪的,它应该 打印一条这样的信息 我写了两个不太有效的解决方案,如果有更大的偶数,就会漏掉奇数。我终于认输了,并在这里寻找其他在这门课上工作的人提出的解决方案。对我来说,这似乎是最简单的(在练习的目的和解决方案的简洁性方面)。我将其与用户输入相结合,得到以下结果:Python 初始化用于比较的整数变量,python,python-3.x,Python,Python 3.x,我正在努力完成麻省理工学院的开放式课件课程,我花了很多令人尴尬的时间试图把我的头绕在课本上的“手指练习”上: 编写一个程序,检查三个变量——x、y和z——和 打印其中最大的奇数。如果没有一个是奇怪的,它应该 打印一条这样的信息 我写了两个不太有效的解决方案,如果有更大的偶数,就会漏掉奇数。我终于认输了,并在这里寻找其他在这门课上工作的人提出的解决方案。对我来说,这似乎是最简单的(在练习的目的和解决方案的简洁性方面)。我将其与用户输入相结合,得到以下结果: x=int(input('Enter y
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=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.')
只要x是奇数,这就很有效。如果x是零或偶数,我得到以下错误:
TypeError: '>' not supported between instances of 'int' and 'NoneType'
我在谷歌上做了一点搜索,说Python2在允许比较NoneType
和整数方面更自由一些。我将行更改为initializemaximum=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 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=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
)。我正试着循序渐进地处理这件事。如果你要这样做,没有一件看起来很好。(我认为这比使用大的负数更安全。)你可以用None
来绕过代码重复
if largest is None or y > largest:
largest = y
与is
的None
相比,有两种情况。其次,如果或
的第一部分为真,则第二部分将不会执行(称为短路),因此,尝试使用
比较无
时不会出现错误,而不是放置:
largest = None
你应该说:
largest = -1 * sys.maxsize + 1
我想用一个非常大的负数来确保你的表现良好。
做一些类似于:
largest = -float('inf')
最后检查一下:
if largest == -float('inf'):
print("There are no odd numbers")
else:
print(largest)
或者根本不初始化它——只需保留一个布尔值来跟踪是否找到了奇数
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
我会:
x=int(input('Enter your first number:'))
y=int(input('Enter your second number:'))
z=int(input('Enter your third number:'))
li=[e for e in (x,y,z) if e % 2] # find all odd numbers from x,y,z
print('{} is largest odd number'.format(max(li)) if li else 'all input even')
这是因为Python中的空容器是False
,如果没有奇数,列表li
将是空的。您可以使用max
查找最大奇数(如果有)以及[if true子句]if[boolean test]else[what do nother]
您也可以这样做:
li=[e for e in (x,y,z) if e % 2]
if li:
print ('The largest odd number is', max(li))
else:
print ('There are no odd numbers.')
如果不想使用,可以编写自己的:
def mymax(li):
max_=None
if li:
max_=li[0]
for e in li:
if e>max_: max_=e
return max_
将最大值
初始化为非常大的负数,例如最大值=-1e10
。在第一个代码中避免类型错误
的一个解决方法是为最大值
指定一个非常大的负数(如最大值=-99999
)。顺便说一下,零是偶数!将最大值初始化为float('-inf')
在Python3上没有sys.maxint
。这在Python3中不起作用,即使它起了作用,这也是一个糟糕的想法。它会导致对实现细节的隐藏依赖。sys.maxsize
是机器整数的最大值(例如,len
)。这并不是int
类型的最大值。这是一个很好的方法,但请通读OP文章的结尾——“我知道有更好的方法来比较数字以找到最大值(我在谷歌搜索时发现了最大值)。我正试着逐步解决这个问题。”我想婴儿步是旁观者眼中的!我发现,即使是那些正在学习表意Python的人,与纯过程Python(这行、新行、新行,如果x:new-line等)相比,表意Python通常也是相当清晰的。至少对这个孩子来说……我已经抓住了你的解决方案,几周后再看一看。我真的很感谢大家的帮助!如果我们讨论的是小步骤,您可能需要解释一下元组解包的相关内容!否则,+1我会保存你的下半段评论,并在几周后重新访问,哈哈。