首页 > 解决方案 > 初始化整数变量以进行比较

问题描述

我正在学习麻省理工学院开放课件课程《计算机科学和 Python 编程简介》,我花了很多令人尴尬的时间试图围绕教科书中的“手指练习”进行思考:

编写一个程序,检查三个变量——x、y 和 z——并打印其中最大的奇数。如果它们都不奇怪,它应该打印一条消息。

我写了几个不太奏效的解决方案,如果有更大的偶数,就会丢失奇数。我终于认输了,在这里寻找其他人在这门课上提出的解决方案。 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'

我做了一点谷歌搜索,说 Python 2 在允许NoneType整数之间的比较方面更加自由一些。我将行更改为 initialize 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在谷歌搜索时发现)。我正在尝试逐步完成这些事情。

标签: pythonpython-3.x

解决方案


None如果你打算这样做,似乎很好。(我会说它比使用大的负数更安全。)您可以使用None例如绕过代码重复

if largest is None or y > largest:
    largest = y

几件事,比较Nonewith is。其次,如果 an 的第一部分为 True,则不会执行第二部分(称为短路),因此尝试比较usingor时不会出错。None>


推荐阅读