关于倍数打印文字的问题
本帖最后由 qq281831460 于 2021-12-5 15:05 编辑要求是:取1到100的数字,
遇到3的倍数打印“麦”,
遇到5的倍数打印“叔”,
遇到即是3又是5的倍数打印“麦叔”,
打印文字的时候不打印数字本身。
问题是:怎么不去打印数字本身呢?
还有就是怎么让它横着隔开来打印呢?
for i in range(1,101):
print(i)
if i % 3 == 0:
print("麦")
if i % 5 == 0:
print("叔")
if (i % 3 == 0) and (i % 5 == 0):
print("麦叔")
1
2
3
麦
4
5
叔
6
麦
7
8
9
麦
10
叔
11
12
麦
13
14
15
麦
叔
麦叔
16
17
18
麦
19
20
叔
21
麦
22
23
24
麦
25
叔
26
27
麦
28
29
30
麦
叔
麦叔
31
32
33
麦
34
35
叔
36
麦
37
38
39
麦
40
叔
41
42
麦
43
44
45
麦
叔
麦叔
46
47
48
麦
49
50
叔
51
麦
52
53
54
麦
55
叔
56
57
麦
58
59
60
麦
叔
麦叔
61
62
63
麦
64
65
叔
66
麦
67
68
69
麦
70
叔
71
72
麦
73
74
75
麦
叔
麦叔
76
77
78
麦
79
80
叔
81
麦
82
83
84
麦
85
叔
86
87
麦
88
89
90
麦
叔
麦叔
91
92
93
麦
94
95
叔
96
麦
97
98
99
麦
100
叔 本帖最后由 jackz007 于 2021-12-5 15:29 编辑
#coding:gbk
c = 0
for i in range(1,101):
if i % 3 == 0 or i % 5 == 0:
if (i % 3 == 0) and (i % 5 == 0):
print("麦叔" , end = '') if c == 0 else print(" 麦叔" , end = '')
elif i % 3 == 0:
print("麦" , end = '') if c == 0 else print(" 麦" , end = '')
elif i % 5 == 0:
print("叔" , end = '') if c == 0 else print(" 叔" , end = '')
c += 1
print()
是我没安装什么东西吗??? 百度了一下2和3版本不兼容导致的,你用的是2.*版本吗?
我用的这个3.*版本好像不用#coding:gbk这个也可以的吧 本帖最后由 jackz007 于 2021-12-5 15:33 编辑
qq281831460 发表于 2021-12-5 15:28
百度了一下2和3版本不兼容导致的,你用的是2.*版本吗?
我用的这个3.*版本好像不用#coding:gbk这个也可以 ...
我用 Python 3.83,只要代码中出现有汉字就必须写。
2 楼的代码有所优化,你运行一下试试。
不要直接在 IDLE 中试,IDLE 每次只能输入单条语句,如果输多了就会报错。
要开出一个 CMD 窗口,在这个窗口里面试,就像这样:
D:\00.Excise\Python>python x.py
麦 叔 麦 麦 叔 麦 麦叔 麦 叔 麦 麦 叔 麦 麦叔 麦 叔 麦 麦 叔 麦 麦叔 麦 叔 麦 麦
叔 麦 麦叔 麦 叔 麦 麦 叔 麦 麦叔 麦 叔 麦 麦 叔 麦 麦叔 麦 叔 麦 麦 叔
D:\00.Excise\Python>
for i in range(1,101):
print(i , end = ' ')
if i % 3 == 0:
print("麦" , end = ' ')
if i % 5 == 0:
print("叔" , end = ' ')
if (i % 3 == 0) and (i % 5 == 0):
print("麦叔" , end = ' ')
1 2 3 麦 4 5 叔 6 麦 7 8 9 麦 10 叔 11 12 麦 13 14 15 麦 叔 麦叔 16 17 18 麦 19 20 叔 21 麦 22 23 24 麦 25 叔 26 27 麦 28 29 30 麦 叔 麦叔 31 32 33 麦 34 35 叔 36 麦 37 38 39 麦 40 叔 41 42 麦 43 44 45 麦 叔 麦叔 46 47 48 麦 49 50 叔 51 麦 52 53 54 麦 55 叔 56 57 麦 58 59 60 麦 叔 麦叔 61 62 63 麦 64 65 叔 66 麦 67 68 69 麦 70 叔 71 72 麦 73 74 75 麦 叔 麦叔 76 77 78 麦 79 80 叔 81 麦 82 83 84 麦 85 叔 86 87 麦 88 89 90 麦 叔 麦叔 91 92 93 麦 94 95 叔 96 麦 97 98 99 麦 100 叔
-------------------------------------------------------------------------------------------------------------------------
这样可以运行,但是输出如红色标记的那样,数字本身还输出,还有遇到3和5倍数时候还要多打印两个3倍和5倍的字 全部用 if 语句效率是没有 if + elif 效率高,但是运行结果偏差更大:
for i in range(1,101):
print(i , end = ' ')
if i % 3 == 0:
print("麦" , end = ' ')
elif i % 5 == 0:
print("叔" , end = ' ')
elif (i % 3 == 0) and (i % 5 == 0):
print("麦叔" , end = ' ')
1 2 3 麦 4 5 叔 6 麦 7 8 9 麦 10 叔 11 12 麦 13 14 15 麦 16 17 18 麦 19 20 叔 21 麦 22 23 24 麦 25 叔 26 27 麦 28 29 30 麦 31 32 33 麦 34 35 叔 36 麦 37 38 39 麦 40 叔 41 42 麦 43 44 45 麦 46 47 48 麦 49 50 叔 51 麦 52 53 54 麦 55 叔 56 57 麦 58 59 60 麦 61 62 63 麦 64 65 叔 66 麦 67 68 69 麦 70 叔 71 72 麦 73 74 75 麦 76 77 78 麦 79 80 叔 81 麦 82 83 84 麦 85 叔 86 87 麦 88 89 90 麦 91 92 93 麦 94 95 叔 96 麦 97 98 99 麦 100 叔
---------------------------------------------
遇到3和5倍数时候,不打印“麦叔”,只打印个3倍数的字,连5倍都不判断了
-------------------------------------------------- qq281831460 发表于 2021-12-5 16:04
全部用 if 语句效率是没有 if + elif 效率高,但是运行结果偏差更大:
for i in range(1,101):
# print(i , end = ' ') 这段不要,不然什么数字都打印
if (i % 3 == 0) and (i % 5 == 0): # 放最上面,优先比较
print("麦叔" , end = ' ')
elif i % 3 == 0:
print("麦" , end = ' ')
elif i % 5 == 0:
print("叔" , end = ' ')
else: print(i , end = ' ') # 改成这里 本帖最后由 qq281831460 于 2021-12-5 17:17 编辑
傻眼貓咪 发表于 2021-12-5 16:23
谢谢,看明白了,刚才在琢磨的时候又有了新想法,你再帮我看看,
我意思在1到100这100个数的列表中按下角标依次提取元素,做比较然后打印,、
可是这段代码总报错,怎么能让读取出来的元素能用呢?
报错是:
Traceback (most recent call last):
File "d:\PyTast\1~100.py", line 8, in <module>
list
TypeError: 'int' object is not callable
我把代码放下边:
i = 0
j = int (i)
while i <= 100:
for list in range(1,101):
list
i += 1
if j % 3 == 0:
print('麦' , end = '')
elif j % 3 != 0:
print(j)
if j % 5 == 0:
print('叔' , end = '')
elif j % 5 != 0:
print(j)
if (j % 3 == 0) and (j % 5 == 0):
print('麦叔' , end = '')
elif (j % 3 != 0) and (j % 5 != 0):
print(j) 有道翻译报错说是第8行'int'对象不可调用,怎么能让他可用呢 qq281831460 发表于 2021-12-5 17:14
有道翻译报错说是第8行'int'对象不可调用,怎么能让他可用呢
这是很多初学者都会犯的错。
报错不难理解,首先你先要知道你的所谓的 list 是什么?(是列表呢?还是整数?明明第 7 行代码写明 for list in range(1,101) 表示 list 是介于 1 至 101 之间的数字啊) 傻眼貓咪 发表于 2021-12-5 17:33
这是很多初学者都会犯的错。
报错不难理解,首先你先要知道你的所谓的 list 是什么?(是列表呢?还是 ...
那前边的为啥依次是1到100的正整数呢 qq281831460 发表于 2021-12-5 17:14
有道翻译报错说是第8行'int'对象不可调用,怎么能让他可用呢
其实担心你不明白,所以才没有优化你的代码。
我已经帮你的代码优化成一行代码了:print(*["麦叔" if not i%3 and not i%5 else "麦" if not i%3 else "叔" if not i%5 else i for i in range(1, 101)]) 傻眼貓咪 发表于 2021-12-5 17:33
这是很多初学者都会犯的错。
报错不难理解,首先你先要知道你的所谓的 list 是什么?(是列表呢?还是 ...
地8行改成j = int (list ) 也不行呢 qq281831460 发表于 2021-12-5 17:43
地8行改成j = int (list ) 也不行呢
你是想储存进列表里,最后才全部打印? 傻眼貓咪 发表于 2021-12-5 17:41
其实担心你不明白,所以才没有优化你的代码。
我已经帮你的代码优化成一行代码了:
应该是三元运算符吧,最前边那个*号是啥意思呢 qq281831460 发表于 2021-12-5 17:46
应该是三元运算符吧,最前边那个*号是啥意思呢
arr =
print(arr) # 这里会打印出
print(*arr) # 这里会打印出 1 2 3 4 5(只取列表里面的元素打印,自动以空格隔开,如你的题目要求) 本帖最后由 qq281831460 于 2021-12-5 17:54 编辑
傻眼貓咪 发表于 2021-12-5 17:45
你是想储存进列表里,最后才全部打印?
不是range(1,101)已经有100个数了吗,分别读取出来做比较并且打印,这个方法应该还能应用到别的场景,所以我想知道怎么用
还是range(1,101)他本身并不是在内存里事先存储了这100个数字呢, qq281831460 发表于 2021-12-5 17:53
不是range(1,101)已经有100个数了吗,分别读取出来做比较并且打印,这个方法应该还能应用到别的场景, ...
range(1, 101) 是可迭代式,不是列表
除非你将它变成列表,如:list(range(1, 101)) 或
页:
[1]
2