Python 3:初始化比较的整数变量

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (292)

我正在努力学习麻省理工学院开放课件课程计算机科学和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'

Googling的一点点我说过Python 2. *在允许NoneTypes和整数之间进行比较时更加自由。我将行更改为初始化最大值= 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.')

有没有更好的方法来初始化(缺少一个更好的术语)“最大”,以便我可以将它与一个整数进行比较,还是我做得足够好的方式?

据我所知,有更好的方法来比较数字中寻找最大的(我发现最大使用Google的时候。)我通过这个东西试图婴儿步我的方式。

谢谢!

提问于
用户回答回答于

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

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

事情夫妇,比较Noneis。其次,如果a的第一部分or为True,则第二部分将不会被执行(称为短路),因此在尝试比较None使用时不会出错>

用户回答回答于

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

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

所属标签

可能回答问题的人

  • 找虫虫

    0 粉丝0 提问6 回答
  • 爸爸

    腾讯 · 客户端安全 (已认证)

    4 粉丝4 提问5 回答
  • uncle_light

    5 粉丝518 提问5 回答
  • 优惠活动秘书

    0 粉丝2 提问4 回答

扫码关注云+社区

领取腾讯云代金券