首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >初始化整型变量以进行比较

初始化整型变量以进行比较
EN

Stack Overflow用户
提问于 2018-08-06 02:12:32
回答 5查看 237关注 0票数 2

我正在学习麻省理工学院的开放式课件课程Introduction to Computer Science and Programming in Python,我花了很长一段时间试图把我的头围绕在教科书上的“手指练习”上:

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

我写了几个不太有效的解决方案,如果有更大的偶数,就会遗漏奇数。我最终认输了,在这里寻找解决方案,这是其他在这门课上工作的人所要求的。对我来说,This solution from AFDev似乎是最简单的(考虑到练习的目的和解决方案的简洁性)。我将其与我的用户输入相结合,以获得以下内容:

代码语言:javascript
复制
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是零或偶数,我会得到以下错误:

代码语言:javascript
复制
TypeError: '>' not supported between instances of 'int' and 'NoneType'

我在谷歌上做的一些工作表明,Python2在NoneType和整数之间的比较上更加自由。我更改了这一行以初始化largest = 0,但随后意识到,如果用户输入负数,这将产生无效的结果。

我将代码调整为以下代码:

代码语言:javascript
复制
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 )。我正试着一步一步地解决这个问题。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-08-06 02:19:40

如果你打算这样做,None看起来没问题。(我想说的是,它比使用大的负数更安全。)你可以用None来避免代码重复,例如

代码语言:javascript
复制
if largest is None or y > largest:
    largest = y

有几件事,与使用isNone进行比较。其次,如果or的第一部分为真,则不会执行第二部分(称为短路),因此尝试使用>比较None时不会出现错误。

票数 4
EN

Stack Overflow用户

发布于 2018-08-06 02:38:16

或者根本不要初始化它-只需要保留一个布尔值来跟踪是否找到了奇数。

代码语言:javascript
复制
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)

然后,开头的重复代码尖叫着要替换为一个统一的循环:

代码语言:javascript
复制
still_looking = True
for val in x, y, z:
    if val % 2 and (still_looking or val > largest):
        largest, still_looking = val, False
票数 3
EN

Stack Overflow用户

发布于 2018-08-06 02:32:34

我想使用一个非常大的负数,以确保你是好的。做一些类似的事情:

代码语言:javascript
复制
largest = -float('inf')

最后检查这个:

代码语言:javascript
复制
if largest == -float('inf'):
  print("There are no odd numbers")
else:
  print(largest)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51697030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档