高中生零基础学python

黄同学teen 2020-10-16 11:03:54
## 学python的第一天
各位朋友们大家好,今天是我来到CSND的第一天,也是我真正开始学python的第一天,接下来我将会在这里记录下我每一天学python的过程,希望大家可以一起和我见证这个过程,一起加油努力!

在学习了简单的输入
print
和输出
input
之后,我开始尝试写出判断语句
一个计算体重的简易程序

引用
小明身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数:
低于18.5:过轻
18.5-25:正常 25-28:过重 28-32:肥胖 高于32:严重肥胖


代码如下:

python
weight=80
height=1.75
bmi= weight/height^2
if bmi<18.5:
print("过轻")
if 18.5<=bmi>=25:
print("正常")
elif 25<bmi>28:
print("过重")
elif 28<=bmi>=32:
print("肥胖")
elif bmi>32:
print("严重肥胖")


但是执行之后,发现了错误

> File line 3, in <module>
> bmi= weight/height^2 TypeError: unsupported operand type(s) for ^: 'float' and 'int'

问题是^这个平方号出错,开始我还以为是因为我平方号放到了前面的问题,结果我放到后面以后还是报错
怎么办呢?
我就去ctrl cctrl v 去问了度娘

原来我将 ^ 符号在python错误的理解为指数运算,在python中用指数运算一般采用 (**) 或者
pow(a,b)

而 ^ 在python中已经不是进行指数运算的意思了

> ^是按位异或逻辑运算符

当我把^修改成**后,运行成功了!

进一步尝试
接下来我打算让这个程序可以进行输入,而不是简单的执行和输出
于是我写出了这样一段代码

weight=input("weight:")
height=input("height:")
bmi= weight/height**2
if bmi<18.5:
print("过轻")
if 18.5<=bmi>=25:
print("正常")
elif 25<bmi>28:
print("过重")
elif 28<=bmi>=32:
print("肥胖")
elif bmi>32:
print("严重肥胖")



引用
File line3 ,in
bmi= weight/height^2
TypeError: unsupported operand type(s) for /: 'str' and 'str'


是的,又报错了。
原来这是因为
input()
返回的数据类型是
str
str
不能直接和整数比较,必须先把
str
转换成整数。

咋办呢?用
int()
函数可以解决

接着我把代码更改成

python
a= input("weight:")
b= input("height:")
weight=int(a)
height=int(b)
bmi= weight/height**2
if bmi<18.5:
print("过轻")
elif 18.5<=bmi>=25:
print("正常")
elif 25<bmi>28:
print("过重")
elif 28<=bmi>=32:
print("肥胖")
else :
print("严重肥胖")


执行了下没有问题,但是当数字为小数时,又报错了,
貌似
int()
不支持浮点数,所以我又换成了
float()
这下执行起来没有什么问题,可是我怎么输入数值都只有过轻正常两种结果。

不知道哪里出了问题,待我明早查找一下!
**Good night!**
...全文
244 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄同学teen 2020-10-19
  • 打赏
  • 举报
