《笨方法学习python3》练习11: Asking Question

EX11: Asking Question

  • 例子:

    print("How old are you?", end=' ')
    age = input()
    print("How tall are you?", end=' ')
    height = input()
    print("How much do you weight?", end=' ')
    weight = input()
    
    print(f"So, you're {age} old, {height} tall and {weight} heavy.")
    
  • 学习内容:input()eval()

    • input()
      • 以字符串的方式(string)获取用户输入

        输入:

        a = input("age:") # 数据类型为string
        print(type(a)) # 返回数据类型
        
        b = int(input("age:")) # 数据类型强制转换为整数型
        print(type(b))
        

        结果:

        age:2
        <class 'str'>
        age:3
        <class 'int'>
        

        第一段,返回string类型。

        第二段,用int()强制转换后,返回int类型。

      • input()括号中默认空,若需要输入提示,可以在括号中用引号写入相关提示,会在输入数据前显示。

        输入:

        a = input("age:")
        
        print("age:", end="")
        b = input()
        

        结果:

        age:2
        age:2
        

        第一段和第二段可以等同。

    • eval()
      • python的一个内置函数,返回传入字符串的表达式的结果。

        即变量赋值时,等号右边的表示是写成字符串的格式,返回值就是这个表达式的结果。

      • 语法格式:

        eval(expression, globals, locals)

        expression – 表达式。

        globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。

        locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

        1. 字符串转字典

        输入:

        print(eval("{'name':'linux','age':18}"))
        

        结果:

        {'name': 'linux', 'age': 18}
        
        1. 当后两个参数都为空时,就是一个string类型的算术表达式,计算出结果即可。等价于eval(expression)

        输入:

        print(eval("1 + 2"))
        

        结果:

        3
        
        1. locals参数为空,globals参数不为空时,先查找globals参数中是否存在变量,并计算。

        输入:

        print(eval("{'name':'linux','age':age}",{"age":1822}))
        

        结果:

        {'name': 'linux', 'age': 1822}
        
        1. 当两个参数都不为空时,先查找locals参数,再查找globals参数。

        输入:

        # 是locals()参数
        age = 18 
        print(eval("{'name':'linux','age':age}",{"age":1822},locals()))
        

        结果:

        {'name': 'linux', 'age': 18}
        
  • 改变代码(寻找可能情况及错误)

    • int(input())eval(input())

      输入:

      a = int(input("用int转换: "))
      print("a的类型为: ", type(a))
      print("a: ", a)
      
      b = eval(input("用eval转换: "))
      print("b的类型为: ", type(b))
      print("b: ", b)
      

      结果:

      1、输入整数:

      用int转换: 2
      a的类型为:  <class 'int'>
      a:  2
      用eval转换: 2
      b的类型为:  <class 'int'>
      b:  2
      

      2、输入浮点数

      用int转换: 1.1
      Traceback (most recent call last):
        File "TEST.py", line 1, in <module>
          a = int(input("用int转换: "))
      ValueError: invalid literal for int() with base 10: '1.1'
      
      用eval转换: 1.1
      b的类型为:  <class 'float'>
      b:  1.1
      

      从1和2可以看出,使用int规定数据类型后,只能输入整数。

      eval则可以接受整数和浮点数,能识别出来。

    • eval()

      输入:

      a1 = eval(input('a1: '))
      b1 = eval(input('b1: '))
      print("a1 + b1 =", a1 + b1)
      print("a1数据类型: ", type(a1), " b1数据类型: ", type(b1))
      
      a2 = eval("input('a2: ')")
      b2 = eval("input('b2: ')")
      print("a2 + b2 =", a2 + b2)
      print("a1数据类型: ", type(a2), " b1数据类型: ", type(b2))
      

      结果:

      1. 输入数字

      a1: 1
      b1: 2
      a1 + b1 = 3
      a1数据类型:  <class 'int'>  b1数据类型:  <class 'int'>
      a2: 1
      b2: 2
      a2 + b2 = 12
      a1数据类型:  <class 'str'>  b1数据类型:  <class 'str'>
      
      a1: 2.1
      b1: 1.1
      a1 + b1 = 3.2
      a1数据类型:  <class 'float'>  b1数据类型:  <class 'float'>
      a2: 2.1
      b2: 1.1
      a2 + b2 = 2.11.1
      a1数据类型:  <class 'str'>  b1数据类型:  <class 'str'>
      

      无引号a1 = eval(input('a1: '))输出的数值类型由输入的数值类型决定。

      有引号a2 = eval("input('a2: ')")a2 = input('a2: ')等同,输出的都是str类型的数据。

      2. 输入字符串

      eval(<字符串>)能够以Python表达式的方式解析并执行字符串,并将返回结果输出。

      • eval()函数将去掉字符串的两个引号,将其解释为一个变量。

        对于a1 = eval(input('a1: '))所在的第一段代码:

        a1: hello
        Traceback (most recent call last):
          File "TEST.py", line 1, in <module>
            a1 = eval(input('a1: '))
          File "<string>", line 1, in <module>
        NameError: name 'hello' is not defined
        

        eval()函数将去掉字符串的两个引号,将其解释为一个变量。input('a1: ')执行后是str类型的字符串,eval()函数去掉引号,使得系统认为是变量,所以这里现实的错误是:无法找到hello变量。

        解决方法:(对于字符串,保证执行eval()还带着引号)

        如果eval()括号中没有引号,即eval(input('a1: ')),要在输入字符串时加上引号,即"hello "

        如果eval()括号中有括号,即eval("input('a2: ')"),则不需要在输入时加上引号,即hello

        a1: "hello "
        b1: "world"
        a1 + b1 = hello world
        a1数据类型:  <class 'str'>  b1数据类型:  <class 'str'>
        a2: hello
        b2: world
        a2 + b2 = helloworld
        a1数据类型:  <class 'str'>  b1数据类型:  <class 'str'>
        

      3.eval()函数补充知识

      • eval()函数将去掉字符串的两个引号,将其解释为一个变量。

      • 在处理数字时

        单引号,双引号,三引号eval()函数都将其解释为int类型;单双引号混合使用解释为str类型。

        输入:

        a = eval("2")
        b = eval('2')
        c = eval("'2'")
        
        print("a 的类型: ", a, type(a))
        print("b 的类型: ", b, type(b))
        print("c 的类型: ", c, type(c))
        

        结果:

        a 的类型:  2 <class 'int'>
        b 的类型:  2 <class 'int'>
        c 的类型:  2 <class 'str'>
        

        如果是eval()input()结合,在eval()中,只要input()被引号括起来,输出的就是str类型。

