python - 初始化整数变量以进行比较
问题描述
我正在学习麻省理工学院开放课件课程《计算机科学和 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
在谷歌搜索时发现)。我正在尝试逐步完成这些事情。
解决方案
None
如果你打算这样做,似乎很好。(我会说它比使用大的负数更安全。)您可以使用None
例如绕过代码重复
if largest is None or y > largest:
largest = y
几件事,比较None
with is
。其次,如果 an 的第一部分为 True,则不会执行第二部分(称为短路),因此尝试比较usingor
时不会出错。None
>
推荐阅读
- html - 如何在 wordpress 上编码这个 html
- javascript - JavaScript 标头和原型
- c - 如何做一个将文件中单词的第一个字符大写的 C 程序?
- java - Selenium Grid:“找不到此机器的非环回 ip4 地址”和“发生了非法反射访问操作”
- filesystems - 如何在具有 256KB 擦除扇区的闪存芯片上使用文件系统
- c# - 将大型数据集加载到网格视图 - UWP
- laravel - InvalidArgumentException 路由未定义
- python - Django 通用类视图模型更改
- xamarin.forms - 如何在 Xamarin.Forms 中更改条目光标颜色
- java - 内存中的 Java 原始数组布局