我有一些问题要解决,我有点卡住了.问题是编写一个程序,让用户输入一个奇数(检查它是奇数),然后根据输入的大小打印一个倒置的星形金字塔.
例如,如果输入5,则会出现
*****
***
*
Run Code Online (Sandbox Code Playgroud)
因此,我的问题是双重的.
1)如何检查它是偶数还是奇数?我试着if number/2 == int希望它可以做某事,而互联网告诉我这样做if number%2==0,但这不起作用.
2)如何更改每行中间的星号?
任何问题的任何帮助非常感谢.
Jul*_*not 88
给你完整的答案是没有意义的,因为这是家庭作业,所以这里有一些指示:
偶数或奇数:
number % 2 == 0
Run Code Online (Sandbox Code Playgroud)
绝对是一个很好的方法来查找你的号码是否均匀.
如果你不知道%,这样做模是这里的除法的余数number通过2.http://en.wikipedia.org/wiki/Modulo_operation
打印金字塔:
第一条建议:为了打印*****,你可以做到print "*" * 5.
第二条建议:为了使星号居中,您需要找出在星号之前要写入多少空格.然后你可以打印一堆空格和星号print " "*1 + "*"*3
小智 25
带有%2的模2解是好的,但这需要除法和减法.因为计算机使用二进制算术,所以更有效的解决方案是:
# This first solution does not produce a Boolean value.
is_odd_if_zero = value & 1
# or
is_odd = (value & 1) == 1
# or
is_even = (value & 1) == 0
Run Code Online (Sandbox Code Playgroud)
这里的一些解决方案引用了各种“偶数”操作所花费的时间,特别是n % 2vs n & 1,没有系统地检查它如何随 的大小变化n,结果证明可以预测速度。
简短的回答是,如果您使用大小合理的数字,通常 < 1e9,它不会有太大区别。如果您使用更大的数字,那么您可能希望使用按位运算符。
这是一个演示发生了什么的图(使用 Python 3.7.3,在 Linux 5.1.2 下):
基本上,当您达到“任意精度” longs 时,模数会逐渐变慢,而按位运算保持不变。另外,请注意10**-7乘数,即我每秒可以进行约 3000 万次(小整数)检查。
这是 Python 2.7.16 的相同图:
这显示了新版本 Python 中的优化。
我的机器上只有这些版本的 Python,但可以重新运行其他版本的 Python。n在 1 和 1e100 之间有 51秒(在对数刻度上均匀分布),对于每个点,我做的相当于:
timeit('n % 2', f'n={n}', number=niter)
Run Code Online (Sandbox Code Playgroud)
niter计算其中timeit需要约 0.1 秒,并重复 5 次。稍微有点尴尬的处理n是确保我们没有对全局变量查找进行基准测试,这比局部变量慢。这些值的平均值用于绘制线条,并将各个值绘制为点。
简单但快速:
>>> def is_odd(a):
... return bool(a - ((a>>1)<<1))
...
>>> print(is_odd(13))
True
>>> print(is_odd(12))
False
>>>
Run Code Online (Sandbox Code Playgroud)
甚至更简单:
>>> def is_odd(a):
... return bool(a & 1)
Run Code Online (Sandbox Code Playgroud)
1)如何检查它是偶数还是奇数?我试过"如果数字/ 2 == int"希望它可以做某事,而互联网告诉我做"如果数字%2 == 0",但这不起作用.
def isEven(number):
return number % 2 == 0
Run Code Online (Sandbox Code Playgroud)
if number%2==0
Run Code Online (Sandbox Code Playgroud)
会告诉你它甚至是.那么奇怪的数字就是那里的else语句."%"是mod符号,它在分割后返回余数.所以基本上我们说如果数字可以被2整除,我们可以安全地假设它是偶数.否则它很奇怪(这是一个完美的相关性!)
对于星号放置,您希望在星号前加上与其所在行相关的空格数.在你的例子中
***** line 0
*** line 1
* line 2
Run Code Online (Sandbox Code Playgroud)
我们想要相应的空间
0*****
01***
012*
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
358316 次 |
| 最近记录: |