编写一个程序,接收输入上的一个数字,并根据以下条件打印从1到该数字的值。 它还应该在输入上接收另一个布尔值'rev'。你知道吗
对于给定范围内的每个数字,
-如果数字是3的倍数,或包含数字3,则打印“Jugs”。
-如果数字是5的倍数,或包含数字5,则打印“马克杯”。
-如果数字是7的倍数,或包含数字7,则打印“哈巴狗”。你知道吗
否则,它会打印号码。你知道吗
反向要求:
如果布尔值“rev”为真,则反转打印顺序。
-“PugsJugsMugs”表示3、5和7的倍数
-“PugsMugs”表示3和7的倍数
-“MugsJugs”表示3和5的倍数
-“PugsJugs”表示5和7的倍数
首先,我得到了一个输入“rev”来指示是否需要反转。如果rev为true,则反转字符串,否则不反转。你知道吗
我以前使用过“if”语句,但这里只能使用一个或不使用条件语句。我不知道怎么做。有人能帮帮我吗
“else”工作正常。有人能帮我说“如果”吗
num = int(input())
rev = int(input())
for i in range(1,num+1):
*if rev:
string = 'jugs' * bool(i%3==0 or '3' in str(i) or i)
string = 'mugs'+ string * bool(i%5==0 or '5' in str(i) or i)
string = 'pugs'+ string * bool(i%5==0 or '5' in str(i) or i)
print(string or i)*
else:
print("jugs"*(i%3==0 or '3' in str(i)) + "mugs"* (i%5==0 or '5' in str(i)) + "pugs"*(i%7==0 or '7' in str(i)) or i)
1
2
Jugs
4
Mugs
Jugs
Pugs
8
Jugs
Mugs
11
Jugs
Jugs
Pugs
MugsJugs
有三个主要问题阻止代码按原样工作。你知道吗
首先,在布尔表达式
bool(i%3==0 or '3' in str(i) or i)
中,or i
始终为真,因为i
始终为非零。这意味着不管怎样,当您反转字符串时,它都会同时打印出所有三个值。去掉表达式的or i
部分可以解决这个问题。你知道吗第二,您的意图似乎是通过将下一部分添加到字符串的开头来反向构造字符串。然而,当你写作时
那个顺序搞混了。如果字符串满足条件,则不将“mugs”添加到字符串的开头,而是将字符串重新定义为等于“mugs”,如果字符串满足mugs的条件,则添加先前的值。相反,只需将
+ string
移到表达式的末尾即可修复此顺序。你知道吗最后,一个小的拼写错误。检查
i%5==0 or '5' in str(i)
两次,而不是检查7。用7替换第二个实例很容易。做这些事情最终会导致:然而,正如其他人所指出的,在反转输出之前构造输出效率更高,甚至可以去掉最后的if语句。例如:
在这里,我将字符串创建为值列表,而不是实际的字符串,这样我就可以颠倒单词的顺序,而不是单个字符。然后,如果
rev
为真,则按相反顺序连接单词,如果为假,则按正常顺序连接单词。你知道吗相关问题 更多 >
编程相关推荐