牛客网Python入门【01输入输出】

在开始之前,我们复习一下C语言中的数据类型:

来源:https://static.zhihu.com/heifetz/7191.216a26f4.89b44032a371ad982cda.css

而Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

来源:http://www.runoob.com/python3/python3-data-type.html

Python3 中常见的数据类型有:

  • Number(数字)
  • String(字符串)
  • bool(布尔类型)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

Python3 的六个标准数据类型中:

  • 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

一、输出hello,world!

要求:

将字符串 'Hello World!' 存储到变量str中,再使用print语句将其打印出来。

输入: 无

输出: 一行输出字符串Hello World!

本来没啥好写的,输入

print("hello,world!")

就可以了,但是给出的初始代码很容易混淆 ,让人误以为下列代码都要用到

import sys

for line in sys.stdin:
    a = line.split()
    print(int(a[0]) + int(a[1]))

PS:这段代码是一个简单的 Python 脚本,它从标准输入(stdin)中读取输入的每一行,然后将每一行按照空格分割成多个字符串,并计算分割后的第一个和第二个字符串所代表的整数的和。

删掉之后,自己写了一下

str a = 'Hello World!'
print(a)

还是出错,发现疏忽了, 题目要求变量str,即,变量名为str,而非变量类型。正确结果为:

str = 'Hello World!'
print(str)

虽然是最简单的输出,但还是提醒我们要细心看题。

二、多行输出

要求:

将字符串 'Hello World!' 存储到变量str1中,再将字符串 'Hello Nowcoder!' 存储到变量str2中,再使用print语句将其打印出来(一行一个变量)。

输入:无

输出:第一行输出字符串Hello World!,第二行输出字符串Hello Nowcoder!

这里注意,与C语言不同

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    printf("hello, Hello Nowcoder!");
    return 0;
}

输出时,C语言如果不特意加上 "\n",即使把两个字符串分行写,输出的结果也是同一行。

因此,也可以这样写:

 printf("Hello, World!\nhello, Hello Nowcoder!");

相比而言,Python更方便一点

str1='Hello World!'
str2='Hello Nowcoder!'

print(str1)
print(str2)

三、读入字符串 

要求使用input函数读入一个字符串,然后将其输出。

使用Python实现比较简单,输入函数input默认变量类型为字符串,因此两行代码就能解决

str=input()
print(str)

如果要求输入变量为int类型,那么需要强制转换变量类型

str=int(input())
print(str)

但是延伸一下,由于Python和C较为相似,我们可以比较学习。 

对于本题目,如何通过C实现

#include <stdio.h>

int main() {
	char a[100];
    scanf("%s",a);
    printf(a);
    
    return 0;
}

字符型:str(Python)char(C) 

PS:存储类型为 %d %s %e %f %lf %lld之类的格式串,需要提供变量的地址作为参数。这时应该使用取址符 &。但存储数组时,数组名 a 本身就是数组首元素的地址,而 %s 格式说明符会自动将输入的字符串存储到数组中,所以直接使用 a 就可以了。

在 C 语言中,字符数组的长度不能直接为空。需要指定一个长度(如a[100])来定义字符数组。或者动态分配内存,如下:

char *a; // 声明一个指针,用于存储动态分配的内存地址
    a = (char *)malloc(100 * sizeof(char)); // 动态分配 100 个字符的内存空间
    if (a == NULL) {
        printf("内存分配失败\n");
        return 1;
    }

free(a); // 不用时释放动态分配的内存

或者:

char *a = "Hello, World!";       #使用字符指针

char a[] = "Hello, World!";      #使用字符数组的初始化方式

char a[100] = {'\0'};
strcpy(a, "Hello, World!");      #使用字符数组并初始化为 '\0'

总的来说,用字符数组的初始化方式最好。 

关于指针和取址符

当我们使用字符指针时,该如何输出字符串呢?

在 C 语言中,字符串常量在内存中是以字符数组的形式存储的,并以空字符 '\0' 结尾。字符指针指向字符串的第一个字符的地址,因此 *a 所指向的就是字符串的第一个字符。

对于字符串常量 "Hello, World!",字符指针 a 所指向的是字符串的第一个字符 'H'。因此,a[0] 的值就是 'H'

对于取址和指针的问题,可以用例子来展示:

我们让指针p指向数组a,数组类型为char,那么指针p存储的就是数组a的地址,同时也是数组首元素的地址。 

四、读入整数并输出变量类型

要求:使用input函数读入数字并输出数字与变量类型。

输入:输入只有整数。

输出:将输入的数字输出,同时换行输出变量类型。

a=int(input())
print(a)
print(type(a))

在Python中,往往变量赋值以后该变量才会被创建。但在C语言中,你可以手动指定变量的类型,因为在编写代码时你已经知道变量的类型,因此没有此类算法。但typeof()函数似乎可以完成C语言高级用法---typeof()关键字_c语言中typeof-CSDN博客

但好像没必要。

五、格式化输出

要求:假设输入的name为Niuniu,则输出I am Niuniu and I am studying Python in Nowcoder!

str=input()
print("I am %s and I am studying Python in Nowcoder!"%str)

或者

str=input()
print("I am {} and I am studying Python in Nowcoder!".format(str))

在这两种方法中,%s{} 是格式化字符串的占位符,它将会被变量 str的值替换。 

C语言表述也是类似的

#include <stdio.h>

int main() {
    char a[100];
    scanf("%s",a);
    printf("I am %s and I am studying Python in Nowcoder!",a);
    
    return 0;
}

六、按规定小数位数输出

要求把所有读入的数据都保留两位小数输出

number = float(input())
print("{:.2f}".format(number))

由于对Python的函数不了解,开始想使用

a = float(input())
b=int(100 *a)
print(b/100)

这种方式只是简单的先乘1000,再除100,对于普通的数字如1.2345有效,但无法解决题干要求的,输入1.0000,输出1.00,因为在没有强制要求两位小数的情况下,输出为1.0

在Python中,round() 函数会按照四舍五入的规则对数字进行舍入,但它不会自动添加尾部的零来保留指定的小数位数。所以下面代码也无法完成

print(round(1.0000,2))

round(1.0000, 2) 实际上已经四舍五入到了两位小数的精度,即 1.0。如果想要输出为 1.00,可以使用字符串格式化来控制输出的格式,例如:

print("{:.2f}".format(1.0000))

此外还有别的方法:Python中保留两位小数的几种方法_python保留两位小数-CSDN博客 

到这里,已经完成了牛客网中Python入门的第一章输入输出。

 

 

 

 

 

 

 

 

 

 

 

  • 35
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值