愚公移山日记·2
依旧自我介绍先
河南一所不入流二本院校,大二在校生,专业是物流管理
python自学第50天(上一篇文章说自学两个多月,是大概计算哈哈哈,今天确切算了一下就50天)
我的学习进度
上一篇讲到现在在Github上学习大佬分享的Python - 100天从新手到大师今天学习的是Day07字符串和常用数据结构中的后几个综合实例和Day08面向相对象的编程基础中的几个练习
昨日学习反思
上一篇文章中我分享了两道自己有疑问的问题,本以为会有大佬给小弟指点迷津,等到现在也没有大佬解救我,我陷入了深深的思考,思考的不仅仅是如何理解代码含义,更多的是想怎么引起大佬的注意╰( ̄ω ̄o)。言归正传在今天的学习过程中我隐隐约约感觉出了一点就是:if语句中包含的if语句,可能并不像我想象的那般简单,但是自己还是说不清楚。还是昨天的那句话“有些问题不必当时非要死磕尤其是自己学习的时候,很容易打消自己学习的积极性,有时候你放一放,等回头看的时候也许就豁然开朗”,再等一等,再等等。
抛砖引玉
下面我来分享今天的成果
综合案例一:双色球选号先
上代码!
from random import randrange, randint, sample
def display(balls):
#对数据的展示代码
for index, ball in enumerate(balls):
if index == len(balls) - 1:
print('|', end=' ')
#这三条代码其实是表达一个意思:在我们得到一组双色球号码之后为了区分红球和另外一个球 中间加上一个“|”来区分
print('%02d' % ball, end=' ')
#这位大老用的这种表示方法,我不清楚format和这种表达式哪一个更优秀一些,个人跟更是青睐format一点,02d 表达的意思是:两个字节长度用十进制表示。
print()
def random_select():
red_balls = [x for x in range(1, 34)]
#给红色球建立一个池,以便我们后续直接从中选取(不得不说 以我当前编程能力真心感觉这位大佬的语言相当简洁,要是我之前写代码一定是
#for i in range(1,34)
#p = list.(i))
selected_balls = []
#定义一个空的列表
selected_balls = sample(red_balls, 6)
#从红色球(因为是一个列表所以我们使用sample)中随机抓取6个
selected_balls.sort()
#给列表排序虽然我不是太懂到底为什么非要排序
selected_balls.append(randint(1, 16))
#在用append增加一个颜色的球
return selected_balls
def main():
n = int(input('机选几注: '))
for _ in range(n):
#在接触这网站之前我根本不知道for 循环还可以直接用'_'
display(random_select())
if __name__ == '__main__':
main()
先说一下里面调用的random库,sort,enumerate
- random.randrange(开始数字,结束数字,步长)|有一点要注意用这个调用输出的结果不一定是步长的倍数,输出的结果减去开始数字,才是步长的倍数,比如random.randrange(10,100,3) 比如输出结果是13,我们明眼一看便知道13不是3的倍数,但是用13-10 就是3 的倍数。
- random.randint(开始数字,结束数字)|从开始数字到最后数字中随机去除一个值,这里输出的结果会包含开始值和结束值。
- random.sample(序列,值的个数)|从序列中随机取出相应个数的值。
- enumerate()|用于于将一个可遍历的数据对象如列表,元组或者字符串 组合为一个引索序列,同时列出数据和数据下标,一般用于for循环中。(这句定义是我直接copy的,不过也不是特别难懂)
- List.sort()|对于原列表进行排序其中一点(reverse = True 表示降序排序,reverse = False 表示升序排序 并且升序为默认值)
综合案例二:约瑟夫环问题
说明:有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到扔掉15个人。由于上帝的保佑,15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。
def main():
persons = [True] * 30
#为了便于下面输出基督教徒的排序
counter,index,number = 0,0,0
while counter < 15:
if persons[index]:
number += 1
if number == 9:
persons[index] = False
counter += 1
number = 0
index += 1
index %= 30
#这一步感觉是可有可无但是缺少会报错,
for person in persons:
print('基督教徒' if person else '非基督教徒',end = " ")
if __name__ == '__main__':
main()
这里面没有用到函数但是这个案例里面的逻辑真的好强(对与我这种小白来讲
遇到的问题
在Day08中函数的封装遇到了一些问题,路过的大神帮忙解释一下,要是不幸大神们没有看到这篇文章还是老样子等一等也许以后就明白了( •̀ ω •́ )y
class Student(object):
#这里的object 也是不能很好的理解
# __init__是一个特殊方法用于在创建对象时进行初始化操作
# 通过这个方法我们可以为学生对象绑定name和age两个属性(这是原文中大神给的解释,我还是不太确切的理解)
def __init__(self, name, age):
self.name = name
self.age = age
谈一谈收获吧!
- 对与for循环的简洁表达有了更新的认识
- 对逻辑思维的态度更加严肃,没有自己逻辑思维的代码,我感觉就仅仅是一串字母,努力锻炼自己的计算机思维
后记
最后跟大家分享一个知乎上的对于面向对象的解释很接地气