Rui*_*ito 25 python python-3.x
我正在大学上一门编程课,问题表中的一个练习是编写以下代码:
number = int(input())
x = 0
y = 0
for n in range(number):
if n % 2 == 0:
x += n
else:
y += n
print(x)
print(y)
Run Code Online (Sandbox Code Playgroud)
只使用一个“for”循环,不使用“while”或“if”。
该代码的目的是找出从零到输入的数字的偶数和奇数之和并将其打印到屏幕上。
请注意,此时我们不应该了解函数。
我已经尝试了很长时间,似乎无法找到一种不使用“if”语句来知道循环变量是偶数还是奇数的方法。
S3D*_*DEV 17
纯粹出于教育目的(还有一点乐趣),这里有一个根本不使用任何for循环的解决方案。(当然,在函数的底层逻辑中,至少有五个循环。)
num = list(range(int(input('Enter number: '))))
even = num[::2]
odd = num[1::2]
print('Even list:', even)
print('Odd list:', odd)
print('Even:', sum(even))
print('Odd:', sum(odd))
Run Code Online (Sandbox Code Playgroud)
输出:
Enter number: 10
Even list: [0, 2, 4, 6, 8]
Odd list: [1, 3, 5, 7, 9]
Even: 20
Odd: 25
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?
input()函数返回一个str对象,该对象使用该int()函数转换为整数。range()和list()函数中,用于将给定数字转换为该范围内的值列表。
sum()函数即可获得总和。del*_*lta 13
for n in range(number):
x += (1 - n % 2) * n
y += (n % 2) * n
Run Code Online (Sandbox Code Playgroud)
tob*_*s_k 11
您要求一个循环的解决方案,但是没有循环的解决方案怎么样?
这是众所周知的是,数字从和1到n是(n+1)*n/2。因此,总和偶数号码是2 * (m+1)*m/2与m = n//2(即,floor(n/2))。奇数之和可以通过所有数字之和减去偶数之和来计算。
n = 12345
m = n // 2
e = (m+1)*m
o = (n+1)*n//2 - e
Run Code Online (Sandbox Code Playgroud)
确认:
>>> e, e==sum(i for i in range(n+1) if i % 2 == 0)
38112102 True
>>> o, o==sum(i for i in range(n+1) if i % 2 == 1)
38105929 True
Run Code Online (Sandbox Code Playgroud)
注意:这将计算数字的总和,包括 n。
还有数学的方法:
num = int(input("Enter number:"))
odd = ((num+1)/2)**2
even = num*(num+1)/2 - odd
Run Code Online (Sandbox Code Playgroud)
前n个奇数之和为n^2。为了获得奇数的计数,我们使用(num+1)/2. 要获得偶数之和,我们可以使用类似的方法,但我更喜欢odd从前 n 个数字的总和中减去,即 n*(n+1)/2。
| 归档时间: |
|
| 查看次数: |
4542 次 |
| 最近记录: |