回复
学习python的第三天 我又来了,今天好累,但还是得坚持学习嘛,废话不多说,Let’s get started! 今天我们要学习的是setdict,他们都是一组key的集合, 但他们有什么区别呢,接下来的学习会告诉我们! 首先我们来看dict
引用
校长布置了个任务给我,让我将全校同学的成绩统计出来,并要求要查找方便。
如果只是几个人,我完全可以用list来完成这个任务
names = ['Mike', 'Bob', 'Alice']
scores = [95, 80, 85]
但全校的人数过于庞大,用list的话,list越长,耗时越长,查找起来速度较慢。 如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:
>>>d = {'Mike': 95, 'Bob': 80, 'Alice': 85}
>>>d['Mike']
95
为什么dict可以这么快?就拿查字典来举例,list就是不按拼音部首直接一个字一个字的去找,而dict是按照拼音部首对应的页码精准查询! dict使用键-值(key-value)存储,具有极快的查找速度。
引用
这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value。
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:
>>>d['Mike'] = 90
>>>d['Mike']
90
由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
>>>d['Jack'] = 90
>>>d['Jack']
90
>>>d['Jack'] = 88
>>>d['Jack']
88
假设名单里没有这位同学的名字,我们用dict去查询会出现什么状况呢?
>>>d['小明']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: '小明'
为了避免这种错误,有两种解决办法: 一是通过in判断key是否存在
>>>'小明' in d
False
二是通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:
>>>d.get('小明')
>>>d.get('小明', -1)
-1
如果我们不小心错误的添加了一个同学的信息,由于数量较大,不方便查找,怎么办呢? 我们可以用pop(key)来删除这个同学和他所对应的value
>>>d.pop('Bob‘)
80
>>>d
{'Mike': 95, 'Alice': 85}
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的 和list比较,dict有以下几个特点: 1.查找和插入的速度极快,不会随着key的增加而变慢; 2.需要占用大量的内存,内存浪费多。 而list相反 1.查找和插入的时间随着元素的增加而增加; 2.查找和插入的时间随着元素的增加而增加;
引用
所以,dict是用空间来换取时间的一种方法。
记住一点,dict的key必须是不可变对象,因为dict是根据key来计算value的位置,如果key的值会变,就会导致每次计算的value都不同,这样dict的内部就混乱了。 set 要创建一个set,需要提供一个list作为输入集合:
>>>s = set([1, 2, 3])
>>>s
{1, 2, 3}
这里,[1,2,3]是一个list,而{1,2,3}是表示set内部的有1,2,3这三个元素。 我们可以通过add(key)来添加set中的元素,
>>>s.add(4)
>>>s
{1, 2, 3, 4}
>>>s.add(4)
>>>s
{1, 2, 3, 4}
是不是发现了什么?我们重复添加了一个4,但并没有显示出来,原因是set会自动过滤掉重复的元素。 通过remove(key)可以删除元素:
>>>s.remove(4)
>>>s
{1, 2, 3}
引用
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
>>>s1 = set([1, 2, 3])
>>>s2 = set([2, 3, 4])
>>>s1 & s2
{2, 3}
>>>s1 | s2
{1, 2, 3, 4}
看到这里,我们应该清楚了,dict和set的唯一区别就是有没有存储对应的value。 但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素” 说了这么多,到底什么是不可变对象呢? 可变对象,比如list
>>>a = ['c','b','a']
>>>a.srot()
>>>a
['a','b','c']
对于不可变对象,比如str
>>>a = 'abc'
>>>a.replace('a','A')#我们将a替换成A
'ABC'
>>>a
'abc'#what?居然没变?
这到底是怎么回事? 让我们用b指向'Abc'看看会怎么样
>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'
原来如此,当我们用replace()的时候,replace实际上是作用在字符串’abc‘上,虽然replace的意思是替换,但相反,replace创建了一个新的字符串’Abc‘,当我们用b来指向这个字符串的时候,就容易理解了!
引用
所以,对于不可变对象来说,调用自身对象的方法不会改变自身,相反还会创建出一个新的对象并返回。
今天的学习就到这里,大家再见!
黄同学teen 2020-10-18
  • 打赏
  • 举报
回复
学习python的第二天 大家好,现在我们接着昨天遗留的问题
a= input("weight:")
b= input("height:")
weight=float(a)
height=float(b)
bmi= weight/height**2
if bmi<18.5:
    print("过轻")
elif 18.5<=bmi>=25:
    print("正常")
elif 25<bmi>28:
    print("过重")
elif 28<=bmi>=32:
    print("肥胖")
else :
    print("严重肥胖")
问题是在执行代码的过程中,无论怎么输入数值,得到的结果都只有过轻正常两种结果。 在论坛发帖后,有位热心的码友回复了我,原因竟然是。。。。。。 我的比较符号写错了,竟然两边都是号,估计我小学数学老师看见得揍死我。 新的知识 接下来,开始学习循环语句 python的循环有两种
for...in...
while
两者的区别在哪里呢 ? 我们先来看
for...in...
引用
例如,我想将我全班同学的名字依次打印出来,可是几十个
print()
恐怕要写到地老天荒,这时候
for...in...
就派上用场了!
这里以我最亲密的三位同学举例
names = ["小红","小明","李华"]
for name in names:
	print(name)
执行这段代码,会依次打印names的每一个元素:

小红  
小明
李华
所以
for x in ...
循环就是把每个元素代入变量x,然后执行缩进块的语句。 接下来是
while
循环
引用
例如,我想计算10以内的偶数之和,可以用一个sum变量做累加
sum=0
n=10
while n>0:
    sum=sum+n
    n=n-2
print(sum)
结果正确
30
break 如果我们想提前结束程序,比如当
sum
>10的时候就结束,
break
语句可以办到这件事情
sum=0
n=10
while n>0:
    sum=sum+n
    if sum>10:
        break
    n=n-2
print(sum)
OK,运行结果正确
18
可见
break
的作用是提前结束循环。 continue
引用
如果我们要打印从1~10的数字,但只打印奇数,该怎么做呢? 让我们用
continue
试试
n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0: # 如果n是偶数,执行continue语句
        continue # continue语句会直接继续进行下一轮循环,后面的print()语句不会执行
    print(n)
结果没有问题
1
3
5
7
9
可见
continue
的作用是提前结束这一轮循环,并直接进行下一轮。
引用
注意和break的区分哦!
今天的学习就到这里吧!大家都早点休息!
DuskCrow_ 2020-10-18
  • 打赏
  • 举报
回复
两天就学到这个地步了。 你知道的太多了。
黄同学teen 2020-10-18
  • 打赏
  • 举报
回复
啊哈哈,您谬赞了
黄同学teen 2020-10-17
  • 打赏
  • 举报
回复
非常感谢各位的支持,我会继续努力的!
庸了个白 2020-10-17
  • 打赏
  • 举报
回复
不错,在使用了code标签之后,你已经超越了这个论坛的所有的新人了。慢慢坚持,考个好学校的计算机系,走好的路线
欢乐的小猪 2020-10-17
  • 打赏
  • 举报
回复
我成人大专明年七月就毕业了。毕业以后再修个本科。
rrrr336 2020-10-16
  • 打赏
  • 举报
回复
你的判断出了点状况, 稍微需要改一下 18.5 <= bmi <= 25 25 < bmi < 28 28 <= bmi <= 32 另外, int() 不能转换小数,如 ‘80.5’, 稍微再改一下: weight = float(a) height = float(b) 不错!!希望你能坚持下去。加油!!!

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