我必须在函数中输入两个数字,并在输入的两个数字之间输出一串奇数。一切似乎都运转良好,但我无法弄清楚如何正确剥离结束。
# getOdds.py
# A function that receives two integers and returns a string of consecutive even numbers between the two integers.
# Define the getOdds() functions
def getOdds(p, q):
""" returns a string of odd numbers between integers p & q """
# Define odd number string
x = p
while x <= q:
if x % 2 == 0:
x += 1
# Calculate & print string
else:
print(x, end = ", ")
str(x).strip(", ")
x += 2
我只想让最后一个数字在其末尾没有“,”(例如,1,2,3而不是1,2,3)。
为什么在这种情况下strip()不起作用?我该怎么做呢?
答案 0 :(得分:1)
首先,str.strip
不会就地运行,并且您没有对新的返回值执行任何操作。其次,str.strip
不适用于您已经打印到控制台的内容。相反,检查循环是否在其最后一次迭代,并且不要在该点打印逗号。
else:
print(x, end = "")
x += 2
if x <= q: #if the while loop is still going to continue
print(', ',end="")
else: #end of the function, finish the line
print()
或者您可以使用单个print()
电话和range()
功能:
def getOdds(p, q):
print(*range(p if p%2 else p+1, q+1, 2), sep=', ')
结果:
>>> getOdds(3, 10)
3, 5, 7, 9
>>> getOdds(3, 11)
3, 5, 7, 9, 11
请注意,正如@ TadhgMcDonald-Jensen在下面的评论中所说,p if p%2 else p+1
可以替换为p|1
,它使用按位OR运算来产生相同的结果。
答案 1 :(得分:0)
不要在循环中打印数字,累积并返回它们。即。
def odds(q, p):
q += (2 if q % 2 else 1)
return range(q, p, 2)
my_odds = (str(n) for n in odds(1, 9))
print(", ".join(my_odds))
答案 2 :(得分:0)
阻止string NFPAFPRACHGLOES = "";
if (!String.IsNullOrWhiteSpace(NFPA))
{
NFPAFPRACHGLOES += NFPA + "\n";
}
if (FBtn == "on")
{
NFPAFPRACHGLOES += "F";
}
if (PBtn == "on")
{
if (NFPAFPRACHGLOES.Contains("F"))
{
NFPAFPRACHGLOES += "/";
}
NFPAFPRACHGLOES += "P";
}
if (RBtn == "on")
{
if (NFPAFPRACHGLOES.Contains("F") || NFPAFPRACHGLOES.Contains("P"))
{
NFPAFPRACHGLOES += "/";
}
NFPAFPRACHGLOES += "R";
}
if (ABtn == "on")
{
if (NFPAFPRACHGLOES.Contains("F") || NFPAFPRACHGLOES.Contains("P") || NFPAFPRACHGLOES.Contains("R"))
{
NFPAFPRACHGLOES += "/";
}
NFPAFPRACHGLOES += "A";
}
if (CHBtn == "on")
{
if (NFPAFPRACHGLOES.Contains("F") || NFPAFPRACHGLOES.Contains("P") || NFPAFPRACHGLOES.Contains("R") || NFPAFPRACHGLOES.Contains("A"))
{
NFPAFPRACHGLOES += "/";
}
NFPAFPRACHGLOES += "CH";
}
NFPAFPRACHGLOES += "@"; //<--This is where the @ symbol gets added.
if (GBtn == "on")
{
NFPAFPRACHGLOES += "G";
}
if (LBtn == "on")
{
NFPAFPRACHGLOES += "L";
}
if (OBtn == "on")
{
NFPAFPRACHGLOES += "O";
}
if (EBtn == "on")
{
NFPAFPRACHGLOES += "E";
}
if (SBtn == "on")
{
NFPAFPRACHGLOES += "S";
}
//NFPAFPRACHGLOES = NFPAFPRACHGLOES.Trim();
NFPAFPRACHGLOES.TrimEnd('\n');
<input type="hidden" id="dumb1" value="@NFPAFPRACHGLOES" /> <-- read value before trimend call
NFPAFPRACHGLOES.TrimEnd('@');
<input type="hidden" id="dumb2" value="@NFPAFPRACHGLOES" /> <-- read value after trimend call.
出现在最后一个元素的唯一方法是阻止.TrimEnd()
在最后一个印刷品上发生,有几种方法可以解决这个问题,但最简单的方法是我的想法是得到一系列你想要打印的东西并一次完成,打印功能很棒:
,
你可以通过将它自己的函数置于辅助生成器函数中而不是end=", "
来简化>>> print(*range(5), sep=", ")
0, 1, 2, 3, 4
:
print(x,end=", ")
然后你的实际yield x
函数会像上面的print语句一样调用帮助器:
def getOdds_gen_helper(p, q):
""" generates odd numbers between integers p & q """
# Define odd number string
x = p
while x <= q:
if x % 2 == 0:
x += 1
# Calculate & print string
else:
yield x #!!! yield the values
str(x).strip(", ")
x += 2
请注意,您的原始文档字符串实际上是“返回..”但实际上它不会返回任何内容,如果您想要返回此字符串而不是打印它,使用生成器和getOdds
方法同样容易:
def getOdds(p,q):
""" prints all of the odd numbers between integers p & q """
print(*getOdds_gen_helper(p,q), sep=", ")