我的GitHub中有详细的代码下载:https://github.com/YukyCookie/learn-python-three-the-hard-way.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
办法”学Python(第3版).mobi带目录、书签、超清文字版 本书是一本Python入门书籍,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。 本书结构非常简单,共包括52个习题,其中26个覆盖了输入/输出、变量和函数三个主题,另外26个覆盖了一些比较高级的话题,如条件判断、循环、类和对象、代码测试及项目的实现等。每一章的格式基本相同,以代码习题开始,按照说明编写代码,运行并检查结果,然后再做附加练习。 Zed Shaw完善了这个堪称世上最好的Python学习系统。只要跟着学习,你就会和迄今为止数十万Zed教过的初学者一样获得成功。 在这本书中,你将通过完成52个精心设计的习题来学会Python。阅读这些习题,把习题的代码精确地写出来(禁止复制和粘贴!),修正你的错误,观察程序的运行。在这个过程中,你将了解软件是如何工作的,好的程序看起来是什么样子,怎样阅读、编写、思考代码,以及如何用专业程序员的技巧来找出并修正错误。最重要的是,你将学到下面这些编写优秀的Python软件必需的初始技能。 这本书会让你的每一分钟投入都有回报。Python是世界上最强大、最受欢迎的编程语言之一,很快你就会成为一名Python程序员。 你还可以看Zed的视频!随书附赠的DVD中包含5个多小时激情挥洒的教学内容:一部完整的Python视频教程!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值