今天琐事较多,仅学了两课。但是我已经明显感觉的到课后作业难度的大幅度提升。以前有些超纲的题目,我还可以通过一些奇淫巧技来糊弄过去。但是现在的题目,别说通过手段通过了,连看参考答案都要半天。如果一直卡在这个环节,我怀疑学习曲线会下降,甚至有可能弃坑。看来得想想办法了。

言归正传,今天的第一节课是循环的最后一节,主要是教授for…int…语法。同样是循环语法,while是条件判断式的,while 1 > 0:,只要1大于0,循环就会开始。

而for…int…语法是规定次数式的,比如for i in “wangdachui”:print(i),意思有两个。1、每一次循环会遍历wangdachui这个字符串,第一次是w,第二次a,第三次是n,一次类推。2、赋予i后面的字符串的值。

同时每次循环打印出来。整段代码跑出来就是如下图:

同时还有另外一个常用的句式: for i in range (0,10,1):print(i)。这样子呢就是把0~9(注意不是10,而是9)的数字全部打印出来。0代表起点,10代表终点(但不包括终点),1代表步进。简单理解,1的话就是123456789。如果是2的话,就是13579.

今天的作业也很有难度:

第一道作业: 编写一个程序,求解 100~999 之间的所有水仙花数。

科普: 如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。

for num in range(100,1000): #num被定义为100到1000中的每个数字。
    a = int(num / 100) #num的百位数 /100,得到第一位数字
    b = int((num - a * 100) / 10) #以下是小学题目,这里就不多解释了
    c = int(num - a * 100 - b * 10)
    if num == (a**3 + b**3 +c**3):#判断水仙花数的条件
        print(num,"是水仙花数")

这道题难点在于如何把三位数的百、十、个三个数字拆出来。一旦拆出来就没啥难度了。比较考验小学数学的水平。

第二道作业:

判断回文数:回文数就是从左到右以及从右到左都是同一个数字的数字,比如12321.从左读是12321,从右读也还是12321.

num = int(input("请输入一个整数:")) #输入一个数字
a = 0 #定义a为0
sum = ""#定义sum为空
for i in str(num): #把num的整串数字变成字符,并遍历
    a = str(i) #a等于字符串的数字
    sum = str(a) + str(sum) #拼接字符串数字
b = int(sum) #定义 b为整型的sum(将字符串转化为数字)
if num == b: #如果拼出来的数字跟输入的数字一致
    print(num,"是回文数") #则是回文数
else: #否则
    print(num,"不是回文数") #不是回文数

这里我的思路是先把一个数字转化为字符串,比如12345,转化为1,2,3,4,5五个字符。然后倒着拼一遍,变成54321,再转化为整型。如果不转为整型,则字符串不能与数字做比较。转化完之后,如果倒着拼的数字也等于正着拼的数字,那就是回文数。否则就不是。

接下来是列表的内容:

看课程的时候,觉得列表可简单了,不就是弄个[],把所有元素往里怼,然后组成合集么

就像一个文件夹,如n = [1,2,”a”,”b”]。那么文件夹的名字就叫n,里面包含了两个txt文本,一个叫1,一个叫2.还有两张图片,一个叫a,一个叫b。

奏是这么简单。想要往外拿的时候输入文件所在的绝对地址就好。比如n[3],就是把文件夹里的第四个文件拿出来(起点为0不是1),即是“b”。

还有就是切片,也就是一次性掏出多个文件。n = [1,2,”a”,”b”],print(n[:2],也就是说从头开始,一直打印到第2的位置。如果是n[2:],那就是把2以后的所有数都打印出来。

为防止混淆,必须说明一下,[]里的数字是元素的顺序数字,也就是下标。[3]也就是从前往后数第三个的意思,[-3]就是从后往前数第三个的意思。

作业是:

(1)给定一个整数列表 nums 和一个目标值 target,请在该数组中找出和为目标值的两个元素,并将它们的数组下标值打印出来。

(2)这次我们想让用户自己来录入 nums 和 target 的数据,请修改上一题的代码,让程序实现如下

(3) 最后,回忆前面我们学习过的 random 模块,生成一个由 10000 个整数(范围是 1 ~ 65535)构成的随机列表,目标值 target 由用户输入。 第一题我做出来了,因为最简单。 第二题卡了我大概四五个小时,于是我选择了放弃。这大概是我第一次做不出作业,选择放弃看答案的题目。 难点主要在于如何把用户输入的数字遍历打印出来,而不相加。 我尝试了用拆分数字的方式,结果总是出问题。 第二题参考答案如下:

nums = [] #创建列表nums

isInput = True #isTnput定义为真
while isInput == True: #如果isTnput为真,则开始循环
    x = input("请录入一个整数(输入STOP结束):")#让用户输入一个数字,并赋值给X
    if x != "STOP": #假如X不等于STOP
        nums.append(int(x)) #.append是超纲内容,课上没讲,百度上是说在列表结尾增加内容哦。也就是说()里面的内容会被加入到nums的最后一个。
    else:
        isInput = False #如果等于STOP,isTnput为假,不再满足循环条件。

target = int(input("请录入目标整数:")) #设定target为用户输入的一个整型数字。

isFind = False #inFind赋值为假
n = len(nums) #n 赋值为nums文件夹里面的文件个数(若里面有五个文件,则为5)。
for i in range(n): #循环nums文件夹里的文件个数(说人话就是若数字为5就循环4次,是的,是4次),并赋值给i
    for j in range(i+1, n): #循环i+1到n的次数
        if nums[i] + nums[j] == target: #如果文件夹里第i个位置和第j个位置的数字相加等于用户输入的目标整数
            print([i, j]) #打印i和j
            isFind = True #isFind为真

if isFind == False:#如果isFind为假
    print("找不到!") #则打印找不到

当我看到append的时候,我的眼中满含泪水。要是有这么方便可以直接往文件夹里扔元素的东西,我何至于不停的纠结怎么将用户输入的数字塞入文件夹中,并且循环时不相加吗?弄的我又要转化为字符串,又要转化为数字的。

超纲,害死人啊。

第三题是基于第二题的,所以我没做。直接放参考答案吧。

import random #调用随机模块

nums = [] #创建文件夹,并取名nums

for i in range(10000): #循环10000次,并赋值给i
    x = random.randint(1, 65535) # x等于1~65535里面的任意一个数字
    nums.append(x) #把x加入到nums文件夹里的最后一个位置

target = int(input("请录入目标整数:"))#定义target为用户输入的一个整数

isFind = False #定义inFind为假
n = len(nums) # n被赋值为nums里的文件个数
for i in range(n): #循环n次,并赋值给i
    for j in range(i+1, n): #循环i+1~(n-1)次,并赋值给j
        if nums[i] + nums[j] == target: #加入nums列表里的i位置与j位置的数字相加等于用户输入的数值
            print([i, j])#输出i位置和j位置的下标(也就是位置)
            isFind = True #定义isFind为真

if isFind == False:#如果为假
    print("找不到!")#那就打印“找不到“

代码看着都很简单,但是自己看着题目思考答案就突出一个复杂,难受,心悸,想吐。

不说了,不说了,八点,有骨气。

胭惜雨

2020年12月24日

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据