Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 初始化用于比较的整数变量_Python_Python 3.x - Fatal编程技术网

Python 初始化用于比较的整数变量

Python 初始化用于比较的整数变量,python,python-3.x,Python,Python 3.x,我正在努力完成麻省理工学院的开放式课件课程,我花了很多令人尴尬的时间试图把我的头绕在课本上的“手指练习”上: 编写一个程序,检查三个变量——x、y和z——和 打印其中最大的奇数。如果没有一个是奇怪的,它应该 打印一条这样的信息 我写了两个不太有效的解决方案,如果有更大的偶数,就会漏掉奇数。我终于认输了,并在这里寻找其他在这门课上工作的人提出的解决方案。对我来说,这似乎是最简单的(在练习的目的和解决方案的简洁性方面)。我将其与用户输入相结合,得到以下结果: x=int(input('Enter y

我正在努力完成麻省理工学院的开放式课件课程,我花了很多令人尴尬的时间试图把我的头绕在课本上的“手指练习”上:

编写一个程序,检查三个变量——x、y和z——和 打印其中最大的奇数。如果没有一个是奇怪的,它应该 打印一条这样的信息

我写了两个不太有效的解决方案,如果有更大的偶数,就会漏掉奇数。我终于认输了,并在这里寻找其他在这门课上工作的人提出的解决方案。对我来说,这似乎是最简单的(在练习的目的和解决方案的简洁性方面)。我将其与用户输入相结合,得到以下结果:

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
和整数方面更自由一些。我将行更改为initialize
maximum=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我会保存你的下半段评论,并在几周后重新访问,哈哈。