qq281831460 发表于 2021-12-5 15:03:38

关于倍数打印文字的问题

本帖最后由 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:19:33

本帖最后由 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()

qq281831460 发表于 2021-12-5 15:24:13


是我没安装什么东西吗???

qq281831460 发表于 2021-12-5 15:28:09

百度了一下2和3版本不兼容导致的,你用的是2.*版本吗?
我用的这个3.*版本好像不用#coding:gbk这个也可以的吧

qq281831460 发表于 2021-12-5 15:30:07

jackz007 发表于 2021-12-5 15:30:59

本帖最后由 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>

qq281831460 发表于 2021-12-5 15:59:04


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倍的字

qq281831460 发表于 2021-12-5 16:04:19

全部用 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倍都不判断了


--------------------------------------------------

傻眼貓咪 发表于 2021-12-5 16:23:53

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:06:43

本帖最后由 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)

qq281831460 发表于 2021-12-5 17:14:09

有道翻译报错说是第8行'int'对象不可调用,怎么能让他可用呢

傻眼貓咪 发表于 2021-12-5 17:33:36

qq281831460 发表于 2021-12-5 17:14
有道翻译报错说是第8行'int'对象不可调用,怎么能让他可用呢

这是很多初学者都会犯的错。
报错不难理解,首先你先要知道你的所谓的 list 是什么?(是列表呢?还是整数?明明第 7 行代码写明 for list in range(1,101) 表示 list 是介于 1 至 101 之间的数字啊)

qq281831460 发表于 2021-12-5 17:41:09

傻眼貓咪 发表于 2021-12-5 17:33
这是很多初学者都会犯的错。
报错不难理解,首先你先要知道你的所谓的 list 是什么?(是列表呢?还是 ...

那前边的为啥依次是1到100的正整数呢

傻眼貓咪 发表于 2021-12-5 17:41:24

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)])

qq281831460 发表于 2021-12-5 17:43:31

傻眼貓咪 发表于 2021-12-5 17:33
这是很多初学者都会犯的错。
报错不难理解,首先你先要知道你的所谓的 list 是什么?(是列表呢?还是 ...

地8行改成j = int (list ) 也不行呢

傻眼貓咪 发表于 2021-12-5 17:45:24

qq281831460 发表于 2021-12-5 17:43
地8行改成j = int (list ) 也不行呢

你是想储存进列表里,最后才全部打印?

qq281831460 发表于 2021-12-5 17:46:30

傻眼貓咪 发表于 2021-12-5 17:41
其实担心你不明白,所以才没有优化你的代码。
我已经帮你的代码优化成一行代码了:

应该是三元运算符吧,最前边那个*号是啥意思呢

傻眼貓咪 发表于 2021-12-5 17:52:40

qq281831460 发表于 2021-12-5 17:46
应该是三元运算符吧,最前边那个*号是啥意思呢

arr =

print(arr) # 这里会打印出
print(*arr) # 这里会打印出 1 2 3 4 5(只取列表里面的元素打印,自动以空格隔开,如你的题目要求)

qq281831460 发表于 2021-12-5 17:53:29

本帖最后由 qq281831460 于 2021-12-5 17:54 编辑

傻眼貓咪 发表于 2021-12-5 17:45
你是想储存进列表里,最后才全部打印?

不是range(1,101)已经有100个数了吗,分别读取出来做比较并且打印,这个方法应该还能应用到别的场景,所以我想知道怎么用
还是range(1,101)他本身并不是在内存里事先存储了这100个数字呢,

傻眼貓咪 发表于 2021-12-5 17:56:59

qq281831460 发表于 2021-12-5 17:53
不是range(1,101)已经有100个数了吗,分别读取出来做比较并且打印,这个方法应该还能应用到别的场景, ...

range(1, 101) 是可迭代式,不是列表
除非你将它变成列表,如:list(range(1, 101)) 或
页: [1] 2
查看完整版本: 关于倍数打印文字的问题