鱼C论坛

 找回密码
 立即注册
查看: 3046|回复: 22

[已解决]关于倍数打印文字的问题

[复制链接]
发表于 2021-12-5 15:03:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 qq281831460 于 2021-12-5 15:05 编辑

要求是:取1到100的数字,
            遇到3的倍数打印“麦”,
            遇到5的倍数打印“叔”,
            遇到即是3又是5的倍数打印“麦叔”,
            打印文字的时候不打印数字本身。
问题是:怎么不去打印数字本身呢?
             还有就是怎么让它横着隔开来打印呢?
  1. for i in range(1,101):
  2.     print(i)
  3.     if i % 3 == 0:
  4.         print("麦")
  5.     if i % 5 == 0:
  6.         print("叔")
  7.     if (i % 3 == 0) and (i % 5 == 0):
  8.         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
最佳答案
2021-12-5 16:23:53
qq281831460 发表于 2021-12-5 16:04
全部用 if 语句效率是没有 if + elif 效率高,但是运行结果偏差更大:
  1. for i in range(1,101):
  2.     # print(i , end = ' ') 这段不要,不然什么数字都打印
  3.     if (i % 3 == 0) and (i % 5 == 0): # 放最上面,优先比较
  4.         print("麦叔" , end = ' ')
  5.     elif i % 3 == 0:
  6.         print("麦" , end = ' ')
  7.     elif i % 5 == 0:
  8.         print("叔" , end = ' ')
  9.     else: print(i , end = ' ') # 改成这里
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-5 15:19:33 | 显示全部楼层
本帖最后由 jackz007 于 2021-12-5 15:29 编辑
  1. #coding:gbk
  2. c = 0
  3. for i in range(1,101):
  4.     if i % 3 == 0 or i % 5 == 0:
  5.         if (i % 3 == 0) and (i % 5 == 0):
  6.             print("麦叔" , end = '') if c == 0 else print(" 麦叔" , end = '')
  7.         elif i % 3 == 0:
  8.             print("麦" , end = '') if c == 0 else print(" 麦" , end = '')
  9.         elif i % 5 == 0:
  10.             print("叔" , end = '') if c == 0 else print(" 叔" , end = '')
  11.         c += 1
  12. print()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 15:24:13 | 显示全部楼层
屏幕截图 2021-12-05 152339.png
是我没安装什么东西吗???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 15:28:09 | 显示全部楼层
百度了一下2和3版本不兼容导致的,你用的是2.*版本吗?
我用的这个3.*版本好像不用#coding:gbk这个也可以的吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 15:30:07 | 显示全部楼层
123.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 窗口,在这个窗口里面试,就像这样:
  1. D:\00.Excise\Python>python x.py
  2. 麦 叔 麦 麦 叔 麦 麦叔 麦 叔 麦 麦 叔 麦 麦叔 麦 叔 麦 麦 叔 麦 麦叔 麦 叔 麦 麦
  3. 叔 麦 麦叔 麦 叔 麦 麦 叔 麦 麦叔 麦 叔 麦 麦 叔 麦 麦叔 麦 叔 麦 麦 叔

  4. D:\00.Excise\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 15:59:04 | 显示全部楼层

  1. for i in range(1,101):
  2.     print(i , end = ' ')
  3.     if i % 3 == 0:
  4.         print("麦" , end = ' ')
  5.     if i % 5 == 0:
  6.         print("叔" , end = ' ')
  7.     if (i % 3 == 0) and (i % 5 == 0):
  8.         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倍的字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 16:04:19 | 显示全部楼层
全部用 if 语句效率是没有 if + elif 效率高,但是运行结果偏差更大:
  1. for i in range(1,101):
  2.     print(i , end = ' ')
  3.     if i % 3 == 0:
  4.         print("麦" , end = ' ')
  5.     elif i % 5 == 0:
  6.         print("叔" , end = ' ')
  7.     elif (i % 3 == 0) and (i % 5 == 0):
  8.         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倍都不判断了


--------------------------------------------------
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 16:23:53 | 显示全部楼层    本楼为最佳答案   
qq281831460 发表于 2021-12-5 16:04
全部用 if 语句效率是没有 if + elif 效率高,但是运行结果偏差更大:
  1. for i in range(1,101):
  2.     # print(i , end = ' ') 这段不要,不然什么数字都打印
  3.     if (i % 3 == 0) and (i % 5 == 0): # 放最上面,优先比较
  4.         print("麦叔" , end = ' ')
  5.     elif i % 3 == 0:
  6.         print("麦" , end = ' ')
  7.     elif i % 5 == 0:
  8.         print("叔" , end = ' ')
  9.     else: print(i , end = ' ') # 改成这里
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 17:06:43 | 显示全部楼层
本帖最后由 qq281831460 于 2021-12-5 17:17 编辑


谢谢,看明白了,刚才在琢磨的时候又有了新想法,你再帮我看看,
我意思在1到100这100个数的列表中按下角标依次提取元素,做比较然后打印,、
可是这段代码总报错,怎么能让读取出来的元素能用呢?
报错是:
Traceback (most recent call last):
  File "d:\PyTast\1~100.py", line 8, in <module>
    list [i]
TypeError: 'int' object is not callable
我把代码放下边:

  1. i = 0
  2. j = int (i)

  3. while i <= 100:

  4.     for list in range(1,101):
  5.         list [i]
  6.         i += 1
  7.         if j % 3 == 0:
  8.             print('麦' , end = '')
  9.         elif j % 3 != 0:
  10.                 print(j)
  11.         if j % 5 == 0:
  12.             print('叔' , end = '')
  13.         elif j % 5 != 0:
  14.             print(j)
  15.         if (j % 3 == 0) and (j % 5 == 0):
  16.             print('麦叔' , end = '')
  17.         elif (j % 3 != 0) and (j % 5 != 0):
  18.             print(j)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-5 17:14:09 | 显示全部楼层
有道翻译报错说是第8行'int'对象不可调用,怎么能让他可用呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 之间的数字啊)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

那前边的为啥依次是1到100的正整数呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

其实担心你不明白,所以才没有优化你的代码。
我已经帮你的代码优化成一行代码了:
  1. 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)])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


地8行改成  j = int (list [i]) 也不行呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 17:45:24 | 显示全部楼层
qq281831460 发表于 2021-12-5 17:43
地8行改成  j = int (list ) 也不行呢

你是想储存进列表里,最后才全部打印?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

应该是三元运算符吧,最前边那个*号是啥意思呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-5 17:52:40 | 显示全部楼层
qq281831460 发表于 2021-12-5 17:46
应该是三元运算符吧,最前边那个*号是啥意思呢

arr = [1, 2, 3, 4, 5]

print(arr) # 这里会打印出 [1, 2, 3, 4, 5]
print(*arr) # 这里会打印出 1 2 3 4 5(只取列表里面的元素打印,自动以空格隔开,如你的题目要求)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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个数字呢,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

range(1, 101) 是可迭代式,不是列表
除非你将它变成列表,如:list(range(1, 101)) 或 [i for i in range(1, 101)]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 12:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